diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index 824467f..0000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Deploy to GitHub Pages - -on: - push: - branches: - - main - -permissions: - contents: write - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - - uses: actions/setup-python@v5 - with: - python-version: '3.12' - cache: pip - - - name: Install dependencies - run: pip install -r requirements.txt - - - name: Configure git - run: | - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - - - name: Deploy to GitHub Pages - run: mkdocs gh-deploy --force diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 6d5c6c8..0000000 --- a/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -site/ -__pycache__/ -*.pyc -*.pyo -.venv/ -venv/ -.env -.env.local -.DS_Store -Thumbs.db -.idea/ -.vscode/ -*.swp -*.swo -*~ diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..490cf8b --- /dev/null +++ b/404.html @@ -0,0 +1,1622 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + +
+ +

404 - Not found

+ +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 9a30399..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,31 +0,0 @@ -# 기여 가이드 - -이 프로젝트에 관심을 가져주셔서 감사합니다. - -## 기여 방법 - -### Issue - -- **오류 제보**: 잘못된 수치, 누락된 항목, 깨진 링크 등 -- **내용 보강**: 추가하면 좋을 문서나 설명 -- **번역 개선**: 어색한 표현, 용어 통일 제안 - -### Pull Request - -1. 이 저장소를 Fork합니다 -2. 변경 사항을 작업합니다 -3. PR을 생성하며, 무엇을 왜 변경했는지 설명합니다 - -### 작성 규칙 - -- **한국어 용어**: 영어 원문을 병기합니다 — `컨트롤(Control)` -- **출처 명시**: 수치나 사실 관계는 NIST/OWASP 원문 출처를 포함합니다 -- **마크다운**: 기존 파일의 포맷(표, 접기/펼치기 등)을 따릅니다 - -## 범위 - -이 프로젝트는 NIST와 OWASP의 **공식 출판물을 한국어로 요약**하는 것이 목적입니다. 개인 의견, 해석, 또는 원문에 없는 내용의 추가는 지양합니다. - -## 라이선스 - -기여하신 내용은 [CC BY-NC-SA 4.0](./LICENSE) 라이선스로 제공됩니다. diff --git a/NIST/CSF-2.0/README.md b/NIST/CSF-2.0/README.md deleted file mode 100644 index a5e6541..0000000 --- a/NIST/CSF-2.0/README.md +++ /dev/null @@ -1,353 +0,0 @@ -# NIST Cybersecurity Framework (CSF) 2.0 - -## 개요 - -| 항목 | 내용 | -|------|------| -| **정식 명칭** | NIST Cybersecurity Framework 2.0 (CSWP 29) | -| **발행일** | 2024년 2월 26일 | -| **이전 버전** | CSF 1.1 (2018년 4월) | -| **대상** | 모든 조직 (규모·업종 불문, CSF 2.0부터 연방기관 한정이 아닌 범용으로 확대) | -| **원문** | https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.29.pdf | -| **공식 사이트** | https://www.nist.gov/cyberframework | - -CSF는 조직이 사이버보안 리스크를 **이해하고, 줄이고, 소통하기 위한 프레임워크**입니다. 규범적 통제 목록이 아닌, **목표 기반(outcome-based)** 접근을 제공합니다. - ---- - -## CSF 2.0의 주요 변경점 (vs 1.1) - -| 변경 사항 | 설명 | -|-----------|------| -| **Govern 기능 신설** | 사이버보안 거버넌스를 독립 Function으로 격상. 기존 5개 → 6개 Function | -| **범용 대상으로 확대** | "연방기관 및 핵심 인프라" → "모든 규모, 모든 업종의 조직" | -| **공급망 리스크 관리 강화** | GV.SC로 독립 Category화 (기존 ID.SC에서 이동) | -| **Category/Subcategory 재구성** | 1.1의 23 Categories → 2.0의 22 Categories, Subcategories 전면 재편 | -| **Community Profile 도입** | 특정 업종/사용 사례에 맞는 공유 가능한 CSF Profile 개념 추가 | -| **Informative References 확장** | SP 800-53, ISO 27001 등 외부 참조와의 매핑 체계 강화 | - ---- - -## 핵심 구성 요소 - -CSF 2.0은 세 가지 핵심 요소로 구성됩니다: - -### 1. CSF Core - -6개 **Function** → 22개 **Category** → 106개 **Subcategory**로 이루어진 사이버보안 성과(outcome) 체계입니다. - -### 2. CSF Profile - -CSF Core의 성과 항목에 조직의 상태를 매핑한 것입니다. 두 종류가 있습니다: - -**Organizational Profile** (개별 조직용) -- **Current Profile**: 현재 달성하고 있는 성과 -- **Target Profile**: 달성하고자 하는 목표 성과 -- 두 Profile을 비교하는 **Gap Analysis**를 통해 개선 우선순위를 도출합니다. - -**Community Profile** (업종/사용 사례 공유용, CSF 2.0에서 신설) -- 특정 업종(예: 금융, 의료)이나 사용 사례에 맞게 작성된 공유 가능한 기준선 -- 조직이 자체 Organizational Profile을 만들 때 출발점으로 활용할 수 있습니다. - -### 3. CSF Tiers (Tier 1~4) - -조직의 사이버보안 리스크 관리 접근 수준을 특징화합니다. **성숙도 모델이 아닙니다** — 모든 조직이 Tier 4를 목표로 할 필요는 없으며, 조직의 리스크 환경에 맞는 Tier를 선택합니다. - -| Tier | 명칭 | 특징 | -|------|------|------| -| Tier 1 | Partial | 리스크 관리가 비공식적이고 임기응변적 | -| Tier 2 | Risk Informed | 리스크를 인식하지만 조직 전체에 일관된 정책이 없음 | -| Tier 3 | Repeatable | 공식적인 정책이 있고 정기적으로 검토됨 | -| Tier 4 | Adaptive | 리스크 관리가 지속적으로 학습하고 적응하는 문화로 정착 | - ---- - -## CSF Core 전체 구조 - -### 한눈에 보기 - -| Function | 코드 | 설명 | Categories | Subcategories | -|----------|------|------|-----------|---------------| -| **Govern** | GV | 조직의 사이버보안 리스크 관리 전략, 기대치, 정책을 수립·소통·모니터링 | 6개 | 31개 | -| **Identify** | ID | 조직의 현재 사이버보안 리스크를 이해 | 3개 | 21개 | -| **Protect** | PR | 사이버보안 리스크를 관리하기 위한 보호조치를 적용 | 5개 | 22개 | -| **Detect** | DE | 사이버보안 공격과 침해를 탐지·분석 | 2개 | 11개 | -| **Respond** | RS | 탐지된 사이버보안 사고에 대응 | 4개 | 13개 | -| **Recover** | RC | 사이버보안 사고로 영향받은 자산과 운영을 복구 | 2개 | 8개 | -| | | **합계** | **22개** | **106개** | - -> 아래 각 Function을 클릭하면 Category 및 Subcategory 전체 목록을 확인할 수 있습니다. -> Subcategory 번호에 갭이 있는 경우(예: PR.DS-02 다음에 PR.DS-10)가 있습니다. 이는 CSF 1.1에서 2.0으로 재구성되면서 일부 항목이 통합·이동·삭제된 결과이며, 누락이 아닙니다. - ---- - -
-GV — Govern (거버넌스) - -> 조직의 사이버보안 리스크 관리 전략, 기대치, 정책을 수립하고 소통하며 모니터링합니다. - -#### GV.OC — Organizational Context (조직 맥락) - -| ID | 성과 | -|----|------| -| GV.OC-01 | 조직의 미션이 이해되고 사이버보안 리스크 관리에 반영된다 | -| GV.OC-02 | 내부/외부 이해관계자와 그들의 사이버보안 리스크 관리에 대한 요구 및 기대가 파악되고 고려된다 | -| GV.OC-03 | 사이버보안 관련 법적·규제·계약 요구사항(프라이버시·시민 자유 의무 포함)이 이해되고 관리된다 | -| GV.OC-04 | 외부 이해관계자가 의존하거나 기대하는 핵심 목표, 역량, 서비스가 이해되고 소통된다 | -| GV.OC-05 | 조직이 의존하는 성과, 역량, 서비스가 이해되고 소통된다 | - -#### GV.RM — Risk Management Strategy (리스크 관리 전략) - -| ID | 성과 | -|----|------| -| GV.RM-01 | 리스크 관리 목표가 수립되고 조직 이해관계자의 합의를 받는다 | -| GV.RM-02 | 리스크 허용범위(appetite) 및 허용수준(tolerance) 선언이 수립·소통·유지된다 | -| GV.RM-03 | 사이버보안 리스크 관리 활동과 결과가 전사 리스크 관리 프로세스에 포함된다 | -| GV.RM-04 | 적절한 리스크 대응 옵션을 설명하는 전략 방향이 수립되고 소통된다 | -| GV.RM-05 | 공급자 및 제3자 리스크를 포함한 사이버보안 리스크에 대한 조직 내 소통 채널이 수립된다 | -| GV.RM-06 | 사이버보안 리스크를 산정·문서화·범주화·우선순위화하는 표준화된 방법이 수립되고 소통된다 | -| GV.RM-07 | 전략적 기회(즉, 긍정적 리스크)가 파악되고 조직의 사이버보안 리스크 논의에 포함된다 | - -#### GV.RR — Roles, Responsibilities, and Authorities (역할·책임·권한) - -| ID | 성과 | -|----|------| -| GV.RR-01 | 조직 리더십이 사이버보안 리스크에 대해 책임을 지며, 리스크 인식적이고 윤리적이며 지속적으로 개선하는 문화를 조성한다 | -| GV.RR-02 | 사이버보안 리스크 관리와 관련된 역할, 책임, 권한이 수립·소통·이해·집행된다 | -| GV.RR-03 | 사이버보안 리스크 전략, 역할, 책임, 정책에 상응하는 적절한 자원이 배분된다 | -| GV.RR-04 | 사이버보안이 인사 관행에 포함된다 | - -#### GV.PO — Policy (정책) - -| ID | 성과 | -|----|------| -| GV.PO-01 | 사이버보안 리스크를 관리하기 위한 정책이 조직 맥락, 사이버보안 전략, 우선순위에 기반하여 수립·소통·집행된다 | -| GV.PO-02 | 사이버보안 리스크 관리 정책이 요구사항, 위협, 기술, 조직 미션의 변화를 반영하여 검토·갱신·소통·집행된다 | - -#### GV.OV — Oversight (감독) - -| ID | 성과 | -|----|------| -| GV.OV-01 | 사이버보안 리스크 관리 전략 결과가 전략과 방향의 정보 제공 및 조정을 위해 검토된다 | -| GV.OV-02 | 사이버보안 리스크 관리 전략이 조직 요구사항과 리스크를 커버하도록 검토·조정된다 | -| GV.OV-03 | 조직의 사이버보안 리스크 관리 성과가 평가되고 필요한 조정을 위해 검토된다 | - -#### GV.SC — Cybersecurity Supply Chain Risk Management (공급망 리스크 관리) - -| ID | 성과 | -|----|------| -| GV.SC-01 | 사이버보안 공급망 리스크 관리 프로그램, 전략, 목표, 정책, 프로세스가 수립되고 조직 이해관계자의 합의를 받는다 | -| GV.SC-02 | 공급자, 고객, 파트너에 대한 사이버보안 역할과 책임이 수립·소통되며 내외부적으로 조율된다 | -| GV.SC-03 | 사이버보안 공급망 리스크 관리가 사이버보안 및 전사 리스크 관리, 리스크 평가, 개선 프로세스에 통합된다 | -| GV.SC-04 | 공급자가 파악되고 중요도에 따라 우선순위가 매겨진다 | -| GV.SC-05 | 공급망의 사이버보안 리스크를 해결하기 위한 요구사항이 수립·우선순위화되고, 공급자 및 관련 제3자와의 계약에 통합된다 | -| GV.SC-06 | 공식 공급자 또는 제3자 관계를 맺기 전에 리스크를 줄이기 위한 계획과 실사가 수행된다 | -| GV.SC-07 | 공급자, 그들의 제품/서비스 및 제3자가 초래하는 리스크가 관계 기간 동안 이해·기록·우선순위화·평가·대응·모니터링된다 | -| GV.SC-08 | 관련 공급자 및 제3자가 사고 계획, 대응, 복구 활동에 포함된다 | -| GV.SC-09 | 공급망 보안 관행이 사이버보안 및 전사 리스크 관리 프로그램에 통합되고, 기술 제품/서비스 생명주기 전반에 걸쳐 성과가 모니터링된다 | -| GV.SC-10 | 사이버보안 공급망 리스크 관리 계획이 파트너십이나 서비스 계약 종료 후의 활동에 대한 조항을 포함한다 | - -
- -
-ID — Identify (식별) - -> 조직의 현재 사이버보안 리스크를 이해합니다. - -#### ID.AM — Asset Management (자산 관리) - -| ID | 성과 | -|----|------| -| ID.AM-01 | 조직이 관리하는 하드웨어 인벤토리가 유지된다 | -| ID.AM-02 | 조직이 관리하는 소프트웨어, 서비스, 시스템 인벤토리가 유지된다 | -| ID.AM-03 | 조직의 인가된 네트워크 통신 및 내부/외부 네트워크 데이터 흐름의 표현이 유지된다 | -| ID.AM-04 | 공급자가 제공하는 서비스 인벤토리가 유지된다 | -| ID.AM-05 | 자산이 분류, 중요도, 자원, 미션 영향에 따라 우선순위가 매겨진다 | -| ID.AM-07 | 지정된 데이터 유형에 대한 데이터 인벤토리와 해당 메타데이터가 유지된다 | -| ID.AM-08 | 시스템, 하드웨어, 소프트웨어, 서비스, 데이터가 생명주기 전반에 걸쳐 관리된다 | - -#### ID.RA — Risk Assessment (리스크 평가) - -| ID | 성과 | -|----|------| -| ID.RA-01 | 자산의 취약점이 식별·검증·기록된다 | -| ID.RA-02 | 사이버 위협 인텔리전스가 정보 공유 포럼과 소스로부터 수신된다 | -| ID.RA-03 | 조직에 대한 내부/외부 위협이 식별되고 기록된다 | -| ID.RA-04 | 위협이 취약점을 악용할 잠재적 영향과 가능성이 식별되고 기록된다 | -| ID.RA-05 | 위협, 취약점, 가능성, 영향이 내재 리스크를 이해하고 리스크 대응 우선순위를 결정하는 데 사용된다 | -| ID.RA-06 | 리스크 대응이 선택·우선순위화·계획·추적·소통된다 | -| ID.RA-07 | 변경과 예외가 관리되고, 리스크 영향이 평가·기록·추적된다 | -| ID.RA-08 | 취약점 공개를 수신·분석·대응하는 프로세스가 수립된다 | -| ID.RA-09 | 하드웨어 및 소프트웨어의 진정성과 무결성이 취득·사용 전에 평가된다 | -| ID.RA-10 | 핵심 공급자가 취득 전에 평가된다 | - -#### ID.IM — Improvement (개선) - -| ID | 성과 | -|----|------| -| ID.IM-01 | 평가로부터 개선 사항이 식별된다 | -| ID.IM-02 | 공급자 및 관련 제3자와의 협력을 포함한 보안 테스트·훈련으로부터 개선 사항이 식별된다 | -| ID.IM-03 | 운영 프로세스, 절차, 활동의 실행으로부터 개선 사항이 식별된다 | -| ID.IM-04 | 운영에 영향을 미치는 사고 대응 계획 및 기타 사이버보안 계획이 수립·소통·유지·개선된다 | - -
- -
-PR — Protect (보호) - -> 사이버보안 리스크를 관리하기 위한 보호조치를 적용합니다. - -#### PR.AA — Identity Management, Authentication, and Access Control (식별·인증·접근제어) - -| ID | 성과 | -|----|------| -| PR.AA-01 | 인가된 사용자, 서비스, 하드웨어에 대한 식별 정보와 자격증명이 조직에 의해 관리된다 | -| PR.AA-02 | 식별 정보가 상호작용 맥락에 따라 확인(proofing)되고 자격증명에 바인딩된다 | -| PR.AA-03 | 사용자, 서비스, 하드웨어가 인증된다 | -| PR.AA-04 | 식별 정보 단언(identity assertion)이 보호·전달·검증된다 | -| PR.AA-05 | 접근 권한, 자격, 인가가 정책에 정의되고, 최소 권한 및 직무 분리 원칙을 통합하여 관리·집행·검토된다 | -| PR.AA-06 | 자산에 대한 물리적 접근이 리스크에 상응하게 관리·모니터링·집행된다 | - -#### PR.AT — Awareness and Training (인식 및 교육) - -| ID | 성과 | -|----|------| -| PR.AT-01 | 직원에게 사이버보안 리스크를 고려하여 일반 업무를 수행할 수 있는 지식과 기술을 갖추도록 인식 및 교육이 제공된다 | -| PR.AT-02 | 전문 역할을 수행하는 개인에게 사이버보안 리스크를 고려하여 관련 업무를 수행할 수 있는 지식과 기술을 갖추도록 인식 및 교육이 제공된다 | - -#### PR.DS — Data Security (데이터 보안) - -| ID | 성과 | -|----|------| -| PR.DS-01 | 저장 데이터(data-at-rest)의 기밀성, 무결성, 가용성이 보호된다 | -| PR.DS-02 | 전송 데이터(data-in-transit)의 기밀성, 무결성, 가용성이 보호된다 | -| PR.DS-10 | 사용 중 데이터(data-in-use)의 기밀성, 무결성, 가용성이 보호된다 | -| PR.DS-11 | 데이터 백업이 생성·보호·유지·테스트된다 | - -#### PR.PS — Platform Security (플랫폼 보안) - -| ID | 성과 | -|----|------| -| PR.PS-01 | 구성 관리 관행이 수립되고 적용된다 | -| PR.PS-02 | 소프트웨어가 리스크에 상응하게 유지·교체·제거된다 | -| PR.PS-03 | 하드웨어가 리스크에 상응하게 유지·교체·제거된다 | -| PR.PS-04 | 로그 기록이 생성되고 지속적 모니터링에 활용 가능하게 된다 | -| PR.PS-05 | 비인가 소프트웨어의 설치 및 실행이 방지된다 | -| PR.PS-06 | 안전한 소프트웨어 개발 관행이 통합되고, 소프트웨어 개발 생명주기 전반에 걸쳐 성과가 모니터링된다 | - -#### PR.IR — Technology Infrastructure Resilience (기술 인프라 복원력) - -| ID | 성과 | -|----|------| -| PR.IR-01 | 네트워크 및 환경이 비인가 논리적 접근과 사용으로부터 보호된다 | -| PR.IR-02 | 조직의 기술 자산이 환경적 위협으로부터 보호된다 | -| PR.IR-03 | 정상 및 비정상 상황에서 복원력 요구사항을 달성하기 위한 메커니즘이 구현된다 | -| PR.IR-04 | 가용성을 보장하기 위한 적절한 자원 용량이 유지된다 | - -
- -
-DE — Detect (탐지) - -> 사이버보안 공격과 침해 가능성을 탐지하고 분석합니다. - -#### DE.CM — Continuous Monitoring (지속적 모니터링) - -| ID | 성과 | -|----|------| -| DE.CM-01 | 잠재적 유해 이벤트를 발견하기 위해 네트워크 및 네트워크 서비스가 모니터링된다 | -| DE.CM-02 | 잠재적 유해 이벤트를 발견하기 위해 물리적 환경이 모니터링된다 | -| DE.CM-03 | 잠재적 유해 이벤트를 발견하기 위해 인원 활동 및 기술 사용이 모니터링된다 | -| DE.CM-06 | 잠재적 유해 이벤트를 발견하기 위해 외부 서비스 제공자의 활동 및 서비스가 모니터링된다 | -| DE.CM-09 | 잠재적 유해 이벤트를 발견하기 위해 컴퓨팅 하드웨어/소프트웨어, 런타임 환경, 데이터가 모니터링된다 | - -#### DE.AE — Adverse Event Analysis (유해 이벤트 분석) - -| ID | 성과 | -|----|------| -| DE.AE-02 | 잠재적 유해 이벤트가 관련 활동을 더 잘 이해하기 위해 분석된다 | -| DE.AE-03 | 다수의 소스로부터 정보가 상관 분석된다 | -| DE.AE-04 | 유해 이벤트의 추정 영향과 범위가 파악된다 | -| DE.AE-06 | 유해 이벤트에 대한 정보가 인가된 담당자 및 도구에 제공된다 | -| DE.AE-07 | 사이버 위협 인텔리전스 및 기타 맥락 정보가 분석에 통합된다 | -| DE.AE-08 | 유해 이벤트가 정의된 사고 기준을 충족할 때 사고가 선언된다 | - -
- -
-RS — Respond (대응) - -> 탐지된 사이버보안 사고에 대해 조치를 취합니다. - -#### RS.MA — Incident Management (사고 관리) - -| ID | 성과 | -|----|------| -| RS.MA-01 | 사고가 선언되면 관련 제3자와 협력하여 사고 대응 계획이 실행된다 | -| RS.MA-02 | 사고 보고가 분류(triage)되고 검증된다 | -| RS.MA-03 | 사고가 범주화되고 우선순위가 매겨진다 | -| RS.MA-04 | 필요에 따라 사고가 에스컬레이션되거나 격상된다 | -| RS.MA-05 | 사고 복구를 개시하기 위한 기준이 적용된다 | - -#### RS.AN — Incident Analysis (사고 분석) - -| ID | 성과 | -|----|------| -| RS.AN-03 | 사고 중 발생한 상황과 근본 원인을 규명하기 위한 분석이 수행된다 | -| RS.AN-06 | 조사 중 수행된 조치가 기록되고, 기록의 무결성과 출처가 보존된다 | -| RS.AN-07 | 사고 데이터와 메타데이터가 수집되고, 무결성과 출처가 보존된다 | -| RS.AN-08 | 사고의 규모가 추정되고 검증된다 | - -#### RS.CO — Incident Response Reporting and Communication (대응 보고·소통) - -| ID | 성과 | -|----|------| -| RS.CO-02 | 내부 및 외부 이해관계자에게 사고가 통지된다 | -| RS.CO-03 | 지정된 내부 및 외부 이해관계자와 정보가 공유된다 | - -#### RS.MI — Incident Mitigation (사고 완화) - -| ID | 성과 | -|----|------| -| RS.MI-01 | 사고가 억제(contain)된다 | -| RS.MI-02 | 사고가 제거(eradicate)된다 | - -
- -
-RC — Recover (복구) - -> 사이버보안 사고로 영향받은 자산과 운영을 복구합니다. - -#### RC.RP — Incident Recovery Plan Execution (복구 계획 실행) - -| ID | 성과 | -|----|------| -| RC.RP-01 | 사고 대응 프로세스에서 개시되면 사고 대응 계획의 복구 부분이 실행된다 | -| RC.RP-02 | 복구 조치가 선택·범위 설정·우선순위화·수행된다 | -| RC.RP-03 | 백업 및 기타 복원 자산의 무결성이 복원에 사용하기 전에 검증된다 | -| RC.RP-04 | 핵심 미션 기능과 사이버보안 리스크 관리가 사고 후 운영 정상화를 수립하는 데 고려된다 | -| RC.RP-05 | 복원된 자산의 무결성이 검증되고, 시스템과 서비스가 복원되며, 정상 운영 상태가 확인된다 | -| RC.RP-06 | 기준에 따라 사고 복구 종료가 선언되고, 사고 관련 문서화가 완료된다 | - -#### RC.CO — Incident Recovery Communication (복구 소통) - -| ID | 성과 | -|----|------| -| RC.CO-03 | 복구 활동과 운영 역량 복원 진행 상황이 지정된 내부/외부 이해관계자에게 소통된다 | -| RC.CO-04 | 사고 복구에 대한 공개 업데이트가 승인된 방법과 메시징을 사용하여 공유된다 | - -
- ---- - -## 참고 자료 - -| 리소스 | URL | -|--------|-----| -| CSF 2.0 원문 (CSWP 29) | https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.29.pdf | -| CSF 2.0 공식 사이트 | https://www.nist.gov/cyberframework | -| CSF 2.0 Quick Start Guide | https://csrc.nist.gov/pubs/sp/1299/final | -| CSF 2.0 Reference Tool | https://csrc.nist.gov/projects/cybersecurity-framework/filters#/csf/filters | -| CSF 2.0 ↔ SP 800-53 매핑 | https://csrc.nist.gov/projects/cprt | -| CSF 2.0 OSCAL (JSON) | https://github.com/usnistgov/oscal-content/tree/main/nist.gov/CSF/v2.0 | diff --git a/NIST/CSF-2.0/index.html b/NIST/CSF-2.0/index.html new file mode 100644 index 0000000..b153008 --- /dev/null +++ b/NIST/CSF-2.0/index.html @@ -0,0 +1,3467 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CSF 2.0 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + +

NIST Cybersecurity Framework (CSF) 2.0

+

개요

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
정식 명칭NIST Cybersecurity Framework 2.0 (CSWP 29)
발행일2024년 2월 26일
이전 버전CSF 1.1 (2018년 4월)
대상모든 조직 (규모·업종 불문, CSF 2.0부터 연방기관 한정이 아닌 범용으로 확대)
원문https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.29.pdf
공식 사이트https://www.nist.gov/cyberframework
+

CSF는 조직이 사이버보안 리스크를 이해하고, 줄이고, 소통하기 위한 프레임워크입니다. 규범적 통제 목록이 아닌, 목표 기반(outcome-based) 접근을 제공합니다.

+
+

CSF 2.0의 주요 변경점 (vs 1.1)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
변경 사항설명
Govern 기능 신설사이버보안 거버넌스를 독립 Function으로 격상. 기존 5개 → 6개 Function
범용 대상으로 확대"연방기관 및 핵심 인프라" → "모든 규모, 모든 업종의 조직"
공급망 리스크 관리 강화GV.SC로 독립 Category화 (기존 ID.SC에서 이동)
Category/Subcategory 재구성1.1의 23 Categories → 2.0의 22 Categories, Subcategories 전면 재편
Community Profile 도입특정 업종/사용 사례에 맞는 공유 가능한 CSF Profile 개념 추가
Informative References 확장SP 800-53, ISO 27001 등 외부 참조와의 매핑 체계 강화
+
+

핵심 구성 요소

+

CSF 2.0은 세 가지 핵심 요소로 구성됩니다:

+

1. CSF Core

+

6개 Function → 22개 Category → 106개 Subcategory로 이루어진 사이버보안 성과(outcome) 체계입니다.

+

2. CSF Profile

+

CSF Core의 성과 항목에 조직의 상태를 매핑한 것입니다. 두 종류가 있습니다:

+

Organizational Profile (개별 조직용) +- Current Profile: 현재 달성하고 있는 성과 +- Target Profile: 달성하고자 하는 목표 성과 +- 두 Profile을 비교하는 Gap Analysis를 통해 개선 우선순위를 도출합니다.

+

Community Profile (업종/사용 사례 공유용, CSF 2.0에서 신설) +- 특정 업종(예: 금융, 의료)이나 사용 사례에 맞게 작성된 공유 가능한 기준선 +- 조직이 자체 Organizational Profile을 만들 때 출발점으로 활용할 수 있습니다.

+

3. CSF Tiers (Tier 1~4)

+

조직의 사이버보안 리스크 관리 접근 수준을 특징화합니다. 성숙도 모델이 아닙니다 — 모든 조직이 Tier 4를 목표로 할 필요는 없으며, 조직의 리스크 환경에 맞는 Tier를 선택합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Tier명칭특징
Tier 1Partial리스크 관리가 비공식적이고 임기응변적
Tier 2Risk Informed리스크를 인식하지만 조직 전체에 일관된 정책이 없음
Tier 3Repeatable공식적인 정책이 있고 정기적으로 검토됨
Tier 4Adaptive리스크 관리가 지속적으로 학습하고 적응하는 문화로 정착
+
+

CSF Core 전체 구조

+

한눈에 보기

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Function코드설명CategoriesSubcategories
GovernGV조직의 사이버보안 리스크 관리 전략, 기대치, 정책을 수립·소통·모니터링6개31개
IdentifyID조직의 현재 사이버보안 리스크를 이해3개21개
ProtectPR사이버보안 리스크를 관리하기 위한 보호조치를 적용5개22개
DetectDE사이버보안 공격과 침해를 탐지·분석2개11개
RespondRS탐지된 사이버보안 사고에 대응4개13개
RecoverRC사이버보안 사고로 영향받은 자산과 운영을 복구2개8개
합계22개106개
+
+

아래 각 Function을 클릭하면 Category 및 Subcategory 전체 목록을 확인할 수 있습니다.
+Subcategory 번호에 갭이 있는 경우(예: PR.DS-02 다음에 PR.DS-10)가 있습니다. 이는 CSF 1.1에서 2.0으로 재구성되면서 일부 항목이 통합·이동·삭제된 결과이며, 누락이 아닙니다.

+
+
+
+GV — Govern (거버넌스) +
+

조직의 사이버보안 리스크 관리 전략, 기대치, 정책을 수립하고 소통하며 모니터링합니다.

+
+

GV.OC — Organizational Context (조직 맥락)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
GV.OC-01조직의 미션이 이해되고 사이버보안 리스크 관리에 반영된다
GV.OC-02내부/외부 이해관계자와 그들의 사이버보안 리스크 관리에 대한 요구 및 기대가 파악되고 고려된다
GV.OC-03사이버보안 관련 법적·규제·계약 요구사항(프라이버시·시민 자유 의무 포함)이 이해되고 관리된다
GV.OC-04외부 이해관계자가 의존하거나 기대하는 핵심 목표, 역량, 서비스가 이해되고 소통된다
GV.OC-05조직이 의존하는 성과, 역량, 서비스가 이해되고 소통된다
+

GV.RM — Risk Management Strategy (리스크 관리 전략)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
GV.RM-01리스크 관리 목표가 수립되고 조직 이해관계자의 합의를 받는다
GV.RM-02리스크 허용범위(appetite) 및 허용수준(tolerance) 선언이 수립·소통·유지된다
GV.RM-03사이버보안 리스크 관리 활동과 결과가 전사 리스크 관리 프로세스에 포함된다
GV.RM-04적절한 리스크 대응 옵션을 설명하는 전략 방향이 수립되고 소통된다
GV.RM-05공급자 및 제3자 리스크를 포함한 사이버보안 리스크에 대한 조직 내 소통 채널이 수립된다
GV.RM-06사이버보안 리스크를 산정·문서화·범주화·우선순위화하는 표준화된 방법이 수립되고 소통된다
GV.RM-07전략적 기회(즉, 긍정적 리스크)가 파악되고 조직의 사이버보안 리스크 논의에 포함된다
+

GV.RR — Roles, Responsibilities, and Authorities (역할·책임·권한)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
GV.RR-01조직 리더십이 사이버보안 리스크에 대해 책임을 지며, 리스크 인식적이고 윤리적이며 지속적으로 개선하는 문화를 조성한다
GV.RR-02사이버보안 리스크 관리와 관련된 역할, 책임, 권한이 수립·소통·이해·집행된다
GV.RR-03사이버보안 리스크 전략, 역할, 책임, 정책에 상응하는 적절한 자원이 배분된다
GV.RR-04사이버보안이 인사 관행에 포함된다
+

GV.PO — Policy (정책)

+ + + + + + + + + + + + + + + + + +
ID성과
GV.PO-01사이버보안 리스크를 관리하기 위한 정책이 조직 맥락, 사이버보안 전략, 우선순위에 기반하여 수립·소통·집행된다
GV.PO-02사이버보안 리스크 관리 정책이 요구사항, 위협, 기술, 조직 미션의 변화를 반영하여 검토·갱신·소통·집행된다
+

GV.OV — Oversight (감독)

+ + + + + + + + + + + + + + + + + + + + + +
ID성과
GV.OV-01사이버보안 리스크 관리 전략 결과가 전략과 방향의 정보 제공 및 조정을 위해 검토된다
GV.OV-02사이버보안 리스크 관리 전략이 조직 요구사항과 리스크를 커버하도록 검토·조정된다
GV.OV-03조직의 사이버보안 리스크 관리 성과가 평가되고 필요한 조정을 위해 검토된다
+

GV.SC — Cybersecurity Supply Chain Risk Management (공급망 리스크 관리)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
GV.SC-01사이버보안 공급망 리스크 관리 프로그램, 전략, 목표, 정책, 프로세스가 수립되고 조직 이해관계자의 합의를 받는다
GV.SC-02공급자, 고객, 파트너에 대한 사이버보안 역할과 책임이 수립·소통되며 내외부적으로 조율된다
GV.SC-03사이버보안 공급망 리스크 관리가 사이버보안 및 전사 리스크 관리, 리스크 평가, 개선 프로세스에 통합된다
GV.SC-04공급자가 파악되고 중요도에 따라 우선순위가 매겨진다
GV.SC-05공급망의 사이버보안 리스크를 해결하기 위한 요구사항이 수립·우선순위화되고, 공급자 및 관련 제3자와의 계약에 통합된다
GV.SC-06공식 공급자 또는 제3자 관계를 맺기 전에 리스크를 줄이기 위한 계획과 실사가 수행된다
GV.SC-07공급자, 그들의 제품/서비스 및 제3자가 초래하는 리스크가 관계 기간 동안 이해·기록·우선순위화·평가·대응·모니터링된다
GV.SC-08관련 공급자 및 제3자가 사고 계획, 대응, 복구 활동에 포함된다
GV.SC-09공급망 보안 관행이 사이버보안 및 전사 리스크 관리 프로그램에 통합되고, 기술 제품/서비스 생명주기 전반에 걸쳐 성과가 모니터링된다
GV.SC-10사이버보안 공급망 리스크 관리 계획이 파트너십이나 서비스 계약 종료 후의 활동에 대한 조항을 포함한다
+
+
+ID — Identify (식별) +
+

조직의 현재 사이버보안 리스크를 이해합니다.

+
+

ID.AM — Asset Management (자산 관리)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
ID.AM-01조직이 관리하는 하드웨어 인벤토리가 유지된다
ID.AM-02조직이 관리하는 소프트웨어, 서비스, 시스템 인벤토리가 유지된다
ID.AM-03조직의 인가된 네트워크 통신 및 내부/외부 네트워크 데이터 흐름의 표현이 유지된다
ID.AM-04공급자가 제공하는 서비스 인벤토리가 유지된다
ID.AM-05자산이 분류, 중요도, 자원, 미션 영향에 따라 우선순위가 매겨진다
ID.AM-07지정된 데이터 유형에 대한 데이터 인벤토리와 해당 메타데이터가 유지된다
ID.AM-08시스템, 하드웨어, 소프트웨어, 서비스, 데이터가 생명주기 전반에 걸쳐 관리된다
+

ID.RA — Risk Assessment (리스크 평가)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
ID.RA-01자산의 취약점이 식별·검증·기록된다
ID.RA-02사이버 위협 인텔리전스가 정보 공유 포럼과 소스로부터 수신된다
ID.RA-03조직에 대한 내부/외부 위협이 식별되고 기록된다
ID.RA-04위협이 취약점을 악용할 잠재적 영향과 가능성이 식별되고 기록된다
ID.RA-05위협, 취약점, 가능성, 영향이 내재 리스크를 이해하고 리스크 대응 우선순위를 결정하는 데 사용된다
ID.RA-06리스크 대응이 선택·우선순위화·계획·추적·소통된다
ID.RA-07변경과 예외가 관리되고, 리스크 영향이 평가·기록·추적된다
ID.RA-08취약점 공개를 수신·분석·대응하는 프로세스가 수립된다
ID.RA-09하드웨어 및 소프트웨어의 진정성과 무결성이 취득·사용 전에 평가된다
ID.RA-10핵심 공급자가 취득 전에 평가된다
+

ID.IM — Improvement (개선)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
ID.IM-01평가로부터 개선 사항이 식별된다
ID.IM-02공급자 및 관련 제3자와의 협력을 포함한 보안 테스트·훈련으로부터 개선 사항이 식별된다
ID.IM-03운영 프로세스, 절차, 활동의 실행으로부터 개선 사항이 식별된다
ID.IM-04운영에 영향을 미치는 사고 대응 계획 및 기타 사이버보안 계획이 수립·소통·유지·개선된다
+
+
+PR — Protect (보호) +
+

사이버보안 리스크를 관리하기 위한 보호조치를 적용합니다.

+
+

PR.AA — Identity Management, Authentication, and Access Control (식별·인증·접근제어)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
PR.AA-01인가된 사용자, 서비스, 하드웨어에 대한 식별 정보와 자격증명이 조직에 의해 관리된다
PR.AA-02식별 정보가 상호작용 맥락에 따라 확인(proofing)되고 자격증명에 바인딩된다
PR.AA-03사용자, 서비스, 하드웨어가 인증된다
PR.AA-04식별 정보 단언(identity assertion)이 보호·전달·검증된다
PR.AA-05접근 권한, 자격, 인가가 정책에 정의되고, 최소 권한 및 직무 분리 원칙을 통합하여 관리·집행·검토된다
PR.AA-06자산에 대한 물리적 접근이 리스크에 상응하게 관리·모니터링·집행된다
+

PR.AT — Awareness and Training (인식 및 교육)

+ + + + + + + + + + + + + + + + + +
ID성과
PR.AT-01직원에게 사이버보안 리스크를 고려하여 일반 업무를 수행할 수 있는 지식과 기술을 갖추도록 인식 및 교육이 제공된다
PR.AT-02전문 역할을 수행하는 개인에게 사이버보안 리스크를 고려하여 관련 업무를 수행할 수 있는 지식과 기술을 갖추도록 인식 및 교육이 제공된다
+

PR.DS — Data Security (데이터 보안)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
PR.DS-01저장 데이터(data-at-rest)의 기밀성, 무결성, 가용성이 보호된다
PR.DS-02전송 데이터(data-in-transit)의 기밀성, 무결성, 가용성이 보호된다
PR.DS-10사용 중 데이터(data-in-use)의 기밀성, 무결성, 가용성이 보호된다
PR.DS-11데이터 백업이 생성·보호·유지·테스트된다
+

PR.PS — Platform Security (플랫폼 보안)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
PR.PS-01구성 관리 관행이 수립되고 적용된다
PR.PS-02소프트웨어가 리스크에 상응하게 유지·교체·제거된다
PR.PS-03하드웨어가 리스크에 상응하게 유지·교체·제거된다
PR.PS-04로그 기록이 생성되고 지속적 모니터링에 활용 가능하게 된다
PR.PS-05비인가 소프트웨어의 설치 및 실행이 방지된다
PR.PS-06안전한 소프트웨어 개발 관행이 통합되고, 소프트웨어 개발 생명주기 전반에 걸쳐 성과가 모니터링된다
+

PR.IR — Technology Infrastructure Resilience (기술 인프라 복원력)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
PR.IR-01네트워크 및 환경이 비인가 논리적 접근과 사용으로부터 보호된다
PR.IR-02조직의 기술 자산이 환경적 위협으로부터 보호된다
PR.IR-03정상 및 비정상 상황에서 복원력 요구사항을 달성하기 위한 메커니즘이 구현된다
PR.IR-04가용성을 보장하기 위한 적절한 자원 용량이 유지된다
+
+
+DE — Detect (탐지) +
+

사이버보안 공격과 침해 가능성을 탐지하고 분석합니다.

+
+

DE.CM — Continuous Monitoring (지속적 모니터링)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
DE.CM-01잠재적 유해 이벤트를 발견하기 위해 네트워크 및 네트워크 서비스가 모니터링된다
DE.CM-02잠재적 유해 이벤트를 발견하기 위해 물리적 환경이 모니터링된다
DE.CM-03잠재적 유해 이벤트를 발견하기 위해 인원 활동 및 기술 사용이 모니터링된다
DE.CM-06잠재적 유해 이벤트를 발견하기 위해 외부 서비스 제공자의 활동 및 서비스가 모니터링된다
DE.CM-09잠재적 유해 이벤트를 발견하기 위해 컴퓨팅 하드웨어/소프트웨어, 런타임 환경, 데이터가 모니터링된다
+

DE.AE — Adverse Event Analysis (유해 이벤트 분석)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
DE.AE-02잠재적 유해 이벤트가 관련 활동을 더 잘 이해하기 위해 분석된다
DE.AE-03다수의 소스로부터 정보가 상관 분석된다
DE.AE-04유해 이벤트의 추정 영향과 범위가 파악된다
DE.AE-06유해 이벤트에 대한 정보가 인가된 담당자 및 도구에 제공된다
DE.AE-07사이버 위협 인텔리전스 및 기타 맥락 정보가 분석에 통합된다
DE.AE-08유해 이벤트가 정의된 사고 기준을 충족할 때 사고가 선언된다
+
+
+RS — Respond (대응) +
+

탐지된 사이버보안 사고에 대해 조치를 취합니다.

+
+

RS.MA — Incident Management (사고 관리)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
RS.MA-01사고가 선언되면 관련 제3자와 협력하여 사고 대응 계획이 실행된다
RS.MA-02사고 보고가 분류(triage)되고 검증된다
RS.MA-03사고가 범주화되고 우선순위가 매겨진다
RS.MA-04필요에 따라 사고가 에스컬레이션되거나 격상된다
RS.MA-05사고 복구를 개시하기 위한 기준이 적용된다
+

RS.AN — Incident Analysis (사고 분석)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
RS.AN-03사고 중 발생한 상황과 근본 원인을 규명하기 위한 분석이 수행된다
RS.AN-06조사 중 수행된 조치가 기록되고, 기록의 무결성과 출처가 보존된다
RS.AN-07사고 데이터와 메타데이터가 수집되고, 무결성과 출처가 보존된다
RS.AN-08사고의 규모가 추정되고 검증된다
+

RS.CO — Incident Response Reporting and Communication (대응 보고·소통)

+ + + + + + + + + + + + + + + + + +
ID성과
RS.CO-02내부 및 외부 이해관계자에게 사고가 통지된다
RS.CO-03지정된 내부 및 외부 이해관계자와 정보가 공유된다
+

RS.MI — Incident Mitigation (사고 완화)

+ + + + + + + + + + + + + + + + + +
ID성과
RS.MI-01사고가 억제(contain)된다
RS.MI-02사고가 제거(eradicate)된다
+
+
+RC — Recover (복구) +
+

사이버보안 사고로 영향받은 자산과 운영을 복구합니다.

+
+

RC.RP — Incident Recovery Plan Execution (복구 계획 실행)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
RC.RP-01사고 대응 프로세스에서 개시되면 사고 대응 계획의 복구 부분이 실행된다
RC.RP-02복구 조치가 선택·범위 설정·우선순위화·수행된다
RC.RP-03백업 및 기타 복원 자산의 무결성이 복원에 사용하기 전에 검증된다
RC.RP-04핵심 미션 기능과 사이버보안 리스크 관리가 사고 후 운영 정상화를 수립하는 데 고려된다
RC.RP-05복원된 자산의 무결성이 검증되고, 시스템과 서비스가 복원되며, 정상 운영 상태가 확인된다
RC.RP-06기준에 따라 사고 복구 종료가 선언되고, 사고 관련 문서화가 완료된다
+

RC.CO — Incident Recovery Communication (복구 소통)

+ + + + + + + + + + + + + + + + + +
ID성과
RC.CO-03복구 활동과 운영 역량 복원 진행 상황이 지정된 내부/외부 이해관계자에게 소통된다
RC.CO-04사고 복구에 대한 공개 업데이트가 승인된 방법과 메시징을 사용하여 공유된다
+
+
+

참고 자료

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
리소스URL
CSF 2.0 원문 (CSWP 29)https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.29.pdf
CSF 2.0 공식 사이트https://www.nist.gov/cyberframework
CSF 2.0 Quick Start Guidehttps://csrc.nist.gov/pubs/sp/1299/final
CSF 2.0 Reference Toolhttps://csrc.nist.gov/projects/cybersecurity-framework/filters#/csf/filters
CSF 2.0 ↔ SP 800-53 매핑https://csrc.nist.gov/projects/cprt
CSF 2.0 OSCAL (JSON)https://github.com/usnistgov/oscal-content/tree/main/nist.gov/CSF/v2.0
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/NIST/PF-1.0/README.md b/NIST/PF-1.0/README.md deleted file mode 100644 index ef17df9..0000000 --- a/NIST/PF-1.0/README.md +++ /dev/null @@ -1,321 +0,0 @@ -# NIST Privacy Framework (PF) 1.0 - -## 개요 - -| 항목 | 내용 | -|------|------| -| **정식 명칭** | NIST Privacy Framework: A Tool for Improving Privacy Through Enterprise Risk Management, Version 1.0 | -| **문서 번호** | CSWP 10 | -| **발행일** | 2020년 1월 16일 | -| **차기 버전** | PF 1.1 (Initial Public Draft 공개, 최종판 발행 예정) | -| **대상** | 모든 조직 (규모·업종 불문) | -| **원문** | https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.01162020.pdf | -| **공식 사이트** | https://www.nist.gov/privacy-framework | - -Privacy Framework는 조직이 제품과 서비스 개발 과정에서 **개인의 프라이버시를 보호하면서 혁신을 추구**할 수 있도록 돕는 프레임워크입니다. CSF(Cybersecurity Framework)와 구조가 유사하며, 함께 사용하도록 설계되었습니다. - ---- - -## CSF와의 관계 - -Privacy Framework는 CSF를 모델로 설계되었으며, 두 프레임워크는 보완적으로 사용됩니다. - -| 구분 | Privacy Framework | Cybersecurity Framework | -|------|------------------|------------------------| -| **초점** | 데이터 처리로 인한 **개인의 프라이버시 리스크** | 조직의 **사이버보안 리스크** | -| **고유 Function** | Communicate-P (CSF에 없음) | Detect, Respond, Recover (PF에 없음) | -| **공유 영역** | Protect-P의 상당 부분이 CSF Protect와 동일/유사 | Protect의 상당 부분이 PF Protect-P와 동일/유사 | -| **대상** | 개인의 데이터와 프라이버시 권리 | 조직의 자산과 운영 | - -> Protect-P Function 내 일부 Category/Subcategory(PR.AC-P, PR.DS-P, PR.MA-P, PR.PT-P, PR.PO-P)는 CSF의 Protect Function과 동일하거나 유사합니다. 이는 프라이버시와 사이버보안의 교집합 영역입니다. - ---- - -## 핵심 구성 요소 - -CSF와 동일하게 세 가지 핵심 요소로 구성됩니다: - -### 1. Privacy Framework Core - -5개 **Function** → 18개 **Category** → 100개 **Subcategory**로 이루어진 프라이버시 성과(outcome) 체계입니다. - -### 2. Profile - -조직의 현재 또는 목표 프라이버시 상태를 Core에 매핑한 것입니다. - -- **Current Profile**: 현재 달성하고 있는 프라이버시 성과 -- **Target Profile**: 달성하고자 하는 목표 프라이버시 성과 - -두 Profile을 비교하는 **Gap Analysis**를 통해 개선 우선순위를 도출합니다. - -### 3. Implementation Tiers (Tier 1~4) - -CSF와 동일한 4단계 Tier를 사용합니다 (Partial → Risk Informed → Repeatable → Adaptive). **성숙도 모델이 아닙니다.** - ---- - -## Privacy Framework Core 전체 구조 - -### 한눈에 보기 - -| Function | 코드 | 설명 | Categories | Subcategories | -|----------|------|------|-----------|---------------| -| **Identify-P** | ID-P | 데이터 처리로 인한 프라이버시 리스크를 관리하기 위한 조직적 이해를 개발 | 4개 | 21개 | -| **Govern-P** | GV-P | 프라이버시 리스크 관리 우선순위를 반영한 거버넌스 구조를 수립·실행 | 4개 | 20개 | -| **Control-P** | CT-P | 프라이버시 리스크 관리를 위해 데이터를 충분한 세분성으로 관리할 수 있는 활동을 개발·실행 | 3개 | 19개 | -| **Communicate-P** | CM-P | 데이터 처리 방식과 관련 프라이버시 리스크에 대해 조직과 개인이 신뢰할 수 있는 이해와 대화를 가능하게 하는 활동을 개발·실행 | 2개 | 10개 | -| **Protect-P** | PR-P | 적절한 데이터 처리 보호조치를 개발·실행 | 5개 | 30개 | -| | | **합계** | **18개** | **100개** | - -> 아래 각 Function을 클릭하면 Category 및 Subcategory 전체 목록을 확인할 수 있습니다. - ---- - -
-ID-P — Identify-P (식별) - -> 데이터 처리로 인한 프라이버시 리스크를 관리하기 위한 조직적 이해를 개발합니다. - -#### ID.IM-P — Inventory and Mapping (인벤토리 및 매핑) - -데이터 처리가 시스템/제품/서비스에 의해 이루어지는 방식을 이해하고, 이를 프라이버시 리스크 관리에 반영합니다. - -| ID | 성과 | -|----|------| -| ID.IM-P1 | 데이터를 처리하는 시스템/제품/서비스가 인벤토리화된다 | -| ID.IM-P2 | 데이터를 처리하는 시스템/제품/서비스 및 구성요소의 소유자 또는 운영자와 그 역할이 인벤토리화된다 | -| ID.IM-P3 | 데이터가 처리되는 개인의 범주(예: 고객, 직원, 소비자)가 인벤토리화된다 | -| ID.IM-P4 | 시스템/제품/서비스의 데이터 작업(data action)이 인벤토리화된다 | -| ID.IM-P5 | 데이터 작업의 목적이 인벤토리화된다 | -| ID.IM-P6 | 데이터 작업 내 데이터 요소가 인벤토리화된다 | -| ID.IM-P7 | 데이터 처리 환경이 식별된다 (예: 지리적 위치, 내부, 클라우드, 제3자) | -| ID.IM-P8 | 데이터 처리가 매핑된다 — 시스템/제품/서비스의 데이터 작업과 관련 데이터 요소, 구성요소 소유자/운영자의 역할, 개인 또는 제3자와의 상호작용을 포함 | - -#### ID.BE-P — Business Environment (비즈니스 환경) - -| ID | 성과 | -|----|------| -| ID.BE-P1 | 데이터 처리 생태계에서 조직의 역할이 식별되고 소통된다 | -| ID.BE-P2 | 조직의 미션, 목표, 활동에 대한 우선순위가 수립되고 소통된다 | -| ID.BE-P3 | 조직 우선순위를 지원하는 시스템/제품/서비스가 식별되고 핵심 요구사항이 소통된다 | - -#### ID.RA-P — Risk Assessment (리스크 평가) - -개인에 대한 프라이버시 리스크와, 그로 인한 조직 운영(미션, 기능, 컴플라이언스, 평판 등)에 대한 후속 영향을 이해합니다. - -| ID | 성과 | -|----|------| -| ID.RA-P1 | 시스템/제품/서비스와 데이터 작업에 관련된 맥락적 요인이 식별된다 (예: 개인의 인구통계·프라이버시 인식, 데이터 민감도) | -| ID.RA-P2 | 데이터 분석의 입출력이 식별되고 편향이 평가된다 | -| ID.RA-P3 | 잠재적으로 문제가 되는 데이터 작업과 관련 문제가 식별된다 | -| ID.RA-P4 | 문제 있는 데이터 작업, 발생 가능성, 영향이 리스크 판단과 우선순위 결정에 사용된다 | -| ID.RA-P5 | 리스크 대응이 식별·우선순위화·실행된다 | - -#### ID.DE-P — Data Processing Ecosystem Risk Management (데이터 처리 생태계 리스크 관리) - -| ID | 성과 | -|----|------| -| ID.DE-P1 | 데이터 생태계 리스크 관리 정책, 프로세스, 절차가 식별·수립·평가·관리되고 조직 이해관계자의 합의를 받는다 | -| ID.DE-P2 | 데이터 처리 생태계 참여자(서비스 제공자, 고객, 파트너 등)가 프라이버시 리스크 평가 프로세스를 통해 식별·우선순위화·평가된다 | -| ID.DE-P3 | 데이터 처리 생태계 참여자와의 계약이 조직의 프라이버시 프로그램 목표를 충족하도록 적절한 조치를 구현하는 데 사용된다 | -| ID.DE-P4 | 상호운용성 프레임워크 또는 유사한 다자간 접근 방식이 데이터 처리 생태계 프라이버시 리스크를 관리하는 데 사용된다 | -| ID.DE-P5 | 데이터 처리 생태계 참여자가 감사, 테스트 결과 또는 기타 평가를 통해 계약적·상호운용성 프레임워크 또는 기타 의무를 이행하고 있는지 정기적으로 평가된다 | - -
- -
-GV-P — Govern-P (거버넌스) - -> 프라이버시 리스크 관리 우선순위를 반영한 조직의 거버넌스 구조를 수립하고 실행합니다. - -#### GV.PO-P — Governance Policies, Processes, and Procedures (거버넌스 정책·프로세스·절차) - -| ID | 성과 | -|----|------| -| GV.PO-P1 | 조직의 프라이버시 가치와 정책(예: 데이터 사용·보존 조건, 데이터 처리에 대한 개인의 선택권)이 수립되고 소통된다 | -| GV.PO-P2 | 시스템/제품/서비스 개발 및 운영에 조직의 프라이버시 가치를 반영하기 위한 프로세스가 수립되어 운영 중이다 | -| GV.PO-P3 | 프라이버시와 관련한 직원의 역할과 책임이 수립된다 | -| GV.PO-P4 | 프라이버시 역할과 책임이 제3자 이해관계자(서비스 제공자, 고객, 파트너)와 조율·정렬된다 | -| GV.PO-P5 | 프라이버시 관련 법적·규제·계약 요구사항이 이해되고 관리된다 | -| GV.PO-P6 | 거버넌스 및 리스크 관리 정책, 프로세스, 절차가 프라이버시 리스크를 다룬다 | - -#### GV.RM-P — Risk Management Strategy (리스크 관리 전략) - -| ID | 성과 | -|----|------| -| GV.RM-P1 | 리스크 관리 프로세스가 수립·관리되고 조직 이해관계자의 합의를 받는다 | -| GV.RM-P2 | 조직의 리스크 허용수준이 결정되고 명확히 표현된다 | -| GV.RM-P3 | 조직의 리스크 허용수준 결정이 데이터 처리 생태계에서의 역할에 의해 정보를 제공받는다 | - -#### GV.AT-P — Awareness and Training (인식 및 교육) - -| ID | 성과 | -|----|------| -| GV.AT-P1 | 직원이 자신의 역할과 책임에 대해 교육을 받는다 | -| GV.AT-P2 | 고위 경영진이 자신의 역할과 책임을 이해한다 | -| GV.AT-P3 | 프라이버시 담당 인력이 자신의 역할과 책임을 이해한다 | -| GV.AT-P4 | 제3자(서비스 제공자, 고객, 파트너)가 자신의 역할과 책임을 이해한다 | - -#### GV.MT-P — Monitoring and Review (모니터링 및 검토) - -| ID | 성과 | -|----|------| -| GV.MT-P1 | 프라이버시 리스크가 핵심 요인(비즈니스 환경, 거버넌스, 데이터 처리, 시스템/제품/서비스 변화 등)의 변경에 따라 지속적으로 재평가된다 | -| GV.MT-P2 | 프라이버시 가치, 정책, 교육이 검토되고 업데이트가 소통된다 | -| GV.MT-P3 | 법적 요구사항 및 프라이버시 정책 준수를 평가하기 위한 정책, 프로세스, 절차가 수립되어 운영 중이다 | -| GV.MT-P4 | 프라이버시 리스크 관리 진행 상황을 소통하기 위한 정책, 프로세스, 절차가 수립되어 운영 중이다 | -| GV.MT-P5 | 내부 및 외부 소스로부터 공개된 문제 있는 데이터 작업을 수신·분석·대응하기 위한 정책, 프로세스, 절차가 수립되어 운영 중이다 | -| GV.MT-P6 | 정책, 프로세스, 절차에 문제 있는 데이터 작업으로부터의 교훈이 반영된다 | -| GV.MT-P7 | 조직의 프라이버시 관행에 대한 개인의 불만, 우려, 질문을 수신·추적·대응하기 위한 정책, 프로세스, 절차가 수립되어 운영 중이다 | - -
- -
-CT-P — Control-P (통제) - -> 프라이버시 리스크를 관리할 수 있도록 데이터를 충분한 세분성으로 관리하는 활동을 개발·실행합니다. - -#### CT.PO-P — Data Processing Policies, Processes, and Procedures (데이터 처리 정책·프로세스·절차) - -| ID | 성과 | -|----|------| -| CT.PO-P1 | 데이터 처리를 인가(조직 결정, 개인 동의)하고, 인가를 철회하며, 인가를 유지하기 위한 정책, 프로세스, 절차가 수립되어 운영 중이다 | -| CT.PO-P2 | 데이터 검토, 전송, 공유/공개, 변경, 삭제를 가능하게 하는 정책, 프로세스, 절차가 수립되어 운영 중이다 | -| CT.PO-P3 | 개인의 데이터 처리 선호 및 요청을 가능하게 하는 정책, 프로세스, 절차가 수립되어 운영 중이다 | -| CT.PO-P4 | 데이터 관리를 위한 데이터 생명주기가 시스템 개발 생명주기와 정렬되어 구현된다 | - -#### CT.DM-P — Data Processing Management (데이터 처리 관리) - -개인의 프라이버시를 보호하고, 관리성을 높이며, 프라이버시 원칙(개인 참여, 데이터 품질, 데이터 최소화 등)을 구현합니다. - -| ID | 성과 | -|----|------| -| CT.DM-P1 | 데이터 요소가 검토를 위해 접근 가능하다 | -| CT.DM-P2 | 데이터 요소가 전송 또는 공개를 위해 접근 가능하다 | -| CT.DM-P3 | 데이터 요소가 변경을 위해 접근 가능하다 | -| CT.DM-P4 | 데이터 요소가 삭제를 위해 접근 가능하다 | -| CT.DM-P5 | 데이터가 정책에 따라 파기된다 | -| CT.DM-P6 | 데이터가 표준화된 형식으로 전송된다 | -| CT.DM-P7 | 데이터 요소와 함께 처리 권한 및 관련 데이터 값을 전송하기 위한 메커니즘이 수립되어 운영 중이다 | -| CT.DM-P8 | 감사/로그 기록이 데이터 최소화 원칙을 반영하여 결정·문서화·구현·검토된다 | -| CT.DM-P9 | 데이터 처리를 관리하기 위해 구현된 기술적 조치가 테스트·평가된다 | -| CT.DM-P10 | 이해관계자의 프라이버시 선호가 알고리즘 설계 목표에 포함되고, 출력이 이러한 선호에 대해 평가된다 | - -#### CT.DP-P — Disassociated Processing (비연결 처리) - -데이터 처리에서 관찰가능성(observability)과 연결가능성(linkability)을 줄여 개인의 프라이버시를 보호합니다. - -| ID | 성과 | -|----|------| -| CT.DP-P1 | 관찰가능성과 연결가능성을 제한하도록 데이터가 처리된다 (예: 로컬 디바이스 처리, 프라이버시 보존 암호화) | -| CT.DP-P2 | 개인 식별을 제한하도록 데이터가 처리된다 (예: 비식별화 기법, 토큰화) | -| CT.DP-P3 | 개인의 행동이나 활동에 대한 추론 형성을 제한하도록 데이터가 처리된다 (예: 분산 처리, 분산 아키텍처) | -| CT.DP-P4 | 시스템 또는 디바이스 구성이 데이터 요소의 선택적 수집 또는 공개를 허용한다 | -| CT.DP-P5 | 속성 값 대신 속성 참조가 사용된다 | - -
- -
-CM-P — Communicate-P (소통) - -> 데이터 처리 방식과 관련 프라이버시 리스크에 대해 조직과 개인이 신뢰할 수 있는 이해와 대화를 가능하게 합니다. - -#### CM.PO-P — Communication Policies, Processes, and Procedures (소통 정책·프로세스·절차) - -| ID | 성과 | -|----|------| -| CM.PO-P1 | 데이터 처리 목적, 관행, 관련 프라이버시 리스크를 소통하기 위한 투명성 정책, 프로세스, 절차가 수립되어 운영 중이다 | -| CM.PO-P2 | 데이터 처리 목적, 관행, 관련 프라이버시 리스크를 소통하기 위한 역할과 책임(예: 홍보)이 수립된다 | - -#### CM.AW-P — Data Processing Awareness (데이터 처리 인지) - -개인과 조직이 데이터 처리 관행과 관련 프라이버시 리스크에 대해 신뢰할 수 있는 지식을 갖도록 합니다. - -| ID | 성과 | -|----|------| -| CM.AW-P1 | 데이터 처리 목적, 관행, 관련 프라이버시 리스크, 개인의 데이터 처리 선호 및 요청을 활성화하는 옵션을 소통하기 위한 메커니즘(예: 고지, 내부/공개 보고서)이 수립되어 운영 중이다 | -| CM.AW-P2 | 데이터 처리 및 관련 프라이버시 리스크에 대해 개인의 피드백을 수집하기 위한 메커니즘(예: 설문, 포커스 그룹)이 수립되어 운영 중이다 | -| CM.AW-P3 | 시스템/제품/서비스 설계가 데이터 처리 가시성을 가능하게 한다 | -| CM.AW-P4 | 데이터 공개 및 공유 기록이 유지되고 검토 또는 전송/공개를 위해 접근 가능하다 | -| CM.AW-P5 | 데이터 수정 또는 삭제가 데이터 처리 생태계 내 개인이나 조직(예: 데이터 소스)에 소통될 수 있다 | -| CM.AW-P6 | 데이터 출처(provenance)와 계보(lineage)가 유지되고 검토 또는 전송/공개를 위해 접근 가능하다 | -| CM.AW-P7 | 프라이버시 침해 또는 이벤트에 대해 영향받는 개인과 조직에 통지된다 | -| CM.AW-P8 | 문제 있는 데이터 작업의 영향을 다루기 위한 완화 메커니즘(예: 신용 모니터링, 동의 철회, 데이터 변경/삭제)이 개인에게 제공된다 | - -
- -
-PR-P — Protect-P (보호) - -> 적절한 데이터 처리 보호조치를 개발·실행합니다. - -> 이 Function의 상당 부분은 CSF의 Protect Function과 동일하거나 유사합니다. 이는 프라이버시와 사이버보안이 교차하는 영역입니다. - -#### PR.PO-P — Data Protection Policies, Processes, and Procedures (데이터 보호 정책·프로세스·절차) - -| ID | 성과 | -|----|------| -| PR.PO-P1 | 보안 원칙(예: 최소 기능 원칙)을 반영한 정보기술 기준 구성이 생성·유지된다 | -| PR.PO-P2 | 구성 변경 통제 프로세스가 수립되어 운영 중이다 | -| PR.PO-P3 | 정보의 백업이 수행·유지·테스트된다 | -| PR.PO-P4 | 조직 자산의 물리적 운영 환경에 관한 정책과 규제가 충족된다 | -| PR.PO-P5 | 보호 프로세스가 개선된다 | -| PR.PO-P6 | 보호 기술의 효과가 공유된다 | -| PR.PO-P7 | 대응 계획(사고 대응, 사업 연속성)과 복구 계획(사고 복구, 재해 복구)이 수립·운영·관리된다 | -| PR.PO-P8 | 대응 및 복구 계획이 테스트된다 | -| PR.PO-P9 | 프라이버시 절차가 인사 관행에 포함된다 (예: 계정 해제, 인력 심사) | -| PR.PO-P10 | 취약점 관리 계획이 개발되고 구현된다 | - -#### PR.AC-P — Identity Management, Authentication, and Access Control (식별·인증·접근제어) - -| ID | 성과 | -|----|------| -| PR.AC-P1 | 인가된 개인, 프로세스, 디바이스에 대한 식별 정보와 자격증명이 발급·관리·검증·철회·감사된다 | -| PR.AC-P2 | 데이터와 디바이스에 대한 물리적 접근이 관리된다 | -| PR.AC-P3 | 원격 접근이 관리된다 | -| PR.AC-P4 | 접근 권한과 인가가 최소 권한 및 직무 분리 원칙을 반영하여 관리된다 | -| PR.AC-P5 | 네트워크 무결성이 보호된다 (예: 네트워크 분리, 네트워크 세그멘테이션) | -| PR.AC-P6 | 개인과 디바이스가 확인(proofing)·자격증명에 바인딩되고, 트랜잭션의 리스크에 상응하게 인증된다 | - -#### PR.DS-P — Data Security (데이터 보안) - -| ID | 성과 | -|----|------| -| PR.DS-P1 | 저장 데이터(data-at-rest)가 보호된다 | -| PR.DS-P2 | 전송 데이터(data-in-transit)가 보호된다 | -| PR.DS-P3 | 시스템/제품/서비스와 관련 데이터가 제거, 전송, 폐기 과정에서 공식적으로 관리된다 | -| PR.DS-P4 | 가용성을 보장하기 위한 적절한 용량이 유지된다 | -| PR.DS-P5 | 데이터 유출에 대한 보호조치가 구현된다 | -| PR.DS-P6 | 소프트웨어, 펌웨어, 정보의 무결성을 검증하기 위한 무결성 확인 메커니즘이 사용된다 | -| PR.DS-P7 | 개발 및 테스트 환경이 프로덕션 환경과 분리된다 | -| PR.DS-P8 | 하드웨어 무결성을 검증하기 위한 무결성 확인 메커니즘이 사용된다 | - -#### PR.MA-P — Maintenance (유지보수) - -| ID | 성과 | -|----|------| -| PR.MA-P1 | 조직 자산의 유지보수와 수리가 승인되고 통제된 도구로 수행·기록된다 | -| PR.MA-P2 | 조직 자산의 원격 유지보수가 승인·기록되며, 비인가 접근을 방지하는 방식으로 수행된다 | - -#### PR.PT-P — Protective Technology (보호 기술) - -| ID | 성과 | -|----|------| -| PR.PT-P1 | 이동식 미디어가 보호되고 정책에 따라 사용이 제한된다 | -| PR.PT-P2 | 최소 기능 원칙이 시스템을 필수 기능만 제공하도록 구성함으로써 반영된다 | -| PR.PT-P3 | 통신 및 제어 네트워크가 보호된다 | -| PR.PT-P4 | 정상 및 비정상 상황에서 복원력 요구사항을 달성하기 위한 메커니즘(예: 페일세이프, 부하 분산, 핫스왑)이 구현된다 | - -
- ---- - -## 참고 자료 - -| 리소스 | URL | -|--------|-----| -| PF 1.0 원문 (CSWP 10) | https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.01162020.pdf | -| PF 1.0 공식 사이트 | https://www.nist.gov/privacy-framework | -| PF 1.0 Core (Excel) | https://www.nist.gov/document/nist-privacy-framework-v10-core | -| PF 1.1 IPD | https://csrc.nist.gov/pubs/cswp/40/nist-privacy-framework-11/ipd | -| PF ↔ CSF 매핑 | https://csrc.nist.gov/files/pubs/sp/800/53/r5/upd1/final/docs/csf-pf-to-sp800-53r5-mappings.xlsx | diff --git a/NIST/PF-1.0/index.html b/NIST/PF-1.0/index.html new file mode 100644 index 0000000..5c8adf6 --- /dev/null +++ b/NIST/PF-1.0/index.html @@ -0,0 +1,3271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PF 1.0 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + +

NIST Privacy Framework (PF) 1.0

+

개요

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
정식 명칭NIST Privacy Framework: A Tool for Improving Privacy Through Enterprise Risk Management, Version 1.0
문서 번호CSWP 10
발행일2020년 1월 16일
차기 버전PF 1.1 (Initial Public Draft 공개, 최종판 발행 예정)
대상모든 조직 (규모·업종 불문)
원문https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.01162020.pdf
공식 사이트https://www.nist.gov/privacy-framework
+

Privacy Framework는 조직이 제품과 서비스 개발 과정에서 개인의 프라이버시를 보호하면서 혁신을 추구할 수 있도록 돕는 프레임워크입니다. CSF(Cybersecurity Framework)와 구조가 유사하며, 함께 사용하도록 설계되었습니다.

+
+

CSF와의 관계

+

Privacy Framework는 CSF를 모델로 설계되었으며, 두 프레임워크는 보완적으로 사용됩니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분Privacy FrameworkCybersecurity Framework
초점데이터 처리로 인한 개인의 프라이버시 리스크조직의 사이버보안 리스크
고유 FunctionCommunicate-P (CSF에 없음)Detect, Respond, Recover (PF에 없음)
공유 영역Protect-P의 상당 부분이 CSF Protect와 동일/유사Protect의 상당 부분이 PF Protect-P와 동일/유사
대상개인의 데이터와 프라이버시 권리조직의 자산과 운영
+
+

Protect-P Function 내 일부 Category/Subcategory(PR.AC-P, PR.DS-P, PR.MA-P, PR.PT-P, PR.PO-P)는 CSF의 Protect Function과 동일하거나 유사합니다. 이는 프라이버시와 사이버보안의 교집합 영역입니다.

+
+
+

핵심 구성 요소

+

CSF와 동일하게 세 가지 핵심 요소로 구성됩니다:

+

1. Privacy Framework Core

+

5개 Function → 18개 Category → 100개 Subcategory로 이루어진 프라이버시 성과(outcome) 체계입니다.

+

2. Profile

+

조직의 현재 또는 목표 프라이버시 상태를 Core에 매핑한 것입니다.

+
    +
  • Current Profile: 현재 달성하고 있는 프라이버시 성과
  • +
  • Target Profile: 달성하고자 하는 목표 프라이버시 성과
  • +
+

두 Profile을 비교하는 Gap Analysis를 통해 개선 우선순위를 도출합니다.

+

3. Implementation Tiers (Tier 1~4)

+

CSF와 동일한 4단계 Tier를 사용합니다 (Partial → Risk Informed → Repeatable → Adaptive). 성숙도 모델이 아닙니다.

+
+

Privacy Framework Core 전체 구조

+

한눈에 보기

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Function코드설명CategoriesSubcategories
Identify-PID-P데이터 처리로 인한 프라이버시 리스크를 관리하기 위한 조직적 이해를 개발4개21개
Govern-PGV-P프라이버시 리스크 관리 우선순위를 반영한 거버넌스 구조를 수립·실행4개20개
Control-PCT-P프라이버시 리스크 관리를 위해 데이터를 충분한 세분성으로 관리할 수 있는 활동을 개발·실행3개19개
Communicate-PCM-P데이터 처리 방식과 관련 프라이버시 리스크에 대해 조직과 개인이 신뢰할 수 있는 이해와 대화를 가능하게 하는 활동을 개발·실행2개10개
Protect-PPR-P적절한 데이터 처리 보호조치를 개발·실행5개30개
합계18개100개
+
+

아래 각 Function을 클릭하면 Category 및 Subcategory 전체 목록을 확인할 수 있습니다.

+
+
+
+ID-P — Identify-P (식별) +
+

데이터 처리로 인한 프라이버시 리스크를 관리하기 위한 조직적 이해를 개발합니다.

+
+

ID.IM-P — Inventory and Mapping (인벤토리 및 매핑)

+

데이터 처리가 시스템/제품/서비스에 의해 이루어지는 방식을 이해하고, 이를 프라이버시 리스크 관리에 반영합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
ID.IM-P1데이터를 처리하는 시스템/제품/서비스가 인벤토리화된다
ID.IM-P2데이터를 처리하는 시스템/제품/서비스 및 구성요소의 소유자 또는 운영자와 그 역할이 인벤토리화된다
ID.IM-P3데이터가 처리되는 개인의 범주(예: 고객, 직원, 소비자)가 인벤토리화된다
ID.IM-P4시스템/제품/서비스의 데이터 작업(data action)이 인벤토리화된다
ID.IM-P5데이터 작업의 목적이 인벤토리화된다
ID.IM-P6데이터 작업 내 데이터 요소가 인벤토리화된다
ID.IM-P7데이터 처리 환경이 식별된다 (예: 지리적 위치, 내부, 클라우드, 제3자)
ID.IM-P8데이터 처리가 매핑된다 — 시스템/제품/서비스의 데이터 작업과 관련 데이터 요소, 구성요소 소유자/운영자의 역할, 개인 또는 제3자와의 상호작용을 포함
+

ID.BE-P — Business Environment (비즈니스 환경)

+ + + + + + + + + + + + + + + + + + + + + +
ID성과
ID.BE-P1데이터 처리 생태계에서 조직의 역할이 식별되고 소통된다
ID.BE-P2조직의 미션, 목표, 활동에 대한 우선순위가 수립되고 소통된다
ID.BE-P3조직 우선순위를 지원하는 시스템/제품/서비스가 식별되고 핵심 요구사항이 소통된다
+

ID.RA-P — Risk Assessment (리스크 평가)

+

개인에 대한 프라이버시 리스크와, 그로 인한 조직 운영(미션, 기능, 컴플라이언스, 평판 등)에 대한 후속 영향을 이해합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
ID.RA-P1시스템/제품/서비스와 데이터 작업에 관련된 맥락적 요인이 식별된다 (예: 개인의 인구통계·프라이버시 인식, 데이터 민감도)
ID.RA-P2데이터 분석의 입출력이 식별되고 편향이 평가된다
ID.RA-P3잠재적으로 문제가 되는 데이터 작업과 관련 문제가 식별된다
ID.RA-P4문제 있는 데이터 작업, 발생 가능성, 영향이 리스크 판단과 우선순위 결정에 사용된다
ID.RA-P5리스크 대응이 식별·우선순위화·실행된다
+

ID.DE-P — Data Processing Ecosystem Risk Management (데이터 처리 생태계 리스크 관리)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
ID.DE-P1데이터 생태계 리스크 관리 정책, 프로세스, 절차가 식별·수립·평가·관리되고 조직 이해관계자의 합의를 받는다
ID.DE-P2데이터 처리 생태계 참여자(서비스 제공자, 고객, 파트너 등)가 프라이버시 리스크 평가 프로세스를 통해 식별·우선순위화·평가된다
ID.DE-P3데이터 처리 생태계 참여자와의 계약이 조직의 프라이버시 프로그램 목표를 충족하도록 적절한 조치를 구현하는 데 사용된다
ID.DE-P4상호운용성 프레임워크 또는 유사한 다자간 접근 방식이 데이터 처리 생태계 프라이버시 리스크를 관리하는 데 사용된다
ID.DE-P5데이터 처리 생태계 참여자가 감사, 테스트 결과 또는 기타 평가를 통해 계약적·상호운용성 프레임워크 또는 기타 의무를 이행하고 있는지 정기적으로 평가된다
+
+
+GV-P — Govern-P (거버넌스) +
+

프라이버시 리스크 관리 우선순위를 반영한 조직의 거버넌스 구조를 수립하고 실행합니다.

+
+

GV.PO-P — Governance Policies, Processes, and Procedures (거버넌스 정책·프로세스·절차)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
GV.PO-P1조직의 프라이버시 가치와 정책(예: 데이터 사용·보존 조건, 데이터 처리에 대한 개인의 선택권)이 수립되고 소통된다
GV.PO-P2시스템/제품/서비스 개발 및 운영에 조직의 프라이버시 가치를 반영하기 위한 프로세스가 수립되어 운영 중이다
GV.PO-P3프라이버시와 관련한 직원의 역할과 책임이 수립된다
GV.PO-P4프라이버시 역할과 책임이 제3자 이해관계자(서비스 제공자, 고객, 파트너)와 조율·정렬된다
GV.PO-P5프라이버시 관련 법적·규제·계약 요구사항이 이해되고 관리된다
GV.PO-P6거버넌스 및 리스크 관리 정책, 프로세스, 절차가 프라이버시 리스크를 다룬다
+

GV.RM-P — Risk Management Strategy (리스크 관리 전략)

+ + + + + + + + + + + + + + + + + + + + + +
ID성과
GV.RM-P1리스크 관리 프로세스가 수립·관리되고 조직 이해관계자의 합의를 받는다
GV.RM-P2조직의 리스크 허용수준이 결정되고 명확히 표현된다
GV.RM-P3조직의 리스크 허용수준 결정이 데이터 처리 생태계에서의 역할에 의해 정보를 제공받는다
+

GV.AT-P — Awareness and Training (인식 및 교육)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
GV.AT-P1직원이 자신의 역할과 책임에 대해 교육을 받는다
GV.AT-P2고위 경영진이 자신의 역할과 책임을 이해한다
GV.AT-P3프라이버시 담당 인력이 자신의 역할과 책임을 이해한다
GV.AT-P4제3자(서비스 제공자, 고객, 파트너)가 자신의 역할과 책임을 이해한다
+

GV.MT-P — Monitoring and Review (모니터링 및 검토)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
GV.MT-P1프라이버시 리스크가 핵심 요인(비즈니스 환경, 거버넌스, 데이터 처리, 시스템/제품/서비스 변화 등)의 변경에 따라 지속적으로 재평가된다
GV.MT-P2프라이버시 가치, 정책, 교육이 검토되고 업데이트가 소통된다
GV.MT-P3법적 요구사항 및 프라이버시 정책 준수를 평가하기 위한 정책, 프로세스, 절차가 수립되어 운영 중이다
GV.MT-P4프라이버시 리스크 관리 진행 상황을 소통하기 위한 정책, 프로세스, 절차가 수립되어 운영 중이다
GV.MT-P5내부 및 외부 소스로부터 공개된 문제 있는 데이터 작업을 수신·분석·대응하기 위한 정책, 프로세스, 절차가 수립되어 운영 중이다
GV.MT-P6정책, 프로세스, 절차에 문제 있는 데이터 작업으로부터의 교훈이 반영된다
GV.MT-P7조직의 프라이버시 관행에 대한 개인의 불만, 우려, 질문을 수신·추적·대응하기 위한 정책, 프로세스, 절차가 수립되어 운영 중이다
+
+
+CT-P — Control-P (통제) +
+

프라이버시 리스크를 관리할 수 있도록 데이터를 충분한 세분성으로 관리하는 활동을 개발·실행합니다.

+
+

CT.PO-P — Data Processing Policies, Processes, and Procedures (데이터 처리 정책·프로세스·절차)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
CT.PO-P1데이터 처리를 인가(조직 결정, 개인 동의)하고, 인가를 철회하며, 인가를 유지하기 위한 정책, 프로세스, 절차가 수립되어 운영 중이다
CT.PO-P2데이터 검토, 전송, 공유/공개, 변경, 삭제를 가능하게 하는 정책, 프로세스, 절차가 수립되어 운영 중이다
CT.PO-P3개인의 데이터 처리 선호 및 요청을 가능하게 하는 정책, 프로세스, 절차가 수립되어 운영 중이다
CT.PO-P4데이터 관리를 위한 데이터 생명주기가 시스템 개발 생명주기와 정렬되어 구현된다
+

CT.DM-P — Data Processing Management (데이터 처리 관리)

+

개인의 프라이버시를 보호하고, 관리성을 높이며, 프라이버시 원칙(개인 참여, 데이터 품질, 데이터 최소화 등)을 구현합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
CT.DM-P1데이터 요소가 검토를 위해 접근 가능하다
CT.DM-P2데이터 요소가 전송 또는 공개를 위해 접근 가능하다
CT.DM-P3데이터 요소가 변경을 위해 접근 가능하다
CT.DM-P4데이터 요소가 삭제를 위해 접근 가능하다
CT.DM-P5데이터가 정책에 따라 파기된다
CT.DM-P6데이터가 표준화된 형식으로 전송된다
CT.DM-P7데이터 요소와 함께 처리 권한 및 관련 데이터 값을 전송하기 위한 메커니즘이 수립되어 운영 중이다
CT.DM-P8감사/로그 기록이 데이터 최소화 원칙을 반영하여 결정·문서화·구현·검토된다
CT.DM-P9데이터 처리를 관리하기 위해 구현된 기술적 조치가 테스트·평가된다
CT.DM-P10이해관계자의 프라이버시 선호가 알고리즘 설계 목표에 포함되고, 출력이 이러한 선호에 대해 평가된다
+

CT.DP-P — Disassociated Processing (비연결 처리)

+

데이터 처리에서 관찰가능성(observability)과 연결가능성(linkability)을 줄여 개인의 프라이버시를 보호합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
CT.DP-P1관찰가능성과 연결가능성을 제한하도록 데이터가 처리된다 (예: 로컬 디바이스 처리, 프라이버시 보존 암호화)
CT.DP-P2개인 식별을 제한하도록 데이터가 처리된다 (예: 비식별화 기법, 토큰화)
CT.DP-P3개인의 행동이나 활동에 대한 추론 형성을 제한하도록 데이터가 처리된다 (예: 분산 처리, 분산 아키텍처)
CT.DP-P4시스템 또는 디바이스 구성이 데이터 요소의 선택적 수집 또는 공개를 허용한다
CT.DP-P5속성 값 대신 속성 참조가 사용된다
+
+
+CM-P — Communicate-P (소통) +
+

데이터 처리 방식과 관련 프라이버시 리스크에 대해 조직과 개인이 신뢰할 수 있는 이해와 대화를 가능하게 합니다.

+
+

CM.PO-P — Communication Policies, Processes, and Procedures (소통 정책·프로세스·절차)

+ + + + + + + + + + + + + + + + + +
ID성과
CM.PO-P1데이터 처리 목적, 관행, 관련 프라이버시 리스크를 소통하기 위한 투명성 정책, 프로세스, 절차가 수립되어 운영 중이다
CM.PO-P2데이터 처리 목적, 관행, 관련 프라이버시 리스크를 소통하기 위한 역할과 책임(예: 홍보)이 수립된다
+

CM.AW-P — Data Processing Awareness (데이터 처리 인지)

+

개인과 조직이 데이터 처리 관행과 관련 프라이버시 리스크에 대해 신뢰할 수 있는 지식을 갖도록 합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
CM.AW-P1데이터 처리 목적, 관행, 관련 프라이버시 리스크, 개인의 데이터 처리 선호 및 요청을 활성화하는 옵션을 소통하기 위한 메커니즘(예: 고지, 내부/공개 보고서)이 수립되어 운영 중이다
CM.AW-P2데이터 처리 및 관련 프라이버시 리스크에 대해 개인의 피드백을 수집하기 위한 메커니즘(예: 설문, 포커스 그룹)이 수립되어 운영 중이다
CM.AW-P3시스템/제품/서비스 설계가 데이터 처리 가시성을 가능하게 한다
CM.AW-P4데이터 공개 및 공유 기록이 유지되고 검토 또는 전송/공개를 위해 접근 가능하다
CM.AW-P5데이터 수정 또는 삭제가 데이터 처리 생태계 내 개인이나 조직(예: 데이터 소스)에 소통될 수 있다
CM.AW-P6데이터 출처(provenance)와 계보(lineage)가 유지되고 검토 또는 전송/공개를 위해 접근 가능하다
CM.AW-P7프라이버시 침해 또는 이벤트에 대해 영향받는 개인과 조직에 통지된다
CM.AW-P8문제 있는 데이터 작업의 영향을 다루기 위한 완화 메커니즘(예: 신용 모니터링, 동의 철회, 데이터 변경/삭제)이 개인에게 제공된다
+
+
+PR-P — Protect-P (보호) +
+

적절한 데이터 처리 보호조치를 개발·실행합니다.

+

이 Function의 상당 부분은 CSF의 Protect Function과 동일하거나 유사합니다. 이는 프라이버시와 사이버보안이 교차하는 영역입니다.

+
+

PR.PO-P — Data Protection Policies, Processes, and Procedures (데이터 보호 정책·프로세스·절차)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
PR.PO-P1보안 원칙(예: 최소 기능 원칙)을 반영한 정보기술 기준 구성이 생성·유지된다
PR.PO-P2구성 변경 통제 프로세스가 수립되어 운영 중이다
PR.PO-P3정보의 백업이 수행·유지·테스트된다
PR.PO-P4조직 자산의 물리적 운영 환경에 관한 정책과 규제가 충족된다
PR.PO-P5보호 프로세스가 개선된다
PR.PO-P6보호 기술의 효과가 공유된다
PR.PO-P7대응 계획(사고 대응, 사업 연속성)과 복구 계획(사고 복구, 재해 복구)이 수립·운영·관리된다
PR.PO-P8대응 및 복구 계획이 테스트된다
PR.PO-P9프라이버시 절차가 인사 관행에 포함된다 (예: 계정 해제, 인력 심사)
PR.PO-P10취약점 관리 계획이 개발되고 구현된다
+

PR.AC-P — Identity Management, Authentication, and Access Control (식별·인증·접근제어)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
PR.AC-P1인가된 개인, 프로세스, 디바이스에 대한 식별 정보와 자격증명이 발급·관리·검증·철회·감사된다
PR.AC-P2데이터와 디바이스에 대한 물리적 접근이 관리된다
PR.AC-P3원격 접근이 관리된다
PR.AC-P4접근 권한과 인가가 최소 권한 및 직무 분리 원칙을 반영하여 관리된다
PR.AC-P5네트워크 무결성이 보호된다 (예: 네트워크 분리, 네트워크 세그멘테이션)
PR.AC-P6개인과 디바이스가 확인(proofing)·자격증명에 바인딩되고, 트랜잭션의 리스크에 상응하게 인증된다
+

PR.DS-P — Data Security (데이터 보안)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
PR.DS-P1저장 데이터(data-at-rest)가 보호된다
PR.DS-P2전송 데이터(data-in-transit)가 보호된다
PR.DS-P3시스템/제품/서비스와 관련 데이터가 제거, 전송, 폐기 과정에서 공식적으로 관리된다
PR.DS-P4가용성을 보장하기 위한 적절한 용량이 유지된다
PR.DS-P5데이터 유출에 대한 보호조치가 구현된다
PR.DS-P6소프트웨어, 펌웨어, 정보의 무결성을 검증하기 위한 무결성 확인 메커니즘이 사용된다
PR.DS-P7개발 및 테스트 환경이 프로덕션 환경과 분리된다
PR.DS-P8하드웨어 무결성을 검증하기 위한 무결성 확인 메커니즘이 사용된다
+

PR.MA-P — Maintenance (유지보수)

+ + + + + + + + + + + + + + + + + +
ID성과
PR.MA-P1조직 자산의 유지보수와 수리가 승인되고 통제된 도구로 수행·기록된다
PR.MA-P2조직 자산의 원격 유지보수가 승인·기록되며, 비인가 접근을 방지하는 방식으로 수행된다
+

PR.PT-P — Protective Technology (보호 기술)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ID성과
PR.PT-P1이동식 미디어가 보호되고 정책에 따라 사용이 제한된다
PR.PT-P2최소 기능 원칙이 시스템을 필수 기능만 제공하도록 구성함으로써 반영된다
PR.PT-P3통신 및 제어 네트워크가 보호된다
PR.PT-P4정상 및 비정상 상황에서 복원력 요구사항을 달성하기 위한 메커니즘(예: 페일세이프, 부하 분산, 핫스왑)이 구현된다
+
+
+

참고 자료

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
리소스URL
PF 1.0 원문 (CSWP 10)https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.01162020.pdf
PF 1.0 공식 사이트https://www.nist.gov/privacy-framework
PF 1.0 Core (Excel)https://www.nist.gov/document/nist-privacy-framework-v10-core
PF 1.1 IPDhttps://csrc.nist.gov/pubs/cswp/40/nist-privacy-framework-11/ipd
PF ↔ CSF 매핑https://csrc.nist.gov/files/pubs/sp/800/53/r5/upd1/final/docs/csf-pf-to-sp800-53r5-mappings.xlsx
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/NIST/README.md b/NIST/README.md deleted file mode 100644 index ba1500d..0000000 --- a/NIST/README.md +++ /dev/null @@ -1,522 +0,0 @@ -# NIST 사이버보안 및 프라이버시 문서 체계 - -## 개요 - -NIST(National Institute of Standards and Technology, 미국 국립표준기술연구소)는 미국의 측정·표준·기술을 담당하는 연방기관입니다. 연방 정보보안 현대화법(FISMA)에 따라 **사이버보안 및 프라이버시 분야의 표준과 가이드라인을 개발하는 역할**도 수행합니다. NIST의 사이버보안/프라이버시 관련 출판물은 미국 연방기관을 대상으로 하지만, 그 체계성과 공신력 때문에 전 세계 보안 실무의 사실상 표준(de facto standard)으로 널리 참조됩니다. - -> NIST가 발행하는 사이버보안/프라이버시 출판물은 미국 정부 저작물(U.S. Government Work)로서 **퍼블릭 도메인**이며, 자유롭게 활용할 수 있습니다. - ---- - -## 학습 경로 - -NIST 체계를 처음 접한다면 아래 순서로 읽는 것을 권장합니다. - -
- -- :material-numeric-1-circle:{ .lg .middle } **전체 구조 파악** - - --- - - [이 문서 (아래 계속)](#시리즈-구조) — 시리즈 구조, 문서 간 관계도 - -- :material-numeric-2-circle:{ .lg .middle } **목표 이해** - - --- - - [CSF 2.0](./CSF-2.0/README.md) — 6 Functions, 22 Categories, 106 Subcategories - -- :material-numeric-3-circle:{ .lg .middle } **프로세스 이해** - - --- - - [SP 800-37](./SP800-37/README.md) — RMF 7단계, 47 Tasks - -- :material-numeric-4-circle:{ .lg .middle } **컨트롤 이해** - - --- - - [SP 800-53](./SP800-53/README.md) — 20 Families, 1,014 Active Controls - -
- -!!! tip "핵심 경로" - **Step 1→4까지 읽으면** NIST 체계의 핵심을 이해한 것입니다. 아래는 실무 적용 시 참고하세요. - -| Step | 읽을 문서 | 이 단계에서 알게 되는 것 | -|------|----------|----------------------| -| **5. 기준선 확인** | [LOW](./SP800-53/low.md) · [MOD](./SP800-53/moderate.md) · [HIGH](./SP800-53/high.md) | "우리 시스템에 어떤 컨트롤이 필요한가" — 영향도별 체크리스트 | -| **6. 평가 방법** | [SP 800-53A](./SP800-53/assessment.md) | "제대로 구현했는지 어떻게 검증하는가" — Examine/Interview/Test | - -추가로 특정 주제의 상세 가이드라인이 필요하면: -- [SP 800 전체 목록 (209건)](./SP800/README.md) — 주제별 분류 + 한국어 요약으로 필요한 문서를 찾을 수 있습니다 -- [SP 1800 전체 목록 (37건)](./SP1800/README.md) — 실제 구현 사례가 필요할 때 -- [도구 및 데이터 소스](./tools.md) — API, MCP 서버, CLI 등 프로그래밍 방식으로 NIST 데이터를 활용하는 도구 - ---- - -## 시리즈 구조 - -NIST 사이버보안/프라이버시 출판물은 **CSRC**(Computer Security Resource Center)를 통해 관리되며, 아래 시리즈로 분류됩니다. - -```mermaid -%%{init: {'securityLevel': 'loose', 'theme': 'base'}}%% -flowchart LR - CSRC["NIST CSRC
사이버보안/프라이버시
출판물
"] - - CSRC --> FIPS["FIPS
연방 정보처리 표준
의무 준수
"] - CSRC --> SP800["SP 800
컴퓨터/정보 보안
가이드라인 · 권고
"] - CSRC --> SP1800["SP 1800
사이버보안 실무 가이드
구현 예시 · How-To
"] - CSRC --> IR["IR
내부/기관 간 보고서
연구 · 분석
"] - CSRC --> CSWP["CSWP
사이버보안 백서
신규 주제 · 의견
"] - CSRC --> FW["프레임워크"] - - FW --> CSF["CSF 2.0
사이버보안 프레임워크
"] - FW --> PF["PF 1.0
프라이버시 프레임워크
"] - - style CSRC fill:#263238,stroke:#263238 - style FIPS fill:#37474f,stroke:#263238 - style SP800 fill:#1a73e8,stroke:#1558b0 - style SP1800 fill:#1a73e8,stroke:#1558b0 - style IR fill:#546e7a,stroke:#37474f - style CSWP fill:#546e7a,stroke:#37474f - style FW fill:#00695c,stroke:#004d40 - style CSF fill:#00897b,stroke:#00695c - style PF fill:#00897b,stroke:#00695c -``` - -### 시리즈 간 관계 - -아래 다이어그램은 NIST 사이버보안 체계의 핵심 문서 간 관계를 보여줍니다. 오른쪽의 **RMF(SP 800-37)**가 전체 프로세스를 운영하는 축이며, 왼쪽이 각 단계에서 참조하는 문서입니다. - -```mermaid -%%{init: {'securityLevel': 'loose', 'theme': 'base'}}%% -flowchart TB - subgraph L1["프레임워크 — 무엇을 해야 하는가"] - CSF["CSF 2.0
Cybersecurity Framework
"] - PF["Privacy Framework"] - end - - subgraph RMF["SP 800-37 · RMF — 보안 운영 프로세스"] - R1["1. Prepare
준비
"] - R2["2. Categorize
분류
"] - R3["3. Select
선택
"] - R4["4. Implement
구현
"] - R5["5. Assess
평가
"] - R6["6. Authorize
인가
"] - R7["7. Monitor
모니터링
"] - R1 --> R2 --> R3 --> R4 --> R5 --> R6 --> R7 - R7 -.-> R1 - end - - subgraph L2["컨트롤 — 어떤 통제를 적용할 것인가"] - CTRL["SP 800-53
컨트롤 카탈로그
20 Families · 1,014 Active
"] - ASSESS["SP 800-53A
평가 절차
"] - BASE["SP 800-53B
기준선 (LOW · MOD · HIGH · PRIVACY)
"] - end - - subgraph L3["가이드라인 — 주제별 상세 지침"] - SP800["SP 800 시리즈
주제별 상세 가이드
CUI · ZTA · 침해대응 · 암호 등
"] - end - - subgraph L4["실무 구현 — 어떻게 구현할 것인가"] - SP1800["SP 1800 시리즈
실무 구현 가이드 (How-To)
아키텍처 · 구성 절차 · 사례
"] - end - - FIPS["FIPS
연방 표준
의무 준수
"] - - CSF -- "목표를 컨트롤로 매핑" --> CTRL - PF -- "프라이버시 컨트롤 연계" --> CTRL - CTRL --> ASSESS - CTRL --> BASE - - R2 -. "FIPS 199로 영향도 분류" .-> FIPS - R3 -. "기준선 선택" .-> BASE - R4 -. "컨트롤 구현" .-> CTRL - R4 -. "상세 지침 참조" .-> SP800 - R5 -. "평가 절차 적용" .-> ASSESS - SP800 -- "구현 예시" --> SP1800 - - style L1 fill:none,stroke:#1a73e8,stroke-width:2px - style RMF fill:none,stroke:#d32f2f,stroke-width:2px - style L2 fill:none,stroke:#e65100,stroke-width:2px - style L3 fill:none,stroke:#2e7d32,stroke-width:2px - style L4 fill:none,stroke:#558b2f,stroke-width:2px - style CSF fill:#1a73e8,stroke:#1558b0 - style PF fill:#7b1fa2,stroke:#6a1b9a - style CTRL fill:#e65100,stroke:#bf360c - style ASSESS fill:#fff3e0,stroke:#e65100 - style BASE fill:#fff3e0,stroke:#e65100 - style SP800 fill:#2e7d32,stroke:#1b5e20 - style SP1800 fill:#c8e6c9,stroke:#2e7d32 - style FIPS fill:#37474f,stroke:#263238 - style R1 fill:#d32f2f,stroke:#b71c1c - style R2 fill:#d32f2f,stroke:#b71c1c - style R3 fill:#d32f2f,stroke:#b71c1c - style R4 fill:#d32f2f,stroke:#b71c1c - style R5 fill:#d32f2f,stroke:#b71c1c - style R6 fill:#d32f2f,stroke:#b71c1c - style R7 fill:#d32f2f,stroke:#b71c1c -``` - -> **RMF 7단계**가 NIST 체계를 운영하는 중심 프로세스입니다. 각 단계에서 해당 문서를 참조합니다: -> Categorize → FIPS 199 | Select → SP 800-53B | Implement → SP 800-53 + SP 800 시리즈 | Assess → SP 800-53A - ---- - -## 상세 안내 - -### 한눈에 보기 - -아래 표는 위 다이어그램의 위계 순서(프레임워크 → 컨트롤 → 가이드라인 → 실무 구현 → 표준 → 기타)로 정렬되어 있습니다. - -| 시리즈 | 성격 | 문서 수 | 핵심 키워드 | 링크 | -|--------|------|---------|------------|------| -| **CSF 2.0** | 사이버보안 프레임워크 | — | 6 Functions, 22 Categories, 106 Subcategories | [CSF](https://www.nist.gov/cyberframework) | -| **PF 1.0** | 프라이버시 프레임워크 | — | 5 Functions | [PF](https://www.nist.gov/privacy-framework) | -| **SP 800-53** | 보안/프라이버시 컨트롤 | 3건 (53/53A/53B) | 20 Families, 1,196 Controls, 4 Baselines | [SP 800-53](https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final) | -| **SP 800-37** | 위험관리 프레임워크 (RMF) | 1건 | 7단계, 47 Tasks — 보안 운영 프로세스의 중심축 | [SP 800-37](https://csrc.nist.gov/pubs/sp/800/37/r2/final) | -| **SP 800** | 가이드라인 (권고) | 209건 | CUI, ZTA, 침해대응, 암호 등 | [SP 800](https://csrc.nist.gov/publications/sp800) | -| **SP 1800** | 실무 구현 사례 | 37건 | 랜섬웨어, ZTA 구현, IoT, PQC | [SP 1800](https://csrc.nist.gov/publications/sp1800) | -| **FIPS** | 연방 표준 (의무) | 13건 | AES, SHA, 암호모듈, 보안분류 | [FIPS](https://csrc.nist.gov/publications/fips) | -| **IR** | 연구/분석 보고서 | 266건 | ERM, IoT, 신기술 분석 | [IR](https://csrc.nist.gov/publications/ir) | -| **CSWP** | 백서 | 55건 | 신규 주제, CSF/PF 원문 | [CSWP](https://csrc.nist.gov/publications/white-papers) | - -> 아래 각 항목을 클릭하면 상세 내용을 확인할 수 있습니다. - ---- - -### 프레임워크 — 무엇을 해야 하는가 - -
-Cybersecurity Framework (CSF) 2.0 - -| 항목 | 내용 | -|------|------| -| **발행일** | 2024년 2월 26일 | -| **이전 버전** | CSF 1.1 (2018년) | -| **URL** | https://www.nist.gov/cyberframework | - -CSF는 NIST의 다양한 문서를 **하나의 체계**로 엮는 최상위 프레임워크입니다. 전체 구조(106 Subcategories 포함)는 [CSF 2.0 상세 문서](./CSF-2.0/README.md)를 참고하세요. - -**구조: 6 Functions → Categories → Subcategories** - -| Function | 코드 | 설명 | Categories | -|----------|------|------|-----------| -| **Govern** | GV | 조직의 사이버보안 리스크 관리 전략, 기대치, 정책을 수립하고 모니터링. **CSF 2.0에서 신설** | 6개 | -| **Identify** | ID | 현재의 사이버보안 리스크를 이해 — 자산, 취약점, 위협 식별 | 3개 | -| **Protect** | PR | 보안 위험을 관리하기 위한 보호조치 적용 — 접근제어, 교육, 데이터 보안 | 5개 | -| **Detect** | DE | 사이버보안 공격과 침해를 탐지 — 지속적 모니터링, 이상 분석 | 2개 | -| **Respond** | RS | 탐지된 사이버보안 사고에 대응 — 사고 관리, 분석, 완화, 보고 | 4개 | -| **Recover** | RC | 사이버보안 사고로 영향받은 자산과 운영을 복구 | 2개 | - -> **총 22 Categories, 106 Subcategories** - -``` -CSF 2.0 계층 구조 예시: - -GV (Govern) -├── GV.OC (Organizational Context) -│ ├── GV.OC-01: 조직의 미션이 이해되고 사이버보안 리스크 관리에 반영 -│ ├── GV.OC-02: 내부/외부 이해관계자가 파악되고 그들의 요구사항이 이해됨 -│ └── ... -├── GV.RM (Risk Management Strategy) -│ ├── GV.RM-01: 리스크 관리 목표가 수립되고 이해관계자의 동의를 받음 -│ └── ... -├── GV.RR (Roles, Responsibilities, and Authorities) -├── GV.PO (Policy) -├── GV.OV (Oversight) -└── GV.SC (Cybersecurity Supply Chain Risk Management) -``` - -**CSF의 활용 방식** - -1. **Current Profile**: 현재 사이버보안 상태를 CSF 항목으로 매핑 -2. **Target Profile**: 목표 사이버보안 상태를 정의 -3. **Gap Analysis**: Current vs Target 비교 → 우선순위 도출 -4. **Implementation Tiers** (Tier 1~4): 조직의 리스크 관리 접근 수준 (성숙도 모델이 아님) - -
- -
-Privacy Framework (PF) 1.0 - -| 항목 | 내용 | -|------|------| -| **발행일** | 2020년 1월 16일 | -| **차기 버전** | PF 1.1 (Initial Public Draft 공개, 최종판 발행 예정) | -| **URL** | https://www.nist.gov/privacy-framework | - -CSF와 유사한 구조로, 프라이버시 리스크 관리를 위한 프레임워크입니다. 전체 구조(100 Subcategories 포함)는 [PF 1.0 상세 문서](./PF-1.0/README.md)를 참고하세요. - -**구조: 5 Functions** - -| Function | 설명 | -|----------|------| -| **Identify-P** | 프라이버시 리스크 관리를 위한 조직적 이해 | -| **Govern-P** | 프라이버시 거버넌스 체계 | -| **Control-P** | 데이터 처리에 대한 관리 활동 | -| **Communicate-P** | 데이터 처리 관행에 대한 이해관계자 소통 | -| **Protect-P** | 데이터 보호를 위한 기술적/관리적 조치 | - -
- ---- - -### 컨트롤 — 어떤 통제를 적용할 것인가 - -
-SP 800-53 Rev. 5: 보안 컨트롤 체계 - -SP 800-53은 NIST 체계에서 가장 핵심적인 문서입니다. CSF의 추상적 목표를 구체적인 **보안 컨트롤**로 변환합니다. 전체 컨트롤 목록(300 base controls)은 [SP 800-53 상세 문서](./SP800-53/README.md)를 참고하세요. 53 시리즈는 3개 문서로 구성됩니다: - -| 문서 | 역할 | 핵심 질문 | -|------|------|----------| -| **SP 800-53** | 컨트롤 카탈로그 | "어떤 통제 항목이 존재하는가?" — 20개 패밀리, 1,196 컨트롤 정의 | -| **SP 800-53A** | 평가 절차 | "컨트롤이 제대로 구현되었는지 어떻게 검증하는가?" — 각 컨트롤별 평가 방법과 판단 기준 | -| **SP 800-53B** | 기준선 | "우리 시스템에 어떤 컨트롤을 적용해야 하는가?" — 영향도별(LOW/MOD/HIGH/PRIVACY) 필수 컨트롤 세트 | - -**20개 컨트롤 패밀리** - -| 코드 | 패밀리 | 설명 | -|------|--------|------| -| AC | Access Control | 접근 제어 정책 및 메커니즘 | -| AT | Awareness and Training | 보안 교육 및 인식 | -| AU | Audit and Accountability | 감사 로깅, 검토, 보존 | -| CA | Assessment, Authorization, and Monitoring | 보안 평가 및 인가 | -| CM | Configuration Management | 구성 기준선 및 변경 통제 | -| CP | Contingency Planning | 사업 연속성 및 재해 복구 | -| IA | Identification and Authentication | 신원 확인 메커니즘 | -| IR | Incident Response | 사고 탐지, 처리, 보고 | -| MA | Maintenance | 시스템 유지보수 | -| MP | Media Protection | 매체 접근, 표시, 저장, 폐기 | -| PE | Physical and Environmental Protection | 물리적 접근 및 환경 통제 | -| PL | Planning | 보안 계획 및 시스템 보안 계획서 | -| PM | Program Management | 조직 차원의 정보보안 프로그램 | -| PS | Personnel Security | 인력 심사 및 접근 계약 | -| PT | PII Processing and Transparency | 개인정보 처리 및 투명성 | -| RA | Risk Assessment | 위험 식별, 분석, 대응 | -| SA | System and Services Acquisition | 안전한 개발 및 공급망 | -| SC | System and Communications Protection | 암호화 및 통신 보호 | -| SI | System and Information Integrity | 결함 교정, 모니터링, 악성코드 보호 | -| SR | Supply Chain Risk Management | 공급망 통제 및 출처 | - -**기준선 (Baselines)** - -SP 800-53B에서 정의하는 기준선은 시스템의 영향도(Impact Level)에 따라 적용할 컨트롤 세트를 지정합니다. - -| 기준선 | 영향도 | 컨트롤 수 | 적용 상황 | -|--------|--------|----------|----------| -| LOW | 제한적 피해 | 149개 | 기밀성/무결성/가용성 손실 시 피해가 제한적 | -| MODERATE | 심각한 피해 | 287개 | 피해가 심각한 수준 | -| HIGH | 치명적 피해 | 370개 | 피해가 치명적/재앙적 | -| PRIVACY | 개인정보 | ~110개 | PII를 처리하는 시스템 | - -> 컨트롤 수는 NIST OSCAL 공식 프로파일 기준입니다. PRIVACY 기준선은 별도 집계로 근사값입니다. - -
- ---- - -### 가이드라인 — 주제별 상세 지침 - -
-SP 800 시리즈 — 가이드라인 및 권고사항 (209건) - -NIST 사이버보안의 핵심 시리즈입니다. 번호는 800-12부터 800-236까지 있으며, 전체 209건의 주제별 분류 목록은 [SP 800 전체 문서 목록](./SP800/README.md)을 참고하세요. 아래는 주요 문서만 발췌한 것입니다: - -> SP 800-53 시리즈(53/53A/53B)는 별도 섹션에서 상세히 다루고 있으므로 여기서는 생략합니다. - -**위험 관리 (Risk Management)** - -| 문서 | 제목 | 핵심 내용 | -|------|------|----------| -| SP 800-30 | Guide for Conducting Risk Assessments | 위험 평가 수행 가이드 | -| SP 800-37 | Risk Management Framework (RMF) | **위험관리 프레임워크** — 준비→분류→선택→구현→평가→인가→모니터링 7단계 | -| SP 800-39 | Managing Information Security Risk | 조직 수준의 정보보안 위험 관리 | - -**CUI 보호 (Controlled Unclassified Information)** - -| 문서 | 제목 | 핵심 내용 | -|------|------|----------| -| SP 800-171 Rev. 3 | Protecting CUI in Nonfederal Systems | 비연방 시스템의 CUI 보호 요구사항. **CMMC 2.0의 기반** | -| SP 800-172 | Enhanced Security Requirements for CUI | CUI 보호 강화 요구사항 | - -**인증 및 접근 제어 (Identity & Access)** - -| 문서 | 제목 | 핵심 내용 | -|------|------|----------| -| SP 800-63-4 | Digital Identity Guidelines | 디지털 인증 가이드라인 (IAL/AAL/FAL) | -| SP 800-207 | Zero Trust Architecture | **제로 트러스트 아키텍처** 참조 모델 | - -**침해사고 대응 (Incident Response)** - -| 문서 | 제목 | 핵심 내용 | -|------|------|----------| -| SP 800-61 Rev. 3 | Incident Response Recommendations | 침해사고 대응 권고사항 (CSF 2.0 연계) | -| SP 800-86 | Guide to Integrating Forensic Techniques | 포렌식 기법 가이드 | -| SP 800-83 | Guide to Malware Incident Prevention | 악성코드 사고 예방/대응 | - -**보안 테스트 및 평가 (Testing & Assessment)** - -| 문서 | 제목 | 핵심 내용 | -|------|------|----------| -| SP 800-115 | Technical Guide to Information Security Testing | 보안 테스트 기술 가이드 | -| SP 800-137 | Information Security Continuous Monitoring | 지속적 모니터링 | - -**클라우드 및 신기술 (Cloud & Emerging Tech)** - -| 문서 | 제목 | 핵심 내용 | -|------|------|----------| -| SP 800-210 | General Access Control Guidance for Cloud Systems | 클라우드 접근 제어 | -| SP 800-213 | IoT Device Cybersecurity Guidance | IoT 디바이스 보안 | -| SP 800-218 | Secure Software Development Framework (SSDF) | 안전한 소프트웨어 개발 프레임워크 | -| SP 800-228 | Guidance for Securing AI Systems | AI 시스템 보안 가이드 | - -**암호 (Cryptography)** - -| 문서 | 제목 | 핵심 내용 | -|------|------|----------| -| SP 800-57 | Recommendation for Key Management | 키 관리 권고사항 (Part 1~3) | -| SP 800-175B | Guideline for Using Cryptographic Standards | 암호 표준 사용 가이드 | -| SP 800-227 | Recommendations for Key-Encapsulation Mechanisms | 양자내성 암호 키 캡슐화 권고 | - -**OT/산업제어 (Operational Technology)** - -| 문서 | 제목 | 핵심 내용 | -|------|------|----------| -| SP 800-82 Rev. 3 | Guide to Operational Technology (OT) Security | OT/ICS/SCADA 보안 가이드 | - -> 위 목록은 SP 800 시리즈의 **주요 문서**만 발췌한 것입니다. 전체 목록은 [NIST SP 800 시리즈 페이지](https://csrc.nist.gov/publications/sp800)에서 확인할 수 있습니다. - -
- ---- - -### 실무 구현 — 어떻게 구현할 것인가 - -
-SP 1800 시리즈 — 실무 구현 가이드 (37건) - -NCCoE(National Cybersecurity Center of Excellence)에서 발행합니다. SP 800이 주제별 요구사항과 절차를 설명한다면, SP 1800은 **실제 제품과 아키텍처를 사용해 어떻게 구현하는지** 보여줍니다. 전체 37건의 주제별 분류 목록은 [SP 1800 전체 문서 목록](./SP1800/README.md)을 참고하세요. - -각 문서는 보통 3개 파트로 구성됩니다: -- **Volume A**: Executive Summary (경영진 요약) -- **Volume B**: Approach, Architecture, and Security Characteristics (접근 방법) -- **Volume C**: How-To Guides (단계별 구현 절차) - -| 문서 | 주제 | -|------|------| -| SP 1800-25 | Data Integrity: Identifying and Protecting Assets Against Ransomware | -| SP 1800-26 | Data Integrity: Detecting and Responding to Ransomware | -| SP 1800-35 | Implementing a Zero Trust Architecture | -| SP 1800-36 | Trusted IoT Onboarding | -| SP 1800-38 | Migration to Post-Quantum Cryptography | - -
- ---- - -### 연방 표준 및 기타 - -
-FIPS — 연방 정보처리 표준 (13건) - -연방 표준으로, 미국 연방기관은 **의무 준수** 대상입니다. FISMA에 의해 NIST에 표준 개발 권한이 부여되었습니다. - -> **FIPS와 SP의 차이:** FIPS는 "무엇을 해야 하는가"(의무), SP는 "어떻게 해야 하는가"(권고). 예: FIPS 200이 최소 보안 요구사항을 정의하면, SP 800-53이 그 요구사항을 충족하기 위한 구체적 보안 컨트롤을 제공합니다. - -| 번호 | 제목 | 내용 | -|------|------|------| -| FIPS 140-2 | Security Requirements for Cryptographic Modules | 암호 모듈 보안 요구사항 (기존 표준, 140-3으로 전환 중이나 기존 인증 유효) | -| FIPS 140-3 | Security Requirements for Cryptographic Modules | 암호 모듈 보안 요구사항 (현행 표준, 신규 인증은 140-3 기준) | -| FIPS 180-4 | Secure Hash Standard (SHS) | SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 해시 함수 표준 | -| FIPS 186-5 | Digital Signature Standard (DSS) | 디지털 서명 알고리즘 표준 (RSA, ECDSA, EdDSA) | -| FIPS 197 | Advanced Encryption Standard (AES) | AES 암호화 알고리즘 표준 | -| FIPS 198-1 | The Keyed-Hash Message Authentication Code (HMAC) | HMAC 표준 | -| FIPS 199 | Standards for Security Categorization | 정보/정보시스템의 보안 분류 기준 (LOW/MODERATE/HIGH) | -| FIPS 200 | Minimum Security Requirements | 연방 정보시스템 최소 보안 요구사항 | -| FIPS 201-3 | Personal Identity Verification (PIV) | 연방 직원/계약자 신원확인 표준 | -| FIPS 202 | SHA-3 Standard | SHA-3 해시 함수 표준 | -| FIPS 203 | ML-KEM (Module-Lattice-Based Key-Encapsulation) | 양자내성 키 캡슐화 표준 | -| FIPS 204 | ML-DSA (Module-Lattice-Based Digital Signature) | 양자내성 디지털 서명 표준 | -| FIPS 205 | SLH-DSA (Stateless Hash-Based Digital Signature) | 양자내성 해시 기반 서명 표준 | - -
- -
-NIST IR — 연구/분석 보고서 (266건) - -특정 주제에 대한 연구 결과나 심층 분석을 담습니다. 일부는 이후 SP 시리즈로 발전하기도 합니다. - -| 문서 | 제목 | -|------|------| -| IR 8286 | Integrating Cybersecurity and Enterprise Risk Management (ERM) | -| IR 8259 | Foundational Cybersecurity Activities for IoT Device Manufacturers | -| IR 8401 | Satellite Ground Segment: Applying the CSF to Satellite C2 | - -
- -
-CSWP — 사이버보안 백서 (55건) - -신규 주제에 대한 의견 제시나 프레임워크 문서를 포함합니다. - -> CSF 2.0과 Privacy Framework도 CSWP로 분류됩니다. -> 예: CSWP 29 = CSF 2.0, CSWP 10 = Privacy Framework 1.0 - -
- ---- - -## 부록 - -
-문서 상태(Publication Status) - -| 상태 | 의미 | -|------|------| -| **Final** | 최종 확정본 | -| **Public Draft** / **IPD** | 공개 초안 — 공개 의견 수렴 중 | -| **Superseded** | 대체됨 — 새로운 버전이 발행되어 이전 버전을 대체 | -| **Withdrawn** | 폐지 — 더 이상 유효하지 않음 | - -NIST 문서는 지속적으로 개정됩니다. 버전 표기는 두 가지입니다: -- **Rev. N** (Revision) — 주요 개정. 예: SP 800-53 Rev. 5 -- **Update N** — 소규모 업데이트. 예: SP 800-53 Rev. 5, Update 1 - -
- -
-머신 리더블 데이터(Machine-Readable Data) - -NIST는 문서 내용을 프로그래밍 방식으로 접근할 수 있도록 여러 형식을 제공합니다. - -| 도구/형식 | 설명 | URL | -|-----------|------|-----| -| **OSCAL** | Open Security Controls Assessment Language (v1.0.6). SP 800-53 컨트롤을 JSON/XML/YAML로 제공 | https://pages.nist.gov/OSCAL/ | -| **CPRT** | Cybersecurity and Privacy Reference Tool. 컨트롤 간 관계를 JSON/XLSX로 제공 | https://csrc.nist.gov/projects/cprt | -| **NVD API** | National Vulnerability Database API. CVE/CPE 데이터를 REST API로 제공 | https://nvd.nist.gov/developers | -| **Publications XLSX** | 전체 출판물 메타데이터를 엑셀로 다운로드 | [다운로드](https://csrc.nist.gov/files/pubs/shared/docs/NIST-Cybersecurity-Publications.xlsx) | -| **RSS/JSON Feed** | 공개 초안 알림 피드 | https://csrc.nist.gov/CSRC/media/feeds/pubs/drafts-open-for-comment.json | -| **GitHub** | OSCAL 콘텐츠, 기술 출판물 메타데이터 등 | https://github.com/usnistgov | - -
- -
-참고 링크 - -| 리소스 | URL | -|--------|-----| -| NIST CSRC (메인) | https://csrc.nist.gov | -| SP 800 시리즈 | https://csrc.nist.gov/publications/sp800 | -| SP 1800 시리즈 | https://csrc.nist.gov/publications/sp1800 | -| NIST IR 시리즈 | https://csrc.nist.gov/publications/ir | -| FIPS | https://csrc.nist.gov/publications/fips | -| CSF 2.0 | https://www.nist.gov/cyberframework | -| Privacy Framework | https://www.nist.gov/privacy-framework | -| NVD | https://nvd.nist.gov | -| OSCAL | https://pages.nist.gov/OSCAL | -| CPRT | https://csrc.nist.gov/projects/cprt | - -
diff --git a/NIST/SP1800/README.md b/NIST/SP1800/README.md deleted file mode 100644 index 0a009c0..0000000 --- a/NIST/SP1800/README.md +++ /dev/null @@ -1,162 +0,0 @@ -# SP 1800 시리즈 — 전체 문서 목록 - -## 개요 - -SP 1800 시리즈는 NCCoE(National Cybersecurity Center of Excellence)에서 발행하는 **사이버보안 실무 구현 가이드**입니다. SP 800이 주제별 요구사항과 절차를 설명한다면, SP 1800은 **실제 제품과 아키텍처를 사용해 어떻게 구현하는지** 보여줍니다. - -현재 **37건**의 문서가 발행되어 있습니다. - -| 상태 | 문서 수 | -|------|---------| -| Final | 32건 | -| Public Draft | 5건 | -| **합계** | **37건** | - -각 문서는 보통 3개 파트로 구성됩니다: -- **Volume A**: Executive Summary (경영진 요약) -- **Volume B**: Approach, Architecture, and Security Characteristics (접근 방법) -- **Volume C**: How-To Guides (단계별 구현 절차) - ---- - -## 주제별 분류 요약 - -| 주제 | 문서 수 | -|------|---------| -| 의료·헬스케어 (Healthcare) | 5건 | -| 에너지·산업제어 (Energy & ICS) | 5건 | -| 데이터 보호 (Data Protection) | 6건 | -| 모바일 디바이스 보안 (Mobile Security) | 4건 | -| 신원·인증·접근제어 (Identity & Access) | 3건 | -| 네트워크·통신 보안 (Network Security) | 4건 | -| 클라우드·인프라 (Cloud & Infrastructure) | 1건 | -| IoT (Internet of Things) | 2건 | -| 신기술 (Emerging Technology) | 4건 | -| 기타 (Other) | 3건 | - ---- - -
-의료·헬스케어 (Healthcare) (5건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 1800-1 | Securing Electronic Health Records on Mobile Devices | 모바일 디바이스에서의 전자 건강 기록(EHR) 보안 | Final | -| SP 1800-8 | Securing Wireless Infusion Pumps in Healthcare Delivery Organizations | 의료 기관의 무선 주입 펌프 보안 | Final | -| SP 1800-24 | Securing Picture Archiving and Communication System (PACS): Cybersecurity for the Healthcare Sector | 의료 분야 PACS(영상 저장/통신 시스템) 보안 | Final | -| SP 1800-30 | Securing Telehealth Remote Patient Monitoring Ecosystem | 원격 환자 모니터링 원격의료 생태계 보안 | Final | -| SP 1800-43 | Genomic Data Threat Modeling | 유전체 데이터 위협 모델링 | Public Draft | - -
- -
-에너지·산업제어 (Energy & ICS) (5건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 1800-2 | Identity and Access Management for Electric Utilities | 전력 유틸리티의 신원 및 접근 관리 | Final | -| SP 1800-7 | Situational Awareness for Electric Utilities | 전력 유틸리티의 상황 인식 | Final | -| SP 1800-10 | Protecting Information and System Integrity in Industrial Control System Environments: Cybersecurity for the Manufacturing Sector | 제조 분야 ICS 환경의 정보 및 시스템 무결성 보호 | Final | -| SP 1800-23 | Energy Sector Asset Management: For Electric Utilities, Oil & Gas Industry | 에너지 분야 자산 관리: 전력 유틸리티, 석유/가스 산업 | Final | -| SP 1800-32 | Securing Distributed Energy Resources: An Example of Industrial Internet of Things Cybersecurity | 분산 에너지 자원(DER) 보안: 산업 IoT 사이버보안 사례 | Final | - -
- -
-데이터 보호 (Data Protection) (6건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 1800-11 | Data Integrity: Recovering from Ransomware and Other Destructive Events | 데이터 무결성: 랜섬웨어 및 파괴적 이벤트 복구 | Final | -| SP 1800-25 | Data Integrity: Identifying and Protecting Assets Against Ransomware and Other Destructive Events | 데이터 무결성: 랜섬웨어 등 파괴적 이벤트로부터 자산 식별 및 보호 | Final | -| SP 1800-26 | Data Integrity: Detecting and Responding to Ransomware and Other Destructive Events | 데이터 무결성: 랜섬웨어 등 파괴적 이벤트 탐지 및 대응 | Final | -| SP 1800-28 | Data Confidentiality: Identifying and Protecting Assets Against Data Breaches | 데이터 기밀성: 데이터 침해로부터 자산 식별 및 보호 | Final | -| SP 1800-29 | Data Confidentiality: Detect, Respond to, and Recover from Data Breaches | 데이터 기밀성: 데이터 침해 탐지, 대응, 복구 | Final | -| SP 1800-39 | Data Classification Practices | 데이터 분류 관행 | Public Draft | - -
- -
-모바일 디바이스 보안 (Mobile Security) (4건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 1800-4 | Mobile Device Security: Cloud and Hybrid Builds | 모바일 디바이스 보안: 클라우드 및 하이브리드 빌드 | Final | -| SP 1800-13 | Mobile Application Single Sign-On: Improving Authentication for Public Safety First Responders | 모바일 애플리케이션 SSO: 공공 안전 초동 대응자 인증 개선 | Final | -| SP 1800-21 | Mobile Device Security: Corporate-Owned Personally-Enabled (COPE) | 모바일 디바이스 보안: 회사 소유 개인 사용(COPE) | Final | -| SP 1800-22 | Mobile Device Security: Bring Your Own Device (BYOD) | 모바일 디바이스 보안: BYOD(개인 디바이스 업무 사용) | Final | - -
- -
-신원·인증·접근제어 (Identity & Access) (3건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 1800-12 | Derived Personal Identity Verification (PIV) Credentials | 파생 PIV 자격증명 구현 | Final | -| SP 1800-17 | Multifactor Authentication for E-Commerce: Risk-Based, FIDO Universal Second Factor Implementations for Purchasers | 전자상거래 다중 인증: FIDO U2F 구현 | Final | -| SP 1800-42 | Digital Identities – Mobile Driver’s License (mDL): Accelerating Development and Adoption of Digital Identity for Financial Institutions | 디지털 신원 — 모바일 운전면허증(mDL): 금융기관의 디지털 신원 개발 가속화 | Public Draft | - -
- -
-네트워크·통신 보안 (Network Security) (4건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 1800-6 | Domain Name System-Based Electronic Mail Security | DNS 기반 이메일 보안 | Final | -| SP 1800-14 | Protecting the Integrity of Internet Routing: Border Gateway Protocol (BGP) Route Origin Validation | 인터넷 라우팅 무결성 보호: BGP 경로 원점 검증 | Final | -| SP 1800-16 | Securing Web Transactions: TLS Server Certificate Management | 웹 트랜잭션 보안: TLS 서버 인증서 관리 | Final | -| SP 1800-37 | Addressing Visibility Challenges with TLS 1.3 within the Enterprise: High-Level Document | 엔터프라이즈 내 TLS 1.3 가시성 확보 | Final | - -
- -
-클라우드·인프라 (Cloud & Infrastructure) (1건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 1800-19 | Trusted Cloud: Security Practice Guide for VMware Hybrid Cloud Infrastructure as a Service (IaaS) Environments | 신뢰할 수 있는 클라우드: VMware 하이브리드 클라우드 IaaS 보안 실무 가이드 | Final | - -
- -
-IoT (Internet of Things) (2건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 1800-15 | Securing Small-Business and Home Internet of Things (IoT) Devices: Mitigating Network-Based Attacks Using Manufacturer Usage Description (MUD) | 소규모/가정용 IoT 디바이스 보안: MUD를 활용한 네트워크 기반 공격 완화 | Final | -| SP 1800-36 | Trusted Internet of Things (IoT) Device Network-Layer Onboarding and Lifecycle Management: Enhancing Internet Protocol-Based IoT Device and Network Security | 신뢰할 수 있는 IoT 디바이스 네트워크 계층 온보딩 및 생명주기 관리 | Final | - -
- -
-신기술 (Emerging Technology) (4건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 1800-33 | 5G Cybersecurity | 5G 사이버보안 | Public Draft | -| SP 1800-34 | Validating the Integrity of Computing Devices | 컴퓨팅 디바이스 무결성 검증 | Final | -| SP 1800-35 | Implementing a Zero Trust Architecture: High-Level Document | 제로 트러스트 아키텍처 구현 | Final | -| SP 1800-40 | Automation of the NIST Cryptographic Module Validation Program | NIST 암호 모듈 검증 프로그램(CMVP) 자동화 | Public Draft | - -
- -
-기타 (Other) (3건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 1800-5 | IT Asset Management | IT 자산 관리 | Final | -| SP 1800-27 | Securing Property Management Systems | 호텔/숙박업 자산 관리 시스템(PMS) 보안 | Final | -| SP 1800-31 | Improving Enterprise Patching for General IT Systems: Utilizing Existing Tools and Performing Processes in Better Ways | 일반 IT 시스템의 엔터프라이즈 패치 관리 개선 | Final | - -
- ---- - -## 참고 - -- 이 목록은 NIST CSRC 공식 출판물 데이터에서 추출되었습니다. -- SP 1800 시리즈는 NCCoE가 산업 파트너와 협력하여 작성하며, 특정 벤더 제품을 사용한 구현 사례를 포함합니다. -- 전체 목록: https://csrc.nist.gov/publications/sp1800 \ No newline at end of file diff --git a/NIST/SP1800/index.html b/NIST/SP1800/index.html new file mode 100644 index 0000000..507b66b --- /dev/null +++ b/NIST/SP1800/index.html @@ -0,0 +1,2349 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SP 1800 시리즈 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + +

SP 1800 시리즈 — 전체 문서 목록

+

개요

+

SP 1800 시리즈는 NCCoE(National Cybersecurity Center of Excellence)에서 발행하는 사이버보안 실무 구현 가이드입니다. SP 800이 주제별 요구사항과 절차를 설명한다면, SP 1800은 실제 제품과 아키텍처를 사용해 어떻게 구현하는지 보여줍니다.

+

현재 37건의 문서가 발행되어 있습니다.

+ + + + + + + + + + + + + + + + + + + + + +
상태문서 수
Final32건
Public Draft5건
합계37건
+

각 문서는 보통 3개 파트로 구성됩니다: +- Volume A: Executive Summary (경영진 요약) +- Volume B: Approach, Architecture, and Security Characteristics (접근 방법) +- Volume C: How-To Guides (단계별 구현 절차)

+
+

주제별 분류 요약

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
주제문서 수
의료·헬스케어 (Healthcare)5건
에너지·산업제어 (Energy & ICS)5건
데이터 보호 (Data Protection)6건
모바일 디바이스 보안 (Mobile Security)4건
신원·인증·접근제어 (Identity & Access)3건
네트워크·통신 보안 (Network Security)4건
클라우드·인프라 (Cloud & Infrastructure)1건
IoT (Internet of Things)2건
신기술 (Emerging Technology)4건
기타 (Other)3건
+
+
+의료·헬스케어 (Healthcare) (5건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 1800-1Securing Electronic Health Records on Mobile Devices모바일 디바이스에서의 전자 건강 기록(EHR) 보안Final
SP 1800-8Securing Wireless Infusion Pumps in Healthcare Delivery Organizations의료 기관의 무선 주입 펌프 보안Final
SP 1800-24Securing Picture Archiving and Communication System (PACS): Cybersecurity for the Healthcare Sector의료 분야 PACS(영상 저장/통신 시스템) 보안Final
SP 1800-30Securing Telehealth Remote Patient Monitoring Ecosystem원격 환자 모니터링 원격의료 생태계 보안Final
SP 1800-43Genomic Data Threat Modeling유전체 데이터 위협 모델링Public Draft
+
+
+에너지·산업제어 (Energy & ICS) (5건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 1800-2Identity and Access Management for Electric Utilities전력 유틸리티의 신원 및 접근 관리Final
SP 1800-7Situational Awareness for Electric Utilities전력 유틸리티의 상황 인식Final
SP 1800-10Protecting Information and System Integrity in Industrial Control System Environments: Cybersecurity for the Manufacturing Sector제조 분야 ICS 환경의 정보 및 시스템 무결성 보호Final
SP 1800-23Energy Sector Asset Management: For Electric Utilities, Oil & Gas Industry에너지 분야 자산 관리: 전력 유틸리티, 석유/가스 산업Final
SP 1800-32Securing Distributed Energy Resources: An Example of Industrial Internet of Things Cybersecurity분산 에너지 자원(DER) 보안: 산업 IoT 사이버보안 사례Final
+
+
+데이터 보호 (Data Protection) (6건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 1800-11Data Integrity: Recovering from Ransomware and Other Destructive Events데이터 무결성: 랜섬웨어 및 파괴적 이벤트 복구Final
SP 1800-25Data Integrity: Identifying and Protecting Assets Against Ransomware and Other Destructive Events데이터 무결성: 랜섬웨어 등 파괴적 이벤트로부터 자산 식별 및 보호Final
SP 1800-26Data Integrity: Detecting and Responding to Ransomware and Other Destructive Events데이터 무결성: 랜섬웨어 등 파괴적 이벤트 탐지 및 대응Final
SP 1800-28Data Confidentiality: Identifying and Protecting Assets Against Data Breaches데이터 기밀성: 데이터 침해로부터 자산 식별 및 보호Final
SP 1800-29Data Confidentiality: Detect, Respond to, and Recover from Data Breaches데이터 기밀성: 데이터 침해 탐지, 대응, 복구Final
SP 1800-39Data Classification Practices데이터 분류 관행Public Draft
+
+
+모바일 디바이스 보안 (Mobile Security) (4건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 1800-4Mobile Device Security: Cloud and Hybrid Builds모바일 디바이스 보안: 클라우드 및 하이브리드 빌드Final
SP 1800-13Mobile Application Single Sign-On: Improving Authentication for Public Safety First Responders모바일 애플리케이션 SSO: 공공 안전 초동 대응자 인증 개선Final
SP 1800-21Mobile Device Security: Corporate-Owned Personally-Enabled (COPE)모바일 디바이스 보안: 회사 소유 개인 사용(COPE)Final
SP 1800-22Mobile Device Security: Bring Your Own Device (BYOD)모바일 디바이스 보안: BYOD(개인 디바이스 업무 사용)Final
+
+
+신원·인증·접근제어 (Identity & Access) (3건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 1800-12Derived Personal Identity Verification (PIV) Credentials파생 PIV 자격증명 구현Final
SP 1800-17Multifactor Authentication for E-Commerce: Risk-Based, FIDO Universal Second Factor Implementations for Purchasers전자상거래 다중 인증: FIDO U2F 구현Final
SP 1800-42Digital Identities – Mobile Driver’s License (mDL): Accelerating Development and Adoption of Digital Identity for Financial Institutions디지털 신원 — 모바일 운전면허증(mDL): 금융기관의 디지털 신원 개발 가속화Public Draft
+
+
+네트워크·통신 보안 (Network Security) (4건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 1800-6Domain Name System-Based Electronic Mail SecurityDNS 기반 이메일 보안Final
SP 1800-14Protecting the Integrity of Internet Routing: Border Gateway Protocol (BGP) Route Origin Validation인터넷 라우팅 무결성 보호: BGP 경로 원점 검증Final
SP 1800-16Securing Web Transactions: TLS Server Certificate Management웹 트랜잭션 보안: TLS 서버 인증서 관리Final
SP 1800-37Addressing Visibility Challenges with TLS 1.3 within the Enterprise: High-Level Document엔터프라이즈 내 TLS 1.3 가시성 확보Final
+
+
+클라우드·인프라 (Cloud & Infrastructure) (1건) + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 1800-19Trusted Cloud: Security Practice Guide for VMware Hybrid Cloud Infrastructure as a Service (IaaS) Environments신뢰할 수 있는 클라우드: VMware 하이브리드 클라우드 IaaS 보안 실무 가이드Final
+
+
+IoT (Internet of Things) (2건) + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 1800-15Securing Small-Business and Home Internet of Things (IoT) Devices: Mitigating Network-Based Attacks Using Manufacturer Usage Description (MUD)소규모/가정용 IoT 디바이스 보안: MUD를 활용한 네트워크 기반 공격 완화Final
SP 1800-36Trusted Internet of Things (IoT) Device Network-Layer Onboarding and Lifecycle Management: Enhancing Internet Protocol-Based IoT Device and Network Security신뢰할 수 있는 IoT 디바이스 네트워크 계층 온보딩 및 생명주기 관리Final
+
+
+신기술 (Emerging Technology) (4건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 1800-335G Cybersecurity5G 사이버보안Public Draft
SP 1800-34Validating the Integrity of Computing Devices컴퓨팅 디바이스 무결성 검증Final
SP 1800-35Implementing a Zero Trust Architecture: High-Level Document제로 트러스트 아키텍처 구현Final
SP 1800-40Automation of the NIST Cryptographic Module Validation ProgramNIST 암호 모듈 검증 프로그램(CMVP) 자동화Public Draft
+
+
+기타 (Other) (3건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 1800-5IT Asset ManagementIT 자산 관리Final
SP 1800-27Securing Property Management Systems호텔/숙박업 자산 관리 시스템(PMS) 보안Final
SP 1800-31Improving Enterprise Patching for General IT Systems: Utilizing Existing Tools and Performing Processes in Better Ways일반 IT 시스템의 엔터프라이즈 패치 관리 개선Final
+
+
+

참고

+
    +
  • 이 목록은 NIST CSRC 공식 출판물 데이터에서 추출되었습니다.
  • +
  • SP 1800 시리즈는 NCCoE가 산업 파트너와 협력하여 작성하며, 특정 벤더 제품을 사용한 구현 사례를 포함합니다.
  • +
  • 전체 목록: https://csrc.nist.gov/publications/sp1800
  • +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/NIST/SP800-37/README.md b/NIST/SP800-37/README.md deleted file mode 100644 index b1e76cb..0000000 --- a/NIST/SP800-37/README.md +++ /dev/null @@ -1,248 +0,0 @@ -# SP 800-37 Rev. 2: 위험관리 프레임워크 (RMF) - -## 개요 - -| 항목 | 내용 | -|------|------| -| **정식 명칭** | Risk Management Framework for Information Systems and Organizations: A System Life Cycle Approach for Security and Privacy | -| **문서 번호** | SP 800-37 Revision 2 | -| **발행일** | 2018년 12월 | -| **대상** | 연방 정보시스템 및 조직 (민간 부문에서도 널리 참조) | -| **원문** | https://csrc.nist.gov/pubs/sp/800/37/r2/final | - -RMF(Risk Management Framework)는 NIST 사이버보안 체계 전체를 **운영하는 프로세스**입니다. CSF가 "무엇을" 정의하고 SP 800-53이 "어떤 컨트롤을" 제공한다면, RMF는 이것들을 **언제, 누가, 어떤 순서로** 실행하는지를 정의합니다. - ---- - -## Rev. 2의 주요 변경점 (vs Rev. 1) - -| 변경 사항 | 설명 | -|-----------|------| -| **Prepare 단계 신설** | 기존 6단계 → 7단계. 조직/시스템 수준의 준비 활동 18개 Task 추가 | -| **프라이버시 통합** | 모든 단계에 프라이버시 고려사항 통합 | -| **공급망 리스크 관리** | 전 단계에 SCRM(Supply Chain Risk Management) 통합 | -| **지속적 모니터링 강화** | 각 단계에서 지속적 모니터링 전략 포함 | -| **CSF 연계** | Cybersecurity Framework와의 매핑 명시 | - ---- - -## RMF와 다른 NIST 문서의 관계 - -RMF의 각 단계는 특정 NIST 문서를 참조합니다: - -| RMF 단계 | 참조 문서 | 역할 | -|----------|----------|------| -| **Prepare** | SP 800-39, SP 800-30 | 리스크 관리 전략 수립, 리스크 평가 | -| **Categorize** | **FIPS 199**, FIPS 200 | 시스템 영향도 분류 (LOW/MOD/HIGH) | -| **Select** | **SP 800-53B** | 기준선 선택 및 테일러링 | -| **Implement** | **SP 800-53**, SP 800 시리즈 | 컨트롤 구현, 주제별 상세 지침 참조 | -| **Assess** | **SP 800-53A** | 컨트롤 평가 절차 | -| **Authorize** | SP 800-30 | 잔여 리스크 분석 및 인가 결정 | -| **Monitor** | SP 800-137 | 지속적 모니터링 | - ---- - -## 수치 요약 - -| 구분 | 수량 | -|------|------| -| RMF 단계 | 7개 | -| 총 Task | 47개 | -| — Prepare (조직 수준) | 7개 | -| — Prepare (시스템 수준) | 11개 | -| — Categorize | 3개 | -| — Select | 6개 | -| — Implement | 2개 | -| — Assess | 6개 | -| — Authorize | 5개 | -| — Monitor | 7개 | - ---- - -## 핵심 역할 - -RMF는 각 Task마다 **주요 책임 역할**을 지정합니다. - -| 역할 | 설명 | -|------|------| -| **Authorizing Official (AO)** | 시스템 운영을 인가/거부하는 최종 권한자 | -| **System Owner** | 시스템의 전반적 책임자 — 대부분의 Task에서 주요 역할 | -| **System Security Officer (SSO)** | 시스템 보안의 실무 책임자 | -| **Chief Information Officer (CIO)** | 조직의 정보기술 및 보안 전략 총괄 | -| **Senior Agency Information Security Officer (SAISO)** | 조직 수준 정보보안 담당 | -| **Senior Agency Official for Privacy (SAOP)** | 조직의 프라이버시 프로그램 총괄 — Rev. 2에서 강화된 프라이버시 통합의 핵심 역할 | -| **Risk Executive** | 조직의 리스크 관리 전략 및 허용수준 결정 | -| **Control Assessor** | 컨트롤 평가 수행 (독립성 요구) | -| **Information Owner/Steward** | 정보 유형 및 생명주기 관리 | - ---- - -## RMF 7단계 전체 구조 - -### 한눈에 보기 - -```mermaid -%%{init: {'securityLevel': 'loose', 'theme': 'base'}}%% -flowchart TB - P["1. PREPARE (준비)
18 Tasks — 조직 수준 7 + 시스템 수준 11
"] - C["2. CATEGORIZE (분류)
3 Tasks — FIPS 199로 시스템 영향도 결정
"] - S["3. SELECT (선택)
6 Tasks — SP 800-53B 기준선 선택 및 테일러링
"] - I["4. IMPLEMENT (구현)
2 Tasks — SP 800-53 컨트롤 구현
"] - A["5. ASSESS (평가)
6 Tasks — SP 800-53A 평가 절차 적용
"] - AU["6. AUTHORIZE (인가)
5 Tasks — 잔여 리스크 분석 → 운영 인가/거부
"] - M["7. MONITOR (모니터링)
7 Tasks — 지속적 모니터링
"] - - P --> C --> S --> I --> A --> AU --> M - M -.-> |"순환"| P - - style P fill:#1565c0,stroke:#0d47a1 - style C fill:#00838f,stroke:#006064 - style S fill:#2e7d32,stroke:#1b5e20 - style I fill:#e65100,stroke:#bf360c - style A fill:#ad1457,stroke:#880e4f - style AU fill:#6a1b9a,stroke:#4a148c - style M fill:#d32f2f,stroke:#b71c1c -``` - -> 아래 각 단계를 클릭하면 Task 전체 목록을 확인할 수 있습니다. - ---- - -
-Step 1: PREPARE (준비) — 18 Tasks - -RMF를 실행하기 위한 필수 준비 활동입니다. **Rev. 2에서 신설된 단계**이며, 조직 수준과 시스템 수준으로 나뉩니다. - -**조직 수준 (Organization-Level) — 7 Tasks** - -| Task | 명칭 | 설명 | 주요 역할 | -|------|------|------|----------| -| P-1 | Risk Management Roles | 보안/프라이버시 리스크 관리 역할을 식별하고 배정 | Head of Agency, CIO | -| P-2 | Risk Management Strategy | 리스크 허용수준을 포함한 조직의 리스크 관리 전략 수립 | Risk Executive | -| P-3 | Risk Assessment—Organization | 조직 수준의 리스크 평가 수행 또는 기존 평가 갱신 | SAISO | -| P-4 | Organizationally-Tailored Control Baselines and CSF Profiles *(선택)* | 조직에 맞춤화된 컨트롤 기준선 및 CSF 프로파일 수립 | CIO | -| P-5 | Common Control Identification | 조직 시스템이 상속할 수 있는 공통 컨트롤 식별·문서화·공개 | SAISO | -| P-6 | Impact-Level Prioritization *(선택)* | 동일 영향도의 시스템 간 우선순위 결정 | Risk Executive | -| P-7 | Continuous Monitoring Strategy—Organization | 조직 수준의 컨트롤 효과성 모니터링 전략 수립 | CIO | - -**시스템 수준 (System-Level) — 11 Tasks** - -| Task | 명칭 | 설명 | 주요 역할 | -|------|------|------|----------| -| P-8 | Mission or Business Focus | 시스템의 미션/비즈니스 목적과 동인 식별·문서화 | System Owner | -| P-9 | System Stakeholders | 시스템 이해관계자 식별·문서화 | System Owner | -| P-10 | Asset Identification | 시스템 구성 자산 식별·문서화 | System Owner | -| P-11 | Authorization Boundary | 시스템의 인가 경계 정의·문서화 | System Owner, AO | -| P-12 | Information Types | 시스템이 처리·저장·전송하는 정보 유형 식별·문서화 | Information Owner | -| P-13 | Information Life Cycle | 시스템의 정보 생명주기 식별·문서화 | Information Owner | -| P-14 | Risk Assessment—System | 시스템 수준 리스크 평가 수행 | System Owner | -| P-15 | Requirements Definition | 시스템의 보안/프라이버시 요구사항 정의·문서화 | System Owner, SSO | -| P-16 | Enterprise Architecture | 시스템이 엔터프라이즈 아키텍처와 일관되도록 보장 | CIO | -| P-17 | Requirements Allocation | 보안/프라이버시 요구사항을 시스템 요소에 할당 | System Owner | -| P-18 | System Registration | 시스템을 조직에 등록 | CIO | - -
- -
-Step 2: CATEGORIZE (분류) — 3 Tasks - -시스템과 정보의 보안 범주를 결정합니다. **FIPS 199**에 따라 기밀성/무결성/가용성 각각의 영향도를 평가하고, 가장 높은 값이 시스템의 전체 영향도가 됩니다. - -| Task | 명칭 | 설명 | 주요 역할 | -|------|------|------|----------| -| C-1 | System Description | 시스템의 특성을 기술·문서화 | System Owner | -| C-2 | Security Categorization | FIPS 199에 따라 시스템의 보안 범주를 결정 (LOW/MODERATE/HIGH) | System Owner, Information Owner | -| C-3 | Security Categorization Review and Approval | 보안 범주 결정 결과를 검토하고 승인 | AO, SAISO | - -
- -
-Step 3: SELECT (선택) — 6 Tasks - -시스템의 리스크에 상응하는 컨트롤을 선택하고 조정합니다. **SP 800-53B**의 기준선을 기반으로 조직 상황에 맞게 테일러링합니다. - -| Task | 명칭 | 설명 | 주요 역할 | -|------|------|------|----------| -| S-1 | Control Selection | 리스크에 상응하는 컨트롤 기준선 선택 | System Owner, SSO | -| S-2 | Control Tailoring | 선택된 기준선을 조직/시스템 상황에 맞게 조정 (테일러링) | System Owner, SSO | -| S-3 | Control Allocation | 컨트롤을 시스템 고유/하이브리드/공통으로 지정하고 시스템 요소에 할당 | System Owner, SSO | -| S-4 | Documentation of Planned Control Implementations | 컨트롤과 테일러링 조치를 보안/프라이버시 계획서에 문서화 | SSO | -| S-5 | Continuous Monitoring Strategy—System | 조직 리스크 관리 전략을 반영한 시스템 수준 지속적 모니터링 전략 수립 | System Owner, SSO | -| S-6 | Plan Review and Approval | 보안/프라이버시 계획서를 Authorizing Official이 검토·승인 | AO | - -
- -
-Step 4: IMPLEMENT (구현) — 2 Tasks - -보안/프라이버시 계획서에 명시된 컨트롤을 실제로 구현합니다. - -| Task | 명칭 | 설명 | 주요 역할 | -|------|------|------|----------| -| I-1 | Control Implementation | 보안/프라이버시 계획서에 명시된 컨트롤을 시스템 보안/프라이버시 엔지니어링 방법론으로 구현 | System Owner, System Developer | -| I-2 | Update Control Implementation Information | 구현 중 변경 사항을 문서화하고 보안/프라이버시 계획서 갱신 | System Owner, SSO | - -
- -
-Step 5: ASSESS (평가) — 6 Tasks - -구현된 컨트롤이 올바르게 작동하고 원하는 성과를 달성하는지 평가합니다. **SP 800-53A**의 평가 절차를 적용합니다. - -| Task | 명칭 | 설명 | 주요 역할 | -|------|------|------|----------| -| A-1 | Assessor Selection | 적절한 독립성을 갖춘 평가자/평가팀 선정 | AO, System Owner | -| A-2 | Assessment Plan | 평가에 필요한 문서를 준비하고 보안/프라이버시 평가 계획 수립·검토·승인 | Control Assessor | -| A-3 | Control Assessments | 평가 계획에 따라 컨트롤 평가 수행 | Control Assessor | -| A-4 | Assessment Reports | 발견 사항과 권고 사항을 포함한 보안/프라이버시 평가 보고서 완성 | Control Assessor | -| A-5 | Remediation Actions | 컨트롤 결함을 해결하기 위한 교정 조치를 수행하고 보안/프라이버시 계획서 갱신 | System Owner | -| A-6 | Plan of Action and Milestones | 수용 불가능한 리스크에 대한 교정 계획을 상세히 기술하는 POA&M 작성 | System Owner | - -
- -
-Step 6: AUTHORIZE (인가) — 5 Tasks - -시스템 운영으로 인한 보안/프라이버시 리스크가 수용 가능한 수준인지 결정합니다. **Authorizing Official**이 최종 인가/거부를 판단합니다. - -| Task | 명칭 | 설명 | 주요 역할 | -|------|------|------|----------| -| R-1 | Authorization Package | Authorizing Official에 제출할 인가 패키지 작성 | System Owner, SSO | -| R-2 | Risk Analysis and Determination | 리스크 관리 전략(허용수준 포함)을 반영한 리스크 판단 | AO | -| R-3 | Risk Response | 판단된 리스크에 대한 대응 방안 제시 | AO, System Owner | -| R-4 | Authorization Decision | 시스템 또는 공통 컨트롤에 대한 인가 승인/거부 | AO | -| R-5 | Authorization Reporting | 인가 결정, 주요 취약점, 리스크를 조직 관계자에게 보고 | AO | - -
- -
-Step 7: MONITOR (모니터링) — 7 Tasks - -시스템과 조직의 보안/프라이버시 태세에 대한 **지속적 상황 인식**을 유지합니다. Monitor 단계의 결과는 다시 Prepare 단계로 순환하여 RMF가 지속적인 사이클로 운영됩니다. - -| Task | 명칭 | 설명 | 주요 역할 | -|------|------|------|----------| -| M-1 | System and Environment Changes | 지속적 모니터링 전략에 따라 시스템 및 운영 환경 변화를 모니터링 | System Owner, SSO | -| M-2 | Ongoing Assessments | 지속적 모니터링 전략에 따라 컨트롤 효과성에 대한 지속 평가 수행 | Control Assessor | -| M-3 | Ongoing Risk Response | 지속적 모니터링 활동 결과를 분석하고 적절히 대응 | System Owner, Risk Executive | -| M-4 | Authorization Package Updates | 지속적 모니터링 활동에 기반하여 리스크 관리 문서 갱신 | System Owner, SSO | -| M-5 | Security and Privacy Reporting | Authorizing Official 및 고위 리더에게 보안/프라이버시 태세를 보고하는 프로세스 운영 | System Owner, CIO | -| M-6 | Ongoing Authorization | Authorizing Official이 지속적 모니터링 결과를 사용하여 지속적 인가를 수행하고, 리스크 판단 및 수용 결정의 변경을 소통 | AO | -| M-7 | System Disposal | 시스템 폐기 전략을 수립하고 필요 시 실행 | System Owner, CIO | - -
- ---- - -## 참고 자료 - -| 리소스 | URL | -|--------|-----| -| SP 800-37 Rev. 2 원문 | https://csrc.nist.gov/pubs/sp/800/37/r2/final | -| SP 800-53 (컨트롤 카탈로그) | [SP 800-53 상세 문서](../SP800-53/README.md) | -| SP 800-53A (평가 절차) | [SP 800-53A 상세 문서](../SP800-53/assessment.md) | -| SP 800-53B (기준선) | [SP 800-53 기준선 섹션](../SP800-53/README.md#기준선-baselines) | -| SP 800-39 (리스크 관리) | https://csrc.nist.gov/pubs/sp/800/39/final | -| SP 800-30 (리스크 평가) | https://csrc.nist.gov/pubs/sp/800/30/r1/final | -| FIPS 199 (보안 분류) | https://csrc.nist.gov/pubs/fips/199/final | -| CSF 2.0 | [CSF 2.0 상세 문서](../CSF-2.0/README.md) | diff --git a/NIST/SP800-37/index.html b/NIST/SP800-37/index.html new file mode 100644 index 0000000..d25bd20 --- /dev/null +++ b/NIST/SP800-37/index.html @@ -0,0 +1,2703 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SP 800-37 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

SP 800-37 Rev. 2: 위험관리 프레임워크 (RMF)

+

개요

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
정식 명칭Risk Management Framework for Information Systems and Organizations: A System Life Cycle Approach for Security and Privacy
문서 번호SP 800-37 Revision 2
발행일2018년 12월
대상연방 정보시스템 및 조직 (민간 부문에서도 널리 참조)
원문https://csrc.nist.gov/pubs/sp/800/37/r2/final
+

RMF(Risk Management Framework)는 NIST 사이버보안 체계 전체를 운영하는 프로세스입니다. CSF가 "무엇을" 정의하고 SP 800-53이 "어떤 컨트롤을" 제공한다면, RMF는 이것들을 언제, 누가, 어떤 순서로 실행하는지를 정의합니다.

+
+

Rev. 2의 주요 변경점 (vs Rev. 1)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
변경 사항설명
Prepare 단계 신설기존 6단계 → 7단계. 조직/시스템 수준의 준비 활동 18개 Task 추가
프라이버시 통합모든 단계에 프라이버시 고려사항 통합
공급망 리스크 관리전 단계에 SCRM(Supply Chain Risk Management) 통합
지속적 모니터링 강화각 단계에서 지속적 모니터링 전략 포함
CSF 연계Cybersecurity Framework와의 매핑 명시
+
+

RMF와 다른 NIST 문서의 관계

+

RMF의 각 단계는 특정 NIST 문서를 참조합니다:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RMF 단계참조 문서역할
PrepareSP 800-39, SP 800-30리스크 관리 전략 수립, 리스크 평가
CategorizeFIPS 199, FIPS 200시스템 영향도 분류 (LOW/MOD/HIGH)
SelectSP 800-53B기준선 선택 및 테일러링
ImplementSP 800-53, SP 800 시리즈컨트롤 구현, 주제별 상세 지침 참조
AssessSP 800-53A컨트롤 평가 절차
AuthorizeSP 800-30잔여 리스크 분석 및 인가 결정
MonitorSP 800-137지속적 모니터링
+
+

수치 요약

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분수량
RMF 단계7개
총 Task47개
— Prepare (조직 수준)7개
— Prepare (시스템 수준)11개
— Categorize3개
— Select6개
— Implement2개
— Assess6개
— Authorize5개
— Monitor7개
+
+

핵심 역할

+

RMF는 각 Task마다 주요 책임 역할을 지정합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
역할설명
Authorizing Official (AO)시스템 운영을 인가/거부하는 최종 권한자
System Owner시스템의 전반적 책임자 — 대부분의 Task에서 주요 역할
System Security Officer (SSO)시스템 보안의 실무 책임자
Chief Information Officer (CIO)조직의 정보기술 및 보안 전략 총괄
Senior Agency Information Security Officer (SAISO)조직 수준 정보보안 담당
Senior Agency Official for Privacy (SAOP)조직의 프라이버시 프로그램 총괄 — Rev. 2에서 강화된 프라이버시 통합의 핵심 역할
Risk Executive조직의 리스크 관리 전략 및 허용수준 결정
Control Assessor컨트롤 평가 수행 (독립성 요구)
Information Owner/Steward정보 유형 및 생명주기 관리
+
+

RMF 7단계 전체 구조

+

한눈에 보기

+
%%{init: {'securityLevel': 'loose', 'theme': 'base'}}%%
+flowchart TB
+    P["<span style='color:#fff'><b>1. PREPARE</b> (준비)<br/>18 Tasks — 조직 수준 7 + 시스템 수준 11</span>"]
+    C["<span style='color:#fff'><b>2. CATEGORIZE</b> (분류)<br/>3 Tasks — FIPS 199로 시스템 영향도 결정</span>"]
+    S["<span style='color:#fff'><b>3. SELECT</b> (선택)<br/>6 Tasks — SP 800-53B 기준선 선택 및 테일러링</span>"]
+    I["<span style='color:#fff'><b>4. IMPLEMENT</b> (구현)<br/>2 Tasks — SP 800-53 컨트롤 구현</span>"]
+    A["<span style='color:#fff'><b>5. ASSESS</b> (평가)<br/>6 Tasks — SP 800-53A 평가 절차 적용</span>"]
+    AU["<span style='color:#fff'><b>6. AUTHORIZE</b> (인가)<br/>5 Tasks — 잔여 리스크 분석 → 운영 인가/거부</span>"]
+    M["<span style='color:#fff'><b>7. MONITOR</b> (모니터링)<br/>7 Tasks — 지속적 모니터링</span>"]
+
+    P --> C --> S --> I --> A --> AU --> M
+    M -.-> |"순환"| P
+
+    style P fill:#1565c0,stroke:#0d47a1
+    style C fill:#00838f,stroke:#006064
+    style S fill:#2e7d32,stroke:#1b5e20
+    style I fill:#e65100,stroke:#bf360c
+    style A fill:#ad1457,stroke:#880e4f
+    style AU fill:#6a1b9a,stroke:#4a148c
+    style M fill:#d32f2f,stroke:#b71c1c
+
+

아래 각 단계를 클릭하면 Task 전체 목록을 확인할 수 있습니다.

+
+
+
+Step 1: PREPARE (준비) — 18 Tasks +

RMF를 실행하기 위한 필수 준비 활동입니다. Rev. 2에서 신설된 단계이며, 조직 수준과 시스템 수준으로 나뉩니다.

+

조직 수준 (Organization-Level) — 7 Tasks

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Task명칭설명주요 역할
P-1Risk Management Roles보안/프라이버시 리스크 관리 역할을 식별하고 배정Head of Agency, CIO
P-2Risk Management Strategy리스크 허용수준을 포함한 조직의 리스크 관리 전략 수립Risk Executive
P-3Risk Assessment—Organization조직 수준의 리스크 평가 수행 또는 기존 평가 갱신SAISO
P-4Organizationally-Tailored Control Baselines and CSF Profiles (선택)조직에 맞춤화된 컨트롤 기준선 및 CSF 프로파일 수립CIO
P-5Common Control Identification조직 시스템이 상속할 수 있는 공통 컨트롤 식별·문서화·공개SAISO
P-6Impact-Level Prioritization (선택)동일 영향도의 시스템 간 우선순위 결정Risk Executive
P-7Continuous Monitoring Strategy—Organization조직 수준의 컨트롤 효과성 모니터링 전략 수립CIO
+

시스템 수준 (System-Level) — 11 Tasks

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Task명칭설명주요 역할
P-8Mission or Business Focus시스템의 미션/비즈니스 목적과 동인 식별·문서화System Owner
P-9System Stakeholders시스템 이해관계자 식별·문서화System Owner
P-10Asset Identification시스템 구성 자산 식별·문서화System Owner
P-11Authorization Boundary시스템의 인가 경계 정의·문서화System Owner, AO
P-12Information Types시스템이 처리·저장·전송하는 정보 유형 식별·문서화Information Owner
P-13Information Life Cycle시스템의 정보 생명주기 식별·문서화Information Owner
P-14Risk Assessment—System시스템 수준 리스크 평가 수행System Owner
P-15Requirements Definition시스템의 보안/프라이버시 요구사항 정의·문서화System Owner, SSO
P-16Enterprise Architecture시스템이 엔터프라이즈 아키텍처와 일관되도록 보장CIO
P-17Requirements Allocation보안/프라이버시 요구사항을 시스템 요소에 할당System Owner
P-18System Registration시스템을 조직에 등록CIO
+
+
+Step 2: CATEGORIZE (분류) — 3 Tasks +

시스템과 정보의 보안 범주를 결정합니다. FIPS 199에 따라 기밀성/무결성/가용성 각각의 영향도를 평가하고, 가장 높은 값이 시스템의 전체 영향도가 됩니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Task명칭설명주요 역할
C-1System Description시스템의 특성을 기술·문서화System Owner
C-2Security CategorizationFIPS 199에 따라 시스템의 보안 범주를 결정 (LOW/MODERATE/HIGH)System Owner, Information Owner
C-3Security Categorization Review and Approval보안 범주 결정 결과를 검토하고 승인AO, SAISO
+
+
+Step 3: SELECT (선택) — 6 Tasks +

시스템의 리스크에 상응하는 컨트롤을 선택하고 조정합니다. SP 800-53B의 기준선을 기반으로 조직 상황에 맞게 테일러링합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Task명칭설명주요 역할
S-1Control Selection리스크에 상응하는 컨트롤 기준선 선택System Owner, SSO
S-2Control Tailoring선택된 기준선을 조직/시스템 상황에 맞게 조정 (테일러링)System Owner, SSO
S-3Control Allocation컨트롤을 시스템 고유/하이브리드/공통으로 지정하고 시스템 요소에 할당System Owner, SSO
S-4Documentation of Planned Control Implementations컨트롤과 테일러링 조치를 보안/프라이버시 계획서에 문서화SSO
S-5Continuous Monitoring Strategy—System조직 리스크 관리 전략을 반영한 시스템 수준 지속적 모니터링 전략 수립System Owner, SSO
S-6Plan Review and Approval보안/프라이버시 계획서를 Authorizing Official이 검토·승인AO
+
+
+Step 4: IMPLEMENT (구현) — 2 Tasks +

보안/프라이버시 계획서에 명시된 컨트롤을 실제로 구현합니다.

+ + + + + + + + + + + + + + + + + + + + + + + +
Task명칭설명주요 역할
I-1Control Implementation보안/프라이버시 계획서에 명시된 컨트롤을 시스템 보안/프라이버시 엔지니어링 방법론으로 구현System Owner, System Developer
I-2Update Control Implementation Information구현 중 변경 사항을 문서화하고 보안/프라이버시 계획서 갱신System Owner, SSO
+
+
+Step 5: ASSESS (평가) — 6 Tasks +

구현된 컨트롤이 올바르게 작동하고 원하는 성과를 달성하는지 평가합니다. SP 800-53A의 평가 절차를 적용합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Task명칭설명주요 역할
A-1Assessor Selection적절한 독립성을 갖춘 평가자/평가팀 선정AO, System Owner
A-2Assessment Plan평가에 필요한 문서를 준비하고 보안/프라이버시 평가 계획 수립·검토·승인Control Assessor
A-3Control Assessments평가 계획에 따라 컨트롤 평가 수행Control Assessor
A-4Assessment Reports발견 사항과 권고 사항을 포함한 보안/프라이버시 평가 보고서 완성Control Assessor
A-5Remediation Actions컨트롤 결함을 해결하기 위한 교정 조치를 수행하고 보안/프라이버시 계획서 갱신System Owner
A-6Plan of Action and Milestones수용 불가능한 리스크에 대한 교정 계획을 상세히 기술하는 POA&M 작성System Owner
+
+
+Step 6: AUTHORIZE (인가) — 5 Tasks +

시스템 운영으로 인한 보안/프라이버시 리스크가 수용 가능한 수준인지 결정합니다. Authorizing Official이 최종 인가/거부를 판단합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Task명칭설명주요 역할
R-1Authorization PackageAuthorizing Official에 제출할 인가 패키지 작성System Owner, SSO
R-2Risk Analysis and Determination리스크 관리 전략(허용수준 포함)을 반영한 리스크 판단AO
R-3Risk Response판단된 리스크에 대한 대응 방안 제시AO, System Owner
R-4Authorization Decision시스템 또는 공통 컨트롤에 대한 인가 승인/거부AO
R-5Authorization Reporting인가 결정, 주요 취약점, 리스크를 조직 관계자에게 보고AO
+
+
+Step 7: MONITOR (모니터링) — 7 Tasks +

시스템과 조직의 보안/프라이버시 태세에 대한 지속적 상황 인식을 유지합니다. Monitor 단계의 결과는 다시 Prepare 단계로 순환하여 RMF가 지속적인 사이클로 운영됩니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Task명칭설명주요 역할
M-1System and Environment Changes지속적 모니터링 전략에 따라 시스템 및 운영 환경 변화를 모니터링System Owner, SSO
M-2Ongoing Assessments지속적 모니터링 전략에 따라 컨트롤 효과성에 대한 지속 평가 수행Control Assessor
M-3Ongoing Risk Response지속적 모니터링 활동 결과를 분석하고 적절히 대응System Owner, Risk Executive
M-4Authorization Package Updates지속적 모니터링 활동에 기반하여 리스크 관리 문서 갱신System Owner, SSO
M-5Security and Privacy ReportingAuthorizing Official 및 고위 리더에게 보안/프라이버시 태세를 보고하는 프로세스 운영System Owner, CIO
M-6Ongoing AuthorizationAuthorizing Official이 지속적 모니터링 결과를 사용하여 지속적 인가를 수행하고, 리스크 판단 및 수용 결정의 변경을 소통AO
M-7System Disposal시스템 폐기 전략을 수립하고 필요 시 실행System Owner, CIO
+
+
+

참고 자료

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
리소스URL
SP 800-37 Rev. 2 원문https://csrc.nist.gov/pubs/sp/800/37/r2/final
SP 800-53 (컨트롤 카탈로그)SP 800-53 상세 문서
SP 800-53A (평가 절차)SP 800-53A 상세 문서
SP 800-53B (기준선)SP 800-53 기준선 섹션
SP 800-39 (리스크 관리)https://csrc.nist.gov/pubs/sp/800/39/final
SP 800-30 (리스크 평가)https://csrc.nist.gov/pubs/sp/800/30/r1/final
FIPS 199 (보안 분류)https://csrc.nist.gov/pubs/fips/199/final
CSF 2.0CSF 2.0 상세 문서
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/NIST/SP800-53/README.md b/NIST/SP800-53/README.md deleted file mode 100644 index b5e55d7..0000000 --- a/NIST/SP800-53/README.md +++ /dev/null @@ -1,672 +0,0 @@ -# NIST SP 800-53 Rev. 5: 보안 및 프라이버시 컨트롤 - -## 개요 - -| 항목 | 내용 | -|------|------| -| **정식 명칭** | Security and Privacy Controls for Information Systems and Organizations | -| **문서 번호** | SP 800-53 Revision 5, Update 1 | -| **발행일** | 2020년 9월 (Rev. 5 최초 발행), 이후 Update 1 반영 | -| **대상** | 연방 정보시스템 및 조직 (민간 부문에서도 널리 참조) | -| **원문** | https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final | - -SP 800-53은 NIST 사이버보안 체계의 **핵심 문서**입니다. 조직이 정보시스템과 데이터를 보호하기 위해 구현해야 하는 보안 및 프라이버시 **컨트롤** (통제)의 카탈로그를 제공합니다. - ---- - -## 53 시리즈 구성 - -SP 800-53은 단독으로 사용되지 않으며, 3개 문서가 함께 작동합니다: - -| 문서 | 역할 | 핵심 질문 | -|------|------|----------| -| **SP 800-53** | 컨트롤 카탈로그 | "어떤 통제 항목이 존재하는가?" | -| **SP 800-53A** | 평가 절차 | "컨트롤이 제대로 구현되었는지 어떻게 검증하는가?" | -| **SP 800-53B** | 기준선 (Baselines) | "우리 시스템에 어떤 컨트롤을 적용해야 하는가?" | - ---- - -## Rev. 5의 주요 변경점 (vs Rev. 4) - -| 변경 사항 | 설명 | -|-----------|------| -| **프라이버시 컨트롤 통합** | 기존 별도 부록이었던 프라이버시 컨트롤이 본문에 통합. PT, PM 패밀리 확대 | -| **SR 패밀리 신설** | Supply Chain Risk Management — 공급망 리스크 관리 컨트롤 추가 | -| **PT 패밀리 신설** | PII Processing and Transparency — 개인정보 처리 및 투명성 컨트롤 추가 | -| **"연방" 한정 제거** | 컨트롤 문구에서 "federal"을 제거하여 모든 조직이 활용 가능하도록 범용화 | -| **성과 기반으로 전환** | 컨트롤이 "무엇을 해야 하는가"(what)에 집중하며, "어떻게"(how)는 조직이 결정 | - ---- - -## 수치 요약 - -| 구분 | 수량 | -|------|------| -| 컨트롤 패밀리 | 20개 | -| Base 컨트롤 | 300개 | -| Enhancement 컨트롤 | 714개 | -| Withdrawn 컨트롤 | 182개 | -| **총 컨트롤** (base + enhancement + withdrawn) | **1,196개** | -| **활성 컨트롤** (base + enhancement) | **1,014개** | - ---- - -## 평가 절차 (SP 800-53A) - -SP 800-53A는 각 컨트롤이 **올바르게 구현되었는지 검증하는 방법**을 정의합니다. SP 800-53의 모든 컨트롤과 Enhancement에 대해 1:1로 평가 절차가 존재합니다. - -### 3가지 평가 방법 - -| 방법 | 설명 | 대상 객체 | -|------|------|----------| -| **Examine** (검토) | 문서, 메커니즘, 활동을 검토·분석하여 증거를 확보 | 정책/절차서(Specifications), 하드웨어/소프트웨어(Mechanisms), 보호 활동(Activities) | -| **Interview** (면담) | 담당자와 면담하여 이해를 확인하고 증거를 확보 | 관련 인력(Individuals) | -| **Test** (테스트) | 메커니즘이나 활동을 실제 실행하여 기대 상태와 비교 | 하드웨어/소프트웨어(Mechanisms), 보호 활동(Activities) | - -### 평가 수준 (Depth & Coverage) - -각 평가 방법에는 **깊이(Depth)**와 **범위(Coverage)** 속성이 있으며, 조직이 시스템 영향도와 리스크 허용수준에 따라 결정합니다. - -| 수준 | Depth (깊이) | Coverage (범위) | -|------|-------------|----------------| -| **Basic** | 개괄적 검토 | 제한된 범위 | -| **Focused** | 심화 분석 | 확대된 범위 | -| **Comprehensive** | 철저하고 상세한 분석 | 전체 범위 | - -> 상세 내용(평가 절차 구조, 예시, RMF와의 관계 등)은 [SP 800-53A 상세 문서](./assessment.md)를 참고하세요. - ---- - -## 기준선 (Baselines) - -SP 800-53B는 시스템의 **영향도** (Impact Level)에 따라 적용할 컨트롤 세트를 정의합니다. 영향도는 FIPS 199에 의해 결정됩니다. - -### 영향도 결정 방법 (FIPS 199) - -시스템이 다루는 정보와 시스템 자체에 대해, **기밀성(Confidentiality)·무결성(Integrity)·가용성(Availability)** 각각의 손실이 초래할 잠재적 영향을 평가합니다. - -| 영향도 | 판단 기준 | -|--------|----------| -| **LOW** | 손실이 조직 운영, 자산, 개인에게 **제한적인** 부정적 영향을 미침 (예: 경미한 재정 손실, 일시적 업무 지장) | -| **MODERATE** | 손실이 조직 운영, 자산, 개인에게 **심각한** 부정적 영향을 미침 (예: 상당한 재정 손실, 핵심 업무 기능의 심각한 저하) | -| **HIGH** | 손실이 조직 운영, 자산, 개인에게 **치명적이거나 재앙적인** 부정적 영향을 미침 (예: 대규모 재정 손실, 인명 피해, 핵심 기능 상실) | - -세 가지 보안 목표(C/I/A)의 영향도 중 **가장 높은 것**이 시스템의 전체 영향도가 됩니다. - -> 예: 기밀성=MODERATE, 무결성=MODERATE, 가용성=LOW인 시스템 → 전체 영향도는 **MODERATE** - -### 기준선별 컨트롤 - -상위 기준선은 하위를 완전히 포함합니다: **LOW ⊂ MODERATE ⊂ HIGH** - -| 기준선 | 컨트롤 수 | 체크리스트 | -|--------|----------|-----------| -| **LOW** | 149개 | [LOW 체크리스트](./low.md) | -| **MODERATE** | 287개 (+138) | [MODERATE 체크리스트](./moderate.md) | -| **HIGH** | 370개 (+83) | [HIGH 체크리스트](./high.md) | -| **PRIVACY** | 별도 | — | - -> 컨트롤 수는 NIST OSCAL 공식 프로파일 기준입니다. -> PM(Program Management)과 PT(PII Processing and Transparency) 패밀리는 기준선에 포함되지 않으며, 조직 수준에서 별도 적용됩니다. - ---- - -## 컨트롤 구조 이해 - -### 컨트롤의 구성 요소 - -각 컨트롤은 다음 요소로 구성됩니다: - -| 요소 | 설명 | 예시 (AC-02) | -|------|------|-------------| -| **ID** | 패밀리 코드 + 번호 | AC-02 | -| **Title** | 컨트롤 명칭 | Account Management | -| **Statement** | 컨트롤이 요구하는 성과 | "시스템 계정을 정의·생성·활성화·수정·비활성화·제거한다" | -| **Guidance** | 구현 지침 | 계정 유형, 조건, 자동화 방법 등 | -| **Enhancement** | 강화 항목 (하위 컨트롤) | AC-02(01): 자동화된 계정 관리 | -| **Related Controls** | 관련 컨트롤 참조 | IA-01, IA-04, IA-05... | -| **Baselines** | 적용 기준선 | L/M/H | - -### Base 컨트롤과 Enhancement의 관계 - -SP 800-53의 컨트롤은 **Base 컨트롤**과 **Enhancement(강화 항목)** 두 계층으로 구성됩니다. - -- **Base 컨트롤**: 독립적으로 존재하는 기본 통제 항목 (예: AC-02) -- **Enhancement**: Base에 종속되는 강화 요구사항. 독립적으로 존재할 수 없음 (예: AC-02(01)) - -Enhancement은 `AC-02(01)`처럼 **괄호 번호**로 표기됩니다. 시스템의 영향도가 높아질수록(LOW → MODERATE → HIGH) 더 많은 Enhancement이 필수로 적용됩니다. - -**예시: AC-02 (Account Management)의 계층 구조** - -``` -AC-02 (Base) — 계정 관리 [LOW / MODERATE / HIGH] -│ "시스템 계정을 정의·생성·활성화·수정·비활성화·제거한다" -│ -├── AC-02(01) — 자동화된 계정 관리 [MODERATE / HIGH] -├── AC-02(02) — 임시/긴급 계정 자동 관리 [MODERATE / HIGH] -├── AC-02(03) — 비활성 계정 비활성화 [MODERATE / HIGH] -├── AC-02(04) — 자동 감사 조치 [MODERATE / HIGH] -├── AC-02(05) — 비활성 로그아웃 [MODERATE / HIGH] -├── AC-02(06) — 동적 권한 관리 [—] -├── AC-02(07) — 특권 사용자 계정 [—] -├── AC-02(08) — 동적 계정 관리 [—] -├── AC-02(09) — 공유/그룹 계정 사용 제한 [—] -├── AC-02(11) — 사용 조건 [HIGH] -├── AC-02(12) — 비정형 사용 모니터링 [HIGH] -└── AC-02(13) — 고위험 개인 계정 비활성화 [MODERATE / HIGH] -``` - -위 예시에서: -- **LOW** 시스템: AC-02(Base)만 구현 -- **MODERATE** 시스템: AC-02 + AC-02(01)~(05), (13) 구현 -- **HIGH** 시스템: AC-02 + AC-02(01)~(05), (11), (12), (13) 구현 -- `—` 표시 항목: 기준선에 미포함. 조직이 필요에 따라 선택적으로 적용 - ---- - -## 20개 컨트롤 패밀리 - -### 한눈에 보기 - -| 코드 | 패밀리 | Base | Enhancement | 활성 합계 | -|------|--------|------|-------------|----------| -| AC | Access Control | 23 | 108 | 131 | -| AT | Awareness and Training | 5 | 10 | 15 | -| AU | Audit and Accountability | 15 | 41 | 56 | -| CA | Assessment, Authorization, and Monitoring | 8 | 17 | 25 | -| CM | Configuration Management | 14 | 42 | 56 | -| CP | Contingency Planning | 12 | 37 | 49 | -| IA | Identification and Authentication | 13 | 46 | 59 | -| IR | Incident Response | 9 | 31 | 40 | -| MA | Maintenance | 7 | 21 | 28 | -| MP | Media Protection | 8 | 12 | 20 | -| PE | Physical and Environmental Protection | 22 | 29 | 51 | -| PL | Planning | 8 | 3 | 11 | -| PM | Program Management | 32 | 5 | 37 | -| PS | Personnel Security | 9 | 8 | 17 | -| PT | PII Processing and Transparency | 8 | 13 | 21 | -| RA | Risk Assessment | 9 | 13 | 22 | -| SA | System and Services Acquisition | 17 | 91 | 108 | -| SC | System and Communications Protection | 47 | 92 | 139 | -| SI | System and Information Integrity | 22 | 80 | 102 | -| SR | Supply Chain Risk Management | 12 | 15 | 27 | -| | **합계** | **300** | **714** | **1,014** | - -> 아래 각 패밀리를 클릭하면 Base 컨트롤 전체 목록을 확인할 수 있습니다. -> 기준선 컬럼: L=LOW, M=MODERATE, H=HIGH, —=기준선 미포함 -> 컨트롤 번호에 갭이 있는 경우(예: AT-04 다음에 AT-06)가 있습니다. 이는 해당 번호의 컨트롤이 Withdrawn(폐지)된 결과이며, 누락이 아닙니다. - ---- - -
-AC — Access Control (23 base / 108 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| AC-01 | Policy and Procedures | L/M/H | — | -| AC-02 | Account Management | L/M/H | 12개 | -| AC-03 | Access Enforcement | L/M/H | 13개 | -| AC-04 | Information Flow Enforcement | M/H | 30개 | -| AC-05 | Separation of Duties | M/H | — | -| AC-06 | Least Privilege | M/H | 10개 | -| AC-07 | Unsuccessful Logon Attempts | L/M/H | 3개 | -| AC-08 | System Use Notification | L/M/H | — | -| AC-09 | Previous Logon Notification | — | 4개 | -| AC-10 | Concurrent Session Control | H | — | -| AC-11 | Device Lock | M/H | 1개 | -| AC-12 | Session Termination | M/H | 3개 | -| AC-14 | Permitted Actions Without Identification or Authentication | L/M/H | — | -| AC-16 | Security and Privacy Attributes | — | 10개 | -| AC-17 | Remote Access | L/M/H | 7개 | -| AC-18 | Wireless Access | L/M/H | 4개 | -| AC-19 | Access Control for Mobile Devices | L/M/H | 2개 | -| AC-20 | Use of External Systems | L/M/H | 5개 | -| AC-21 | Information Sharing | M/H | 2개 | -| AC-22 | Publicly Accessible Content | L/M/H | — | -| AC-23 | Data Mining Protection | — | — | -| AC-24 | Access Control Decisions | — | 2개 | -| AC-25 | Reference Monitor | — | — | - -
- -
-AT — Awareness and Training (5 base / 10 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| AT-01 | Policy and Procedures | L/M/H | — | -| AT-02 | Literacy Training and Awareness | L/M/H | 6개 | -| AT-03 | Role-based Training | L/M/H | 4개 | -| AT-04 | Training Records | L/M/H | — | -| AT-06 | Training Feedback | — | — | - -
- -
-AU — Audit and Accountability (15 base / 41 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| AU-01 | Policy and Procedures | L/M/H | — | -| AU-02 | Event Logging | L/M/H | — | -| AU-03 | Content of Audit Records | L/M/H | 2개 | -| AU-04 | Audit Log Storage Capacity | L/M/H | 1개 | -| AU-05 | Response to Audit Logging Process Failures | L/M/H | 5개 | -| AU-06 | Audit Record Review, Analysis, and Reporting | L/M/H | 8개 | -| AU-07 | Audit Record Reduction and Report Generation | M/H | 1개 | -| AU-08 | Time Stamps | L/M/H | — | -| AU-09 | Protection of Audit Information | L/M/H | 7개 | -| AU-10 | Non-repudiation | H | 4개 | -| AU-11 | Audit Record Retention | L/M/H | 1개 | -| AU-12 | Audit Record Generation | L/M/H | 4개 | -| AU-13 | Monitoring for Information Disclosure | — | 3개 | -| AU-14 | Session Audit | — | 2개 | -| AU-16 | Cross-organizational Audit Logging | — | 3개 | - -
- -
-CA — Assessment, Authorization, and Monitoring (8 base / 17 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| CA-01 | Policy and Procedures | L/M/H | — | -| CA-02 | Control Assessments | L/M/H | 3개 | -| CA-03 | Information Exchange | L/M/H | 2개 | -| CA-05 | Plan of Action and Milestones | L/M/H | 1개 | -| CA-06 | Authorization | L/M/H | 2개 | -| CA-07 | Continuous Monitoring | L/M/H | 5개 | -| CA-08 | Penetration Testing | H | 3개 | -| CA-09 | Internal System Connections | L/M/H | 1개 | - -
- -
-CM — Configuration Management (14 base / 42 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| CM-01 | Policy and Procedures | L/M/H | — | -| CM-02 | Baseline Configuration | L/M/H | 4개 | -| CM-03 | Configuration Change Control | M/H | 8개 | -| CM-04 | Impact Analyses | L/M/H | 2개 | -| CM-05 | Access Restrictions for Change | L/M/H | 4개 | -| CM-06 | Configuration Settings | L/M/H | 2개 | -| CM-07 | Least Functionality | L/M/H | 9개 | -| CM-08 | System Component Inventory | L/M/H | 8개 | -| CM-09 | Configuration Management Plan | M/H | 1개 | -| CM-10 | Software Usage Restrictions | L/M/H | 1개 | -| CM-11 | User-installed Software | L/M/H | 2개 | -| CM-12 | Information Location | M/H | 1개 | -| CM-13 | Data Action Mapping | — | — | -| CM-14 | Signed Components | — | — | - -
- -
-CP — Contingency Planning (12 base / 37 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| CP-01 | Policy and Procedures | L/M/H | — | -| CP-02 | Contingency Plan | L/M/H | 7개 | -| CP-03 | Contingency Training | L/M/H | 2개 | -| CP-04 | Contingency Plan Testing | L/M/H | 5개 | -| CP-06 | Alternate Storage Site | M/H | 3개 | -| CP-07 | Alternate Processing Site | M/H | 5개 | -| CP-08 | Telecommunications Services | M/H | 5개 | -| CP-09 | System Backup | L/M/H | 7개 | -| CP-10 | System Recovery and Reconstitution | L/M/H | 3개 | -| CP-11 | Alternate Communications Protocols | — | — | -| CP-12 | Safe Mode | — | — | -| CP-13 | Alternative Security Mechanisms | — | — | - -
- -
-IA — Identification and Authentication (13 base / 46 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| IA-01 | Policy and Procedures | L/M/H | — | -| IA-02 | Identification and Authentication (Organizational Users) | L/M/H | 8개 | -| IA-03 | Device Identification and Authentication | M/H | 3개 | -| IA-04 | Identifier Management | L/M/H | 6개 | -| IA-05 | Authenticator Management | L/M/H | 15개 | -| IA-06 | Authentication Feedback | L/M/H | — | -| IA-07 | Cryptographic Module Authentication | L/M/H | — | -| IA-08 | Identification and Authentication (Non-organizational Users) | L/M/H | 5개 | -| IA-09 | Service Identification and Authentication | — | — | -| IA-10 | Adaptive Authentication | — | — | -| IA-11 | Re-authentication | L/M/H | — | -| IA-12 | Identity Proofing | M/H | 6개 | -| IA-13 | Identity Providers and Authorization Servers | — | 3개 | - -
- -
-IR — Incident Response (9 base / 31 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| IR-01 | Policy and Procedures | L/M/H | — | -| IR-02 | Incident Response Training | L/M/H | 3개 | -| IR-03 | Incident Response Testing | M/H | 3개 | -| IR-04 | Incident Handling | L/M/H | 15개 | -| IR-05 | Incident Monitoring | L/M/H | 1개 | -| IR-06 | Incident Reporting | L/M/H | 3개 | -| IR-07 | Incident Response Assistance | L/M/H | 2개 | -| IR-08 | Incident Response Plan | L/M/H | 1개 | -| IR-09 | Information Spillage Response | — | 3개 | - -
- -
-MA — Maintenance (7 base / 21 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| MA-01 | Policy and Procedures | L/M/H | — | -| MA-02 | Controlled Maintenance | L/M/H | 1개 | -| MA-03 | Maintenance Tools | M/H | 6개 | -| MA-04 | Nonlocal Maintenance | L/M/H | 6개 | -| MA-05 | Maintenance Personnel | L/M/H | 5개 | -| MA-06 | Timely Maintenance | M/H | 3개 | -| MA-07 | Field Maintenance | — | — | - -
- -
-MP — Media Protection (8 base / 12 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| MP-01 | Policy and Procedures | L/M/H | — | -| MP-02 | Media Access | L/M/H | — | -| MP-03 | Media Marking | M/H | — | -| MP-04 | Media Storage | M/H | 1개 | -| MP-05 | Media Transport | M/H | 1개 | -| MP-06 | Media Sanitization | L/M/H | 5개 | -| MP-07 | Media Use | L/M/H | 1개 | -| MP-08 | Media Downgrading | — | 4개 | - -
- -
-PE — Physical and Environmental Protection (22 base / 29 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| PE-01 | Policy and Procedures | L/M/H | — | -| PE-02 | Physical Access Authorizations | L/M/H | 3개 | -| PE-03 | Physical Access Control | L/M/H | 7개 | -| PE-04 | Access Control for Transmission | M/H | — | -| PE-05 | Access Control for Output Devices | M/H | 1개 | -| PE-06 | Monitoring Physical Access | L/M/H | 4개 | -| PE-08 | Visitor Access Records | L/M/H | 2개 | -| PE-09 | Power Equipment and Cabling | M/H | 2개 | -| PE-10 | Emergency Shutoff | M/H | — | -| PE-11 | Emergency Power | M/H | 2개 | -| PE-12 | Emergency Lighting | L/M/H | 1개 | -| PE-13 | Fire Protection | L/M/H | 3개 | -| PE-14 | Environmental Controls | L/M/H | 2개 | -| PE-15 | Water Damage Protection | L/M/H | 1개 | -| PE-16 | Delivery and Removal | L/M/H | — | -| PE-17 | Alternate Work Site | M/H | — | -| PE-18 | Location of System Components | H | — | -| PE-19 | Information Leakage | — | 1개 | -| PE-20 | Asset Monitoring and Tracking | — | — | -| PE-21 | Electromagnetic Pulse Protection | — | — | -| PE-22 | Component Marking | — | — | -| PE-23 | Facility Location | — | — | - -
- -
-PL — Planning (8 base / 3 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| PL-01 | Policy and Procedures | L/M/H | — | -| PL-02 | System Security and Privacy Plans | L/M/H | — | -| PL-04 | Rules of Behavior | L/M/H | 1개 | -| PL-07 | Concept of Operations | — | — | -| PL-08 | Security and Privacy Architectures | M/H | 2개 | -| PL-09 | Central Management | — | — | -| PL-10 | Baseline Selection | L/M/H | — | -| PL-11 | Baseline Tailoring | L/M/H | — | - -
- -
-PM — Program Management (32 base / 5 enhancement) - -| 컨트롤 | 제목 | Enhancement | -|--------|------|-------------| -| PM-01 | Information Security Program Plan | — | -| PM-02 | Information Security Program Leadership Role | — | -| PM-03 | Information Security and Privacy Resources | — | -| PM-04 | Plan of Action and Milestones Process | — | -| PM-05 | System Inventory | 1개 | -| PM-06 | Measures of Performance | — | -| PM-07 | Enterprise Architecture | 1개 | -| PM-08 | Critical Infrastructure Plan | — | -| PM-09 | Risk Management Strategy | — | -| PM-10 | Authorization Process | — | -| PM-11 | Mission and Business Process Definition | — | -| PM-12 | Insider Threat Program | — | -| PM-13 | Security and Privacy Workforce | — | -| PM-14 | Testing, Training, and Monitoring | — | -| PM-15 | Security and Privacy Groups and Associations | — | -| PM-16 | Threat Awareness Program | 1개 | -| PM-17 | Protecting Controlled Unclassified Information on External Systems | — | -| PM-18 | Privacy Program Plan | — | -| PM-19 | Privacy Program Leadership Role | — | -| PM-20 | Dissemination of Privacy Program Information | 1개 | -| PM-21 | Accounting of Disclosures | — | -| PM-22 | Personally Identifiable Information Quality Management | — | -| PM-23 | Data Governance Body | — | -| PM-24 | Data Integrity Board | — | -| PM-25 | Minimization of Personally Identifiable Information Used in Testing, Training, and Research | — | -| PM-26 | Complaint Management | — | -| PM-27 | Privacy Reporting | — | -| PM-28 | Risk Framing | — | -| PM-29 | Risk Management Program Leadership Roles | — | -| PM-30 | Supply Chain Risk Management Strategy | 1개 | -| PM-31 | Continuous Monitoring Strategy | — | -| PM-32 | Purposing | — | - -
- -
-PS — Personnel Security (9 base / 8 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| PS-01 | Policy and Procedures | L/M/H | — | -| PS-02 | Position Risk Designation | L/M/H | — | -| PS-03 | Personnel Screening | L/M/H | 4개 | -| PS-04 | Personnel Termination | L/M/H | 2개 | -| PS-05 | Personnel Transfer | L/M/H | — | -| PS-06 | Access Agreements | L/M/H | 2개 | -| PS-07 | External Personnel Security | L/M/H | — | -| PS-08 | Personnel Sanctions | L/M/H | — | -| PS-09 | Position Descriptions | L/M/H | — | - -
- -
-PT — Personally Identifiable Information Processing and Transparency (8 base / 13 enhancement) - -| 컨트롤 | 제목 | Enhancement | -|--------|------|-------------| -| PT-01 | Policy and Procedures | — | -| PT-02 | Authority to Process Personally Identifiable Information | 2개 | -| PT-03 | Personally Identifiable Information Processing Purposes | 2개 | -| PT-04 | Consent | 3개 | -| PT-05 | Privacy Notice | 2개 | -| PT-06 | System of Records Notice | 2개 | -| PT-07 | Specific Categories of Personally Identifiable Information | 2개 | -| PT-08 | Computer Matching Requirements | — | - -
- -
-RA — Risk Assessment (9 base / 13 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| RA-01 | Policy and Procedures | L/M/H | — | -| RA-02 | Security Categorization | L/M/H | 1개 | -| RA-03 | Risk Assessment | L/M/H | 4개 | -| RA-05 | Vulnerability Monitoring and Scanning | L/M/H | 8개 | -| RA-06 | Technical Surveillance Countermeasures Survey | — | — | -| RA-07 | Risk Response | L/M/H | — | -| RA-08 | Privacy Impact Assessments | — | — | -| RA-09 | Criticality Analysis | M/H | — | -| RA-10 | Threat Hunting | — | — | - -
- -
-SA — System and Services Acquisition (17 base / 91 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| SA-01 | Policy and Procedures | L/M/H | — | -| SA-02 | Allocation of Resources | L/M/H | — | -| SA-03 | System Development Life Cycle | L/M/H | 3개 | -| SA-04 | Acquisition Process | L/M/H | 11개 | -| SA-05 | System Documentation | L/M/H | — | -| SA-08 | Security and Privacy Engineering Principles | L/M/H | 33개 | -| SA-09 | External System Services | L/M/H | 8개 | -| SA-10 | Developer Configuration Management | M/H | 7개 | -| SA-11 | Developer Testing and Evaluation | M/H | 9개 | -| SA-15 | Development Process, Standards, and Tools | M/H | 11개 | -| SA-16 | Developer-provided Training | H | — | -| SA-17 | Developer Security and Privacy Architecture and Design | H | 9개 | -| SA-20 | Customized Development of Critical Components | — | — | -| SA-21 | Developer Screening | H | — | -| SA-22 | Unsupported System Components | L/M/H | — | -| SA-23 | Specialization | — | — | -| SA-24 | Design For Cyber Resiliency | — | — | - -
- -
-SC — System and Communications Protection (47 base / 92 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| SC-01 | Policy and Procedures | L/M/H | — | -| SC-02 | Separation of System and User Functionality | M/H | 2개 | -| SC-03 | Security Function Isolation | H | 5개 | -| SC-04 | Information in Shared System Resources | M/H | 1개 | -| SC-05 | Denial-of-service Protection | L/M/H | 3개 | -| SC-06 | Resource Availability | — | — | -| SC-07 | Boundary Protection | L/M/H | 26개 | -| SC-08 | Transmission Confidentiality and Integrity | M/H | 5개 | -| SC-10 | Network Disconnect | M/H | — | -| SC-11 | Trusted Path | — | 1개 | -| SC-12 | Cryptographic Key Establishment and Management | L/M/H | 4개 | -| SC-13 | Cryptographic Protection | L/M/H | — | -| SC-15 | Collaborative Computing Devices and Applications | L/M/H | 3개 | -| SC-16 | Transmission of Security and Privacy Attributes | — | 3개 | -| SC-17 | Public Key Infrastructure Certificates | M/H | — | -| SC-18 | Mobile Code | M/H | 5개 | -| SC-20 | Secure Name/Address Resolution Service (Authoritative Source) | L/M/H | 1개 | -| SC-21 | Secure Name/Address Resolution Service (Recursive or Caching Resolver) | L/M/H | — | -| SC-22 | Architecture and Provisioning for Name/Address Resolution Service | L/M/H | — | -| SC-23 | Session Authenticity | M/H | 3개 | -| SC-24 | Fail in Known State | H | — | -| SC-25 | Thin Nodes | — | — | -| SC-26 | Decoys | — | — | -| SC-27 | Platform-independent Applications | — | — | -| SC-28 | Protection of Information at Rest | M/H | 3개 | -| SC-29 | Heterogeneity | — | 1개 | -| SC-30 | Concealment and Misdirection | — | 4개 | -| SC-31 | Covert Channel Analysis | — | 3개 | -| SC-32 | System Partitioning | — | 1개 | -| SC-34 | Non-modifiable Executable Programs | — | 2개 | -| SC-35 | External Malicious Code Identification | — | — | -| SC-36 | Distributed Processing and Storage | — | 2개 | -| SC-37 | Out-of-band Channels | — | 1개 | -| SC-38 | Operations Security | — | — | -| SC-39 | Process Isolation | L/M/H | 2개 | -| SC-40 | Wireless Link Protection | — | 4개 | -| SC-41 | Port and I/O Device Access | — | — | -| SC-42 | Sensor Capability and Data | — | 4개 | -| SC-43 | Usage Restrictions | — | — | -| SC-44 | Detonation Chambers | — | — | -| SC-45 | System Time Synchronization | — | 2개 | -| SC-46 | Cross Domain Policy Enforcement | — | — | -| SC-47 | Alternate Communications Paths | — | — | -| SC-48 | Sensor Relocation | — | 1개 | -| SC-49 | Hardware-enforced Separation and Policy Enforcement | — | — | -| SC-50 | Software-enforced Separation and Policy Enforcement | — | — | -| SC-51 | Hardware-based Protection | — | — | - -
- -
-SI — System and Information Integrity (22 base / 80 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| SI-01 | Policy and Procedures | L/M/H | — | -| SI-02 | Flaw Remediation | L/M/H | 6개 | -| SI-03 | Malicious Code Protection | L/M/H | 4개 | -| SI-04 | System Monitoring | L/M/H | 23개 | -| SI-05 | Security Alerts, Advisories, and Directives | L/M/H | 1개 | -| SI-06 | Security and Privacy Function Verification | H | 2개 | -| SI-07 | Software, Firmware, and Information Integrity | M/H | 13개 | -| SI-08 | Spam Protection | M/H | 2개 | -| SI-10 | Information Input Validation | M/H | 6개 | -| SI-11 | Error Handling | M/H | — | -| SI-12 | Information Management and Retention | L/M/H | 3개 | -| SI-13 | Predictable Failure Prevention | — | 4개 | -| SI-14 | Non-persistence | — | 3개 | -| SI-15 | Information Output Filtering | — | — | -| SI-16 | Memory Protection | M/H | — | -| SI-17 | Fail-safe Procedures | — | — | -| SI-18 | Personally Identifiable Information Quality Operations | — | 5개 | -| SI-19 | De-identification | — | 8개 | -| SI-20 | Tainting | — | — | -| SI-21 | Information Refresh | — | — | -| SI-22 | Information Diversity | — | — | -| SI-23 | Information Fragmentation | — | — | - -
- -
-SR — Supply Chain Risk Management (12 base / 15 enhancement) - -| 컨트롤 | 제목 | 기준선 | Enhancement | -|--------|------|--------|-------------| -| SR-01 | Policy and Procedures | L/M/H | — | -| SR-02 | Supply Chain Risk Management Plan | L/M/H | 1개 | -| SR-03 | Supply Chain Controls and Processes | L/M/H | 3개 | -| SR-04 | Provenance | — | 4개 | -| SR-05 | Acquisition Strategies, Tools, and Methods | L/M/H | 2개 | -| SR-06 | Supplier Assessments and Reviews | M/H | 1개 | -| SR-07 | Supply Chain Operations Security | — | — | -| SR-08 | Notification Agreements | L/M/H | — | -| SR-09 | Tamper Resistance and Detection | H | 1개 | -| SR-10 | Inspection of Systems or Components | L/M/H | — | -| SR-11 | Component Authenticity | L/M/H | 3개 | -| SR-12 | Component Disposal | L/M/H | — | - -
- ---- - -## 참고 자료 - -| 리소스 | URL | -|--------|-----| -| SP 800-53 Rev. 5 원문 | https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final | -| SP 800-53A (평가 절차) | https://csrc.nist.gov/pubs/sp/800/53/a/r5/final | -| SP 800-53B (기준선) | https://csrc.nist.gov/pubs/sp/800/53/b/upd1/final | -| OSCAL 컨트롤 카탈로그 (JSON) | https://github.com/usnistgov/oscal-content/tree/main/nist.gov/SP800-53/rev5 | -| CPRT (컨트롤 참조 도구) | https://csrc.nist.gov/projects/cprt | -| CSF 2.0 ↔ SP 800-53 매핑 | https://csrc.nist.gov/files/pubs/sp/800/53/r5/upd1/final/docs/csf-pf-to-sp800-53r5-mappings.xlsx | diff --git a/NIST/SP800-53/assessment.md b/NIST/SP800-53/assessment.md deleted file mode 100644 index 3f875aa..0000000 --- a/NIST/SP800-53/assessment.md +++ /dev/null @@ -1,163 +0,0 @@ -# SP 800-53A Rev. 5: 보안 및 프라이버시 컨트롤 평가 - -## 개요 - -| 항목 | 내용 | -|------|------| -| **정식 명칭** | Assessing Security and Privacy Controls in Information Systems and Organizations | -| **문서 번호** | SP 800-53A Revision 5 | -| **발행일** | 2022년 1월 25일 | -| **최신 업데이트** | Release 5.2.0 (2025년 8월, 3개 평가 절차 추가) | -| **분량** | 약 750 페이지 | -| **원문** | https://csrc.nist.gov/pubs/sp/800/53/a/r5/final | - -SP 800-53A는 SP 800-53에서 정의한 보안/프라이버시 컨트롤이 **올바르게 구현되고, 의도대로 동작하며, 원하는 성과를 달성하는지** 평가하기 위한 절차를 제공합니다. - ---- - -## 53 시리즈에서의 위치 - -``` -SP 800-53 → "어떤 컨트롤을 구현해야 하는가?" (카탈로그) -SP 800-53A → "컨트롤이 제대로 구현되었는가?" (평가) ← 이 문서 -SP 800-53B → "어떤 컨트롤을 적용해야 하는가?" (기준선) -``` - -SP 800-53의 **모든 컨트롤과 Enhancement에 대해 1:1로 평가 절차**가 존재합니다. - ---- - -## 3가지 평가 방법 (Assessment Methods) - -| 방법 | 정의 | 목적 | -|------|------|------| -| **Examine** (검토) | 평가 객체(정책서, 메커니즘, 활동)를 검토·분석·관찰하여 이해를 확보하고 증거를 수집하는 과정 | 문서가 존재하는지, 내용이 적절한지, 구현이 올바른지 확인 | -| **Interview** (면담) | 조직 내 개인 또는 그룹과 대화하여 이해를 확보하고 증거를 수집하는 과정 | 담당자가 역할을 이해하고 있는지, 절차를 따르고 있는지 확인 | -| **Test** (테스트) | 평가 객체(메커니즘, 활동)를 지정된 조건에서 실행하여 실제 상태와 기대 상태를 비교하는 과정 | 기술적 통제가 실제로 작동하는지 검증 | - ---- - -## 4가지 평가 객체 (Assessment Objects) - -평가 방법은 아래 4가지 유형의 객체에 적용됩니다: - -| 평가 객체 | 설명 | 예시 | 적용 가능한 방법 | -|-----------|------|------|----------------| -| **Specifications** (명세) | 문서 기반 산출물 | 정책, 절차서, 계획서, 요구사항 문서, 아키텍처 설계 | Examine | -| **Mechanisms** (메커니즘) | 하드웨어, 소프트웨어, 펌웨어 보호조치 | 방화벽, IDS, 암호화 모듈, 접근제어 시스템 | Examine, Test | -| **Activities** (활동) | 사람이 수행하는 보호 관련 행위 | 시스템 백업, 네트워크 모니터링, 비상 대응 훈련 | Examine, Test | -| **Individuals** (인력) | 명세·메커니즘·활동을 적용하는 사람 | 보안 담당자, 시스템 관리자, CISO | Interview | - ---- - -## 평가 수준: Depth & Coverage - -각 평가 방법에는 두 가지 속성이 있으며, **조직이 시스템 영향도와 리스크 허용수준에 따라 결정**합니다. - -### Depth (깊이) — 분석의 엄밀도 - -| 수준 | 설명 | -|------|------| -| **Basic** | 개괄적 수준의 검토. 문서의 존재 여부, 핵심 요소의 포함 여부 확인 | -| **Focused** | Basic을 넘어서는 심화 분석. 구현의 적절성과 효과성 검토 | -| **Comprehensive** | 철저하고 상세한 분석. 구현의 정확성, 완전성, 의도 충족 여부까지 검증 | - -### Coverage (범위) — 검토의 폭 - -| 수준 | 설명 | -|------|------| -| **Basic** | 제한된 수의 명세/메커니즘/활동/인력을 대상으로 | -| **Focused** | Basic보다 확대된 범위 | -| **Comprehensive** | 전체 대상을 포함하는 완전한 범위 | - -> 일반적으로 시스템 영향도가 높을수록(HIGH) Comprehensive에 가까운 수준이 기대됩니다. - ---- - -## 평가 절차의 구조 - -각 컨트롤에 대한 평가 절차는 다음 요소로 구성됩니다: - -### 1. Assessment Objective (평가 목표) - -SP 800-53의 컨트롤 Statement에서 도출됩니다. 컨트롤의 각 부분을 **개별 판단 항목(Determination Statement)**으로 세분화합니다. - -### 2. Determination Statement (판단 항목) - -컨트롤의 구체적인 요구사항 하나하나를 평가 가능한 단위로 분해한 것입니다. - -### 3. Potential Assessment Methods and Objects (잠재적 평가 방법 및 객체) - -각 판단 항목에 대해 Examine/Interview/Test 중 적용 가능한 방법과, 검토 대상 객체를 제시합니다. - -### 예시: AC-01 (Policy and Procedures) - -``` -컨트롤: AC-01 — 접근 제어 정책 및 절차 - -평가 목표: - 다음을 판단한다: - AC-01_ODP[01] — 접근 제어 정책을 배포할 인력/역할이 정의되었는가 - AC-01_ODP[02] — 접근 제어 절차를 배포할 인력/역할이 정의되었는가 - AC-01a.01[01] — 목적을 다루는 접근 제어 정책이 수립되었는가 - AC-01a.01[02] — 범위를 다루는 접근 제어 정책이 수립되었는가 - ... - -잠재적 평가 방법 및 객체: - Examine: 접근 제어 정책, 절차서, 시스템 보안 계획서, 프라이버시 계획서 - Interview: 접근 제어 책임자, 정보보안/프라이버시 책임자 -``` - -> 하나의 컨트롤(AC-01)이 여러 개의 판단 항목으로 세분화됩니다. 이 때문에 53A의 분량이 약 750 페이지에 달합니다. - ---- - -## 번호 체계 - -SP 800-53A는 53의 컨트롤 번호를 기반으로 **대괄호**를 사용하여 세분화합니다: - -| 표기 | 의미 | 예시 | -|------|------|------| -| `AC-17` | Base 컨트롤 | 원격 접근 | -| `AC-17a.[01]` | 컨트롤 항목의 세분화 | 원격 접근 정책의 첫 번째 판단 항목 | -| `AC-02(01)` | Enhancement | 자동화된 계정 관리 | -| `AC-02(01)[1]` | Enhancement의 세분화 | 자동화된 계정 관리의 첫 번째 판단 항목 | -| `AC-01_ODP[01]` | 조직 정의 파라미터 | 조직이 정의해야 할 값 | - -> **괄호 `()`** = Enhancement (SP 800-53에서 유래) -> **대괄호 `[]`** = 판단 항목 세분화 (SP 800-53A 고유) -> **`_ODP`** = 조직 정의 파라미터 (Organization-Defined Parameter) - ---- - -## RMF에서의 위치 - -SP 800-53A는 **RMF(Risk Management Framework, SP 800-37)의 Step 5 "Assess"**를 지원합니다: - -``` -RMF 7단계: - - 1. Prepare (준비) - 2. Categorize (분류) ← FIPS 199 - 3. Select (선택) ← SP 800-53B (기준선 선택) - 4. Implement (구현) ← SP 800-53 (컨트롤 구현) - 5. Assess (평가) ← SP 800-53A (이 문서) - 6. Authorize (인가) - 7. Monitor (모니터링) -``` - -평가 결과는: -- **인가(Authorize)** 결정의 근거가 됩니다 -- **지속적 모니터링(Continuous Monitoring)** 프로그램의 입력이 됩니다 -- 잔여 리스크를 판단하고 수용 여부를 결정하는 데 사용됩니다 - ---- - -## 참고 자료 - -| 리소스 | URL | -|--------|-----| -| SP 800-53A Rev. 5 원문 | https://csrc.nist.gov/pubs/sp/800/53/a/r5/final | -| SP 800-53 (컨트롤 카탈로그) | [SP 800-53 상세 문서](./README.md) | -| SP 800-37 (RMF) | https://csrc.nist.gov/pubs/sp/800/37/r2/final | -| OSCAL Assessment Plan 모델 | https://pages.nist.gov/OSCAL/concepts/layer/assessment/ | diff --git a/NIST/SP800-53/assessment/index.html b/NIST/SP800-53/assessment/index.html new file mode 100644 index 0000000..0c4960e --- /dev/null +++ b/NIST/SP800-53/assessment/index.html @@ -0,0 +1,2454 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SP 800-53A - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

SP 800-53A Rev. 5: 보안 및 프라이버시 컨트롤 평가

+

개요

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
정식 명칭Assessing Security and Privacy Controls in Information Systems and Organizations
문서 번호SP 800-53A Revision 5
발행일2022년 1월 25일
최신 업데이트Release 5.2.0 (2025년 8월, 3개 평가 절차 추가)
분량약 750 페이지
원문https://csrc.nist.gov/pubs/sp/800/53/a/r5/final
+

SP 800-53A는 SP 800-53에서 정의한 보안/프라이버시 컨트롤이 올바르게 구현되고, 의도대로 동작하며, 원하는 성과를 달성하는지 평가하기 위한 절차를 제공합니다.

+
+

53 시리즈에서의 위치

+
SP 800-53   →  "어떤 컨트롤을 구현해야 하는가?"  (카탈로그)
+SP 800-53A  →  "컨트롤이 제대로 구현되었는가?"    (평가) ← 이 문서
+SP 800-53B  →  "어떤 컨트롤을 적용해야 하는가?"  (기준선)
+
+

SP 800-53의 모든 컨트롤과 Enhancement에 대해 1:1로 평가 절차가 존재합니다.

+
+

3가지 평가 방법 (Assessment Methods)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
방법정의목적
Examine (검토)평가 객체(정책서, 메커니즘, 활동)를 검토·분석·관찰하여 이해를 확보하고 증거를 수집하는 과정문서가 존재하는지, 내용이 적절한지, 구현이 올바른지 확인
Interview (면담)조직 내 개인 또는 그룹과 대화하여 이해를 확보하고 증거를 수집하는 과정담당자가 역할을 이해하고 있는지, 절차를 따르고 있는지 확인
Test (테스트)평가 객체(메커니즘, 활동)를 지정된 조건에서 실행하여 실제 상태와 기대 상태를 비교하는 과정기술적 통제가 실제로 작동하는지 검증
+
+

4가지 평가 객체 (Assessment Objects)

+

평가 방법은 아래 4가지 유형의 객체에 적용됩니다:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
평가 객체설명예시적용 가능한 방법
Specifications (명세)문서 기반 산출물정책, 절차서, 계획서, 요구사항 문서, 아키텍처 설계Examine
Mechanisms (메커니즘)하드웨어, 소프트웨어, 펌웨어 보호조치방화벽, IDS, 암호화 모듈, 접근제어 시스템Examine, Test
Activities (활동)사람이 수행하는 보호 관련 행위시스템 백업, 네트워크 모니터링, 비상 대응 훈련Examine, Test
Individuals (인력)명세·메커니즘·활동을 적용하는 사람보안 담당자, 시스템 관리자, CISOInterview
+
+

평가 수준: Depth & Coverage

+

각 평가 방법에는 두 가지 속성이 있으며, 조직이 시스템 영향도와 리스크 허용수준에 따라 결정합니다.

+

Depth (깊이) — 분석의 엄밀도

+ + + + + + + + + + + + + + + + + + + + + +
수준설명
Basic개괄적 수준의 검토. 문서의 존재 여부, 핵심 요소의 포함 여부 확인
FocusedBasic을 넘어서는 심화 분석. 구현의 적절성과 효과성 검토
Comprehensive철저하고 상세한 분석. 구현의 정확성, 완전성, 의도 충족 여부까지 검증
+

Coverage (범위) — 검토의 폭

+ + + + + + + + + + + + + + + + + + + + + +
수준설명
Basic제한된 수의 명세/메커니즘/활동/인력을 대상으로
FocusedBasic보다 확대된 범위
Comprehensive전체 대상을 포함하는 완전한 범위
+
+

일반적으로 시스템 영향도가 높을수록(HIGH) Comprehensive에 가까운 수준이 기대됩니다.

+
+
+

평가 절차의 구조

+

각 컨트롤에 대한 평가 절차는 다음 요소로 구성됩니다:

+

1. Assessment Objective (평가 목표)

+

SP 800-53의 컨트롤 Statement에서 도출됩니다. 컨트롤의 각 부분을 개별 판단 항목(Determination Statement)으로 세분화합니다.

+

2. Determination Statement (판단 항목)

+

컨트롤의 구체적인 요구사항 하나하나를 평가 가능한 단위로 분해한 것입니다.

+

3. Potential Assessment Methods and Objects (잠재적 평가 방법 및 객체)

+

각 판단 항목에 대해 Examine/Interview/Test 중 적용 가능한 방법과, 검토 대상 객체를 제시합니다.

+

예시: AC-01 (Policy and Procedures)

+
컨트롤: AC-01 — 접근 제어 정책 및 절차
+
+평가 목표:
+  다음을 판단한다:
+  AC-01_ODP[01] — 접근 제어 정책을 배포할 인력/역할이 정의되었는가
+  AC-01_ODP[02] — 접근 제어 절차를 배포할 인력/역할이 정의되었는가
+  AC-01a.01[01] — 목적을 다루는 접근 제어 정책이 수립되었는가
+  AC-01a.01[02] — 범위를 다루는 접근 제어 정책이 수립되었는가
+  ...
+
+잠재적 평가 방법 및 객체:
+  Examine: 접근 제어 정책, 절차서, 시스템 보안 계획서, 프라이버시 계획서
+  Interview: 접근 제어 책임자, 정보보안/프라이버시 책임자
+
+
+

하나의 컨트롤(AC-01)이 여러 개의 판단 항목으로 세분화됩니다. 이 때문에 53A의 분량이 약 750 페이지에 달합니다.

+
+
+

번호 체계

+

SP 800-53A는 53의 컨트롤 번호를 기반으로 대괄호를 사용하여 세분화합니다:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
표기의미예시
AC-17Base 컨트롤원격 접근
AC-17a.[01]컨트롤 항목의 세분화원격 접근 정책의 첫 번째 판단 항목
AC-02(01)Enhancement자동화된 계정 관리
AC-02(01)[1]Enhancement의 세분화자동화된 계정 관리의 첫 번째 판단 항목
AC-01_ODP[01]조직 정의 파라미터조직이 정의해야 할 값
+
+

괄호 () = Enhancement (SP 800-53에서 유래)
+대괄호 [] = 판단 항목 세분화 (SP 800-53A 고유)
+_ODP = 조직 정의 파라미터 (Organization-Defined Parameter)

+
+
+

RMF에서의 위치

+

SP 800-53A는 RMF(Risk Management Framework, SP 800-37)의 Step 5 "Assess"를 지원합니다:

+
RMF 7단계:
+
+  1. Prepare (준비)
+  2. Categorize (분류)      ← FIPS 199
+  3. Select (선택)          ← SP 800-53B (기준선 선택)
+  4. Implement (구현)       ← SP 800-53 (컨트롤 구현)
+  5. Assess (평가)          ← SP 800-53A (이 문서)
+  6. Authorize (인가)
+  7. Monitor (모니터링)
+
+

평가 결과는: +- 인가(Authorize) 결정의 근거가 됩니다 +- 지속적 모니터링(Continuous Monitoring) 프로그램의 입력이 됩니다 +- 잔여 리스크를 판단하고 수용 여부를 결정하는 데 사용됩니다

+
+

참고 자료

+ + + + + + + + + + + + + + + + + + + + + + + + + +
리소스URL
SP 800-53A Rev. 5 원문https://csrc.nist.gov/pubs/sp/800/53/a/r5/final
SP 800-53 (컨트롤 카탈로그)SP 800-53 상세 문서
SP 800-37 (RMF)https://csrc.nist.gov/pubs/sp/800/37/r2/final
OSCAL Assessment Plan 모델https://pages.nist.gov/OSCAL/concepts/layer/assessment/
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/NIST/SP800-53/high.md b/NIST/SP800-53/high.md deleted file mode 100644 index a22a7d7..0000000 --- a/NIST/SP800-53/high.md +++ /dev/null @@ -1,566 +0,0 @@ -# SP 800-53 HIGH 체크리스트 - -## 개요 - -| 항목 | 내용 | -|------|------| -| **기준선** | HIGH (높음) | -| **영향도** | 치명적/재앙적 피해 | -| **적용 대상** | 기밀성, 무결성, 가용성의 손실이 조직 운영, 자산, 개인에게 **치명적이거나 재앙적인** 부정적 영향을 미치는 시스템 | -| **총 컨트롤 수** | 370개 (base 188개 + enhancement 182개) | -| **적용 패밀리** | 18개 (PM, PT 제외) | -| **근거** | SP 800-53B, FIPS 199 | - -> HIGH 기준선은 MODERATE(287개)를 **완전히 포함**하며, 83개가 추가된 총 370개입니다. HIGH만 충족하면 LOW와 MODERATE는 별도로 충족할 필요가 없습니다. (LOW ⊂ MODERATE ⊂ HIGH) - ---- - -## 패밀리별 컨트롤 - -### 한눈에 보기 - -| 패밀리 | 컨트롤 수 | -|--------|----------| -| AC — Access Control | 46개 | -| AT — Awareness and Training | 6개 | -| AU — Audit and Accountability | 25개 | -| CA — Assessment, Authorization, and Monitoring | 14개 | -| CM — Configuration Management | 32개 | -| CP — Contingency Planning | 35개 | -| IA — Identification and Authentication | 26개 | -| IR — Incident Response | 18개 | -| MA — Maintenance | 12개 | -| MP — Media Protection | 10개 | -| PE — Physical and Environmental Protection | 25개 | -| PL — Planning | 7개 | -| PS — Personnel Security | 10개 | -| RA — Risk Assessment | 11개 | -| SA — System and Services Acquisition | 21개 | -| SC — System and Communications Protection | 30개 | -| SI — System and Information Integrity | 28개 | -| SR — Supply Chain Risk Management | 14개 | -| **합계** | **370개** | - ---- - -
-AC — Access Control (46개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **AC-01** | **Policy and Procedures** | **Base** | -| **AC-02** | **Account Management** | **Base** | -| ↳ AC-02(01) | Automated System Account Management | Enhancement | -| ↳ AC-02(02) | Automated Temporary and Emergency Account Management | Enhancement | -| ↳ AC-02(03) | Disable Accounts | Enhancement | -| ↳ AC-02(04) | Automated Audit Actions | Enhancement | -| ↳ AC-02(05) | Inactivity Logout | Enhancement | -| ↳ AC-02(11) | Usage Conditions | Enhancement | -| ↳ AC-02(12) | Account Monitoring for Atypical Usage | Enhancement | -| ↳ AC-02(13) | Disable Accounts for High-risk Individuals | Enhancement | -| **AC-03** | **Access Enforcement** | **Base** | -| **AC-04** | **Information Flow Enforcement** | **Base** | -| ↳ AC-04(04) | Flow Control of Encrypted Information | Enhancement | -| **AC-05** | **Separation of Duties** | **Base** | -| **AC-06** | **Least Privilege** | **Base** | -| ↳ AC-06(01) | Authorize Access to Security Functions | Enhancement | -| ↳ AC-06(02) | Non-privileged Access for Nonsecurity Functions | Enhancement | -| ↳ AC-06(03) | Network Access to Privileged Commands | Enhancement | -| ↳ AC-06(05) | Privileged Accounts | Enhancement | -| ↳ AC-06(07) | Review of User Privileges | Enhancement | -| ↳ AC-06(09) | Log Use of Privileged Functions | Enhancement | -| ↳ AC-06(10) | Prohibit Non-privileged Users from Executing Privileged Functions | Enhancement | -| **AC-07** | **Unsuccessful Logon Attempts** | **Base** | -| **AC-08** | **System Use Notification** | **Base** | -| **AC-10** | **Concurrent Session Control** | **Base** | -| **AC-11** | **Device Lock** | **Base** | -| ↳ AC-11(01) | Pattern-hiding Displays | Enhancement | -| **AC-12** | **Session Termination** | **Base** | -| **AC-14** | **Permitted Actions Without Identification or Authentication** | **Base** | -| **AC-17** | **Remote Access** | **Base** | -| ↳ AC-17(01) | Monitoring and Control | Enhancement | -| ↳ AC-17(02) | Protection of Confidentiality and Integrity Using Encryption | Enhancement | -| ↳ AC-17(03) | Managed Access Control Points | Enhancement | -| ↳ AC-17(04) | Privileged Commands and Access | Enhancement | -| **AC-18** | **Wireless Access** | **Base** | -| ↳ AC-18(01) | Authentication and Encryption | Enhancement | -| ↳ AC-18(03) | Disable Wireless Networking | Enhancement | -| ↳ AC-18(04) | Restrict Configurations by Users | Enhancement | -| ↳ AC-18(05) | Antennas and Transmission Power Levels | Enhancement | -| **AC-19** | **Access Control for Mobile Devices** | **Base** | -| ↳ AC-19(05) | Full Device or Container-based Encryption | Enhancement | -| **AC-20** | **Use of External Systems** | **Base** | -| ↳ AC-20(01) | Limits on Authorized Use | Enhancement | -| ↳ AC-20(02) | Portable Storage Devices — Restricted Use | Enhancement | -| **AC-21** | **Information Sharing** | **Base** | -| **AC-22** | **Publicly Accessible Content** | **Base** | - -
- -
-AT — Awareness and Training (6개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **AT-01** | **Policy and Procedures** | **Base** | -| **AT-02** | **Literacy Training and Awareness** | **Base** | -| ↳ AT-02(02) | Insider Threat | Enhancement | -| ↳ AT-02(03) | Social Engineering and Mining | Enhancement | -| **AT-03** | **Role-based Training** | **Base** | -| **AT-04** | **Training Records** | **Base** | - -
- -
-AU — Audit and Accountability (25개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **AU-01** | **Policy and Procedures** | **Base** | -| **AU-02** | **Event Logging** | **Base** | -| **AU-03** | **Content of Audit Records** | **Base** | -| ↳ AU-03(01) | Additional Audit Information | Enhancement | -| **AU-04** | **Audit Log Storage Capacity** | **Base** | -| **AU-05** | **Response to Audit Logging Process Failures** | **Base** | -| ↳ AU-05(01) | Storage Capacity Warning | Enhancement | -| ↳ AU-05(02) | Real-time Alerts | Enhancement | -| **AU-06** | **Audit Record Review, Analysis, and Reporting** | **Base** | -| ↳ AU-06(01) | Automated Process Integration | Enhancement | -| ↳ AU-06(03) | Correlate Audit Record Repositories | Enhancement | -| ↳ AU-06(05) | Integrated Analysis of Audit Records | Enhancement | -| ↳ AU-06(06) | Correlation with Physical Monitoring | Enhancement | -| **AU-07** | **Audit Record Reduction and Report Generation** | **Base** | -| ↳ AU-07(01) | Automatic Processing | Enhancement | -| **AU-08** | **Time Stamps** | **Base** | -| **AU-09** | **Protection of Audit Information** | **Base** | -| ↳ AU-09(02) | Store on Separate Physical Systems or Components | Enhancement | -| ↳ AU-09(03) | Cryptographic Protection | Enhancement | -| ↳ AU-09(04) | Access by Subset of Privileged Users | Enhancement | -| **AU-10** | **Non-repudiation** | **Base** | -| **AU-11** | **Audit Record Retention** | **Base** | -| **AU-12** | **Audit Record Generation** | **Base** | -| ↳ AU-12(01) | System-wide and Time-correlated Audit Trail | Enhancement | -| ↳ AU-12(03) | Changes by Authorized Individuals | Enhancement | - -
- -
-CA — Assessment, Authorization, and Monitoring (14개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **CA-01** | **Policy and Procedures** | **Base** | -| **CA-02** | **Control Assessments** | **Base** | -| ↳ CA-02(01) | Independent Assessors | Enhancement | -| ↳ CA-02(02) | Specialized Assessments | Enhancement | -| **CA-03** | **Information Exchange** | **Base** | -| ↳ CA-03(06) | Transfer Authorizations | Enhancement | -| **CA-05** | **Plan of Action and Milestones** | **Base** | -| **CA-06** | **Authorization** | **Base** | -| **CA-07** | **Continuous Monitoring** | **Base** | -| ↳ CA-07(01) | Independent Assessment | Enhancement | -| ↳ CA-07(04) | Risk Monitoring | Enhancement | -| **CA-08** | **Penetration Testing** | **Base** | -| ↳ CA-08(01) | Independent Penetration Testing Agent or Team | Enhancement | -| **CA-09** | **Internal System Connections** | **Base** | - -
- -
-CM — Configuration Management (32개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **CM-01** | **Policy and Procedures** | **Base** | -| **CM-02** | **Baseline Configuration** | **Base** | -| ↳ CM-02(02) | Automation Support for Accuracy and Currency | Enhancement | -| ↳ CM-02(03) | Retention of Previous Configurations | Enhancement | -| ↳ CM-02(07) | Configure Systems and Components for High-risk Areas | Enhancement | -| **CM-03** | **Configuration Change Control** | **Base** | -| ↳ CM-03(01) | Automated Documentation, Notification, and Prohibition of Changes | Enhancement | -| ↳ CM-03(02) | Testing, Validation, and Documentation of Changes | Enhancement | -| ↳ CM-03(04) | Security and Privacy Representatives | Enhancement | -| ↳ CM-03(06) | Cryptography Management | Enhancement | -| **CM-04** | **Impact Analyses** | **Base** | -| ↳ CM-04(01) | Separate Test Environments | Enhancement | -| ↳ CM-04(02) | Verification of Controls | Enhancement | -| **CM-05** | **Access Restrictions for Change** | **Base** | -| ↳ CM-05(01) | Automated Access Enforcement and Audit Records | Enhancement | -| **CM-06** | **Configuration Settings** | **Base** | -| ↳ CM-06(01) | Automated Management, Application, and Verification | Enhancement | -| ↳ CM-06(02) | Respond to Unauthorized Changes | Enhancement | -| **CM-07** | **Least Functionality** | **Base** | -| ↳ CM-07(01) | Periodic Review | Enhancement | -| ↳ CM-07(02) | Prevent Program Execution | Enhancement | -| ↳ CM-07(05) | Authorized Software — Allow-by-exception | Enhancement | -| **CM-08** | **System Component Inventory** | **Base** | -| ↳ CM-08(01) | Updates During Installation and Removal | Enhancement | -| ↳ CM-08(02) | Automated Maintenance | Enhancement | -| ↳ CM-08(03) | Automated Unauthorized Component Detection | Enhancement | -| ↳ CM-08(04) | Accountability Information | Enhancement | -| **CM-09** | **Configuration Management Plan** | **Base** | -| **CM-10** | **Software Usage Restrictions** | **Base** | -| **CM-11** | **User-installed Software** | **Base** | -| **CM-12** | **Information Location** | **Base** | -| ↳ CM-12(01) | Automated Tools to Support Information Location | Enhancement | - -
- -
-CP — Contingency Planning (35개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **CP-01** | **Policy and Procedures** | **Base** | -| **CP-02** | **Contingency Plan** | **Base** | -| ↳ CP-02(01) | Coordinate with Related Plans | Enhancement | -| ↳ CP-02(02) | Capacity Planning | Enhancement | -| ↳ CP-02(03) | Resume Mission and Business Functions | Enhancement | -| ↳ CP-02(05) | Continue Mission and Business Functions | Enhancement | -| ↳ CP-02(08) | Identify Critical Assets | Enhancement | -| **CP-03** | **Contingency Training** | **Base** | -| ↳ CP-03(01) | Simulated Events | Enhancement | -| **CP-04** | **Contingency Plan Testing** | **Base** | -| ↳ CP-04(01) | Coordinate with Related Plans | Enhancement | -| ↳ CP-04(02) | Alternate Processing Site | Enhancement | -| **CP-06** | **Alternate Storage Site** | **Base** | -| ↳ CP-06(01) | Separation from Primary Site | Enhancement | -| ↳ CP-06(02) | Recovery Time and Recovery Point Objectives | Enhancement | -| ↳ CP-06(03) | Accessibility | Enhancement | -| **CP-07** | **Alternate Processing Site** | **Base** | -| ↳ CP-07(01) | Separation from Primary Site | Enhancement | -| ↳ CP-07(02) | Accessibility | Enhancement | -| ↳ CP-07(03) | Priority of Service | Enhancement | -| ↳ CP-07(04) | Preparation for Use | Enhancement | -| **CP-08** | **Telecommunications Services** | **Base** | -| ↳ CP-08(01) | Priority of Service Provisions | Enhancement | -| ↳ CP-08(02) | Single Points of Failure | Enhancement | -| ↳ CP-08(03) | Separation of Primary and Alternate Providers | Enhancement | -| ↳ CP-08(04) | Provider Contingency Plan | Enhancement | -| **CP-09** | **System Backup** | **Base** | -| ↳ CP-09(01) | Testing for Reliability and Integrity | Enhancement | -| ↳ CP-09(02) | Test Restoration Using Sampling | Enhancement | -| ↳ CP-09(03) | Separate Storage for Critical Information | Enhancement | -| ↳ CP-09(05) | Transfer to Alternate Storage Site | Enhancement | -| ↳ CP-09(08) | Cryptographic Protection | Enhancement | -| **CP-10** | **System Recovery and Reconstitution** | **Base** | -| ↳ CP-10(02) | Transaction Recovery | Enhancement | -| ↳ CP-10(04) | Restore Within Time Period | Enhancement | - -
- -
-IA — Identification and Authentication (26개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **IA-01** | **Policy and Procedures** | **Base** | -| **IA-02** | **Identification and Authentication (Organizational Users)** | **Base** | -| ↳ IA-02(01) | Multi-factor Authentication to Privileged Accounts | Enhancement | -| ↳ IA-02(02) | Multi-factor Authentication to Non-privileged Accounts | Enhancement | -| ↳ IA-02(05) | Individual Authentication with Group Authentication | Enhancement | -| ↳ IA-02(08) | Access to Accounts — Replay Resistant | Enhancement | -| ↳ IA-02(12) | Acceptance of PIV Credentials | Enhancement | -| **IA-03** | **Device Identification and Authentication** | **Base** | -| **IA-04** | **Identifier Management** | **Base** | -| ↳ IA-04(04) | Identify User Status | Enhancement | -| **IA-05** | **Authenticator Management** | **Base** | -| ↳ IA-05(01) | Password-based Authentication | Enhancement | -| ↳ IA-05(02) | Public Key-based Authentication | Enhancement | -| ↳ IA-05(06) | Protection of Authenticators | Enhancement | -| **IA-06** | **Authentication Feedback** | **Base** | -| **IA-07** | **Cryptographic Module Authentication** | **Base** | -| **IA-08** | **Identification and Authentication (Non-organizational Users)** | **Base** | -| ↳ IA-08(01) | Acceptance of PIV Credentials from Other Agencies | Enhancement | -| ↳ IA-08(02) | Acceptance of External Authenticators | Enhancement | -| ↳ IA-08(04) | Use of Defined Profiles | Enhancement | -| **IA-11** | **Re-authentication** | **Base** | -| **IA-12** | **Identity Proofing** | **Base** | -| ↳ IA-12(02) | Identity Evidence | Enhancement | -| ↳ IA-12(03) | Identity Evidence Validation and Verification | Enhancement | -| ↳ IA-12(04) | In-person Validation and Verification | Enhancement | -| ↳ IA-12(05) | Address Confirmation | Enhancement | - -
- -
-IR — Incident Response (18개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **IR-01** | **Policy and Procedures** | **Base** | -| **IR-02** | **Incident Response Training** | **Base** | -| ↳ IR-02(01) | Simulated Events | Enhancement | -| ↳ IR-02(02) | Automated Training Environments | Enhancement | -| **IR-03** | **Incident Response Testing** | **Base** | -| ↳ IR-03(02) | Coordination with Related Plans | Enhancement | -| **IR-04** | **Incident Handling** | **Base** | -| ↳ IR-04(01) | Automated Incident Handling Processes | Enhancement | -| ↳ IR-04(04) | Information Correlation | Enhancement | -| ↳ IR-04(11) | Integrated Incident Response Team | Enhancement | -| **IR-05** | **Incident Monitoring** | **Base** | -| ↳ IR-05(01) | Automated Tracking, Data Collection, and Analysis | Enhancement | -| **IR-06** | **Incident Reporting** | **Base** | -| ↳ IR-06(01) | Automated Reporting | Enhancement | -| ↳ IR-06(03) | Supply Chain Coordination | Enhancement | -| **IR-07** | **Incident Response Assistance** | **Base** | -| ↳ IR-07(01) | Automation Support for Availability of Information and Support | Enhancement | -| **IR-08** | **Incident Response Plan** | **Base** | - -
- -
-MA — Maintenance (12개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **MA-01** | **Policy and Procedures** | **Base** | -| **MA-02** | **Controlled Maintenance** | **Base** | -| ↳ MA-02(02) | Automated Maintenance Activities | Enhancement | -| **MA-03** | **Maintenance Tools** | **Base** | -| ↳ MA-03(01) | Inspect Tools | Enhancement | -| ↳ MA-03(02) | Inspect Media | Enhancement | -| ↳ MA-03(03) | Prevent Unauthorized Removal | Enhancement | -| **MA-04** | **Nonlocal Maintenance** | **Base** | -| ↳ MA-04(03) | Comparable Security and Sanitization | Enhancement | -| **MA-05** | **Maintenance Personnel** | **Base** | -| ↳ MA-05(01) | Individuals Without Appropriate Access | Enhancement | -| **MA-06** | **Timely Maintenance** | **Base** | - -
- -
-MP — Media Protection (10개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **MP-01** | **Policy and Procedures** | **Base** | -| **MP-02** | **Media Access** | **Base** | -| **MP-03** | **Media Marking** | **Base** | -| **MP-04** | **Media Storage** | **Base** | -| **MP-05** | **Media Transport** | **Base** | -| **MP-06** | **Media Sanitization** | **Base** | -| ↳ MP-06(01) | Review, Approve, Track, Document, and Verify | Enhancement | -| ↳ MP-06(02) | Equipment Testing | Enhancement | -| ↳ MP-06(03) | Nondestructive Techniques | Enhancement | -| **MP-07** | **Media Use** | **Base** | - -
- -
-PE — Physical and Environmental Protection (25개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **PE-01** | **Policy and Procedures** | **Base** | -| **PE-02** | **Physical Access Authorizations** | **Base** | -| **PE-03** | **Physical Access Control** | **Base** | -| ↳ PE-03(01) | System Access | Enhancement | -| **PE-04** | **Access Control for Transmission** | **Base** | -| **PE-05** | **Access Control for Output Devices** | **Base** | -| **PE-06** | **Monitoring Physical Access** | **Base** | -| ↳ PE-06(01) | Intrusion Alarms and Surveillance Equipment | Enhancement | -| ↳ PE-06(04) | Monitoring Physical Access to Systems | Enhancement | -| **PE-08** | **Visitor Access Records** | **Base** | -| ↳ PE-08(01) | Automated Records Maintenance and Review | Enhancement | -| **PE-09** | **Power Equipment and Cabling** | **Base** | -| **PE-10** | **Emergency Shutoff** | **Base** | -| **PE-11** | **Emergency Power** | **Base** | -| ↳ PE-11(01) | Alternate Power Supply — Minimal Operational Capability | Enhancement | -| **PE-12** | **Emergency Lighting** | **Base** | -| **PE-13** | **Fire Protection** | **Base** | -| ↳ PE-13(01) | Detection Systems — Automatic Activation and Notification | Enhancement | -| ↳ PE-13(02) | Suppression Systems — Automatic Activation and Notification | Enhancement | -| **PE-14** | **Environmental Controls** | **Base** | -| **PE-15** | **Water Damage Protection** | **Base** | -| ↳ PE-15(01) | Automation Support | Enhancement | -| **PE-16** | **Delivery and Removal** | **Base** | -| **PE-17** | **Alternate Work Site** | **Base** | -| **PE-18** | **Location of System Components** | **Base** | - -
- -
-PL — Planning (7개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **PL-01** | **Policy and Procedures** | **Base** | -| **PL-02** | **System Security and Privacy Plans** | **Base** | -| **PL-04** | **Rules of Behavior** | **Base** | -| ↳ PL-04(01) | Social Media and External Site/Application Usage Restrictions | Enhancement | -| **PL-08** | **Security and Privacy Architectures** | **Base** | -| **PL-10** | **Baseline Selection** | **Base** | -| **PL-11** | **Baseline Tailoring** | **Base** | - -
- -
-PS — Personnel Security (10개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **PS-01** | **Policy and Procedures** | **Base** | -| **PS-02** | **Position Risk Designation** | **Base** | -| **PS-03** | **Personnel Screening** | **Base** | -| **PS-04** | **Personnel Termination** | **Base** | -| ↳ PS-04(02) | Automated Actions | Enhancement | -| **PS-05** | **Personnel Transfer** | **Base** | -| **PS-06** | **Access Agreements** | **Base** | -| **PS-07** | **External Personnel Security** | **Base** | -| **PS-08** | **Personnel Sanctions** | **Base** | -| **PS-09** | **Position Descriptions** | **Base** | - -
- -
-RA — Risk Assessment (11개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **RA-01** | **Policy and Procedures** | **Base** | -| **RA-02** | **Security Categorization** | **Base** | -| **RA-03** | **Risk Assessment** | **Base** | -| ↳ RA-03(01) | Supply Chain Risk Assessment | Enhancement | -| **RA-05** | **Vulnerability Monitoring and Scanning** | **Base** | -| ↳ RA-05(02) | Update Vulnerabilities to Be Scanned | Enhancement | -| ↳ RA-05(04) | Discoverable Information | Enhancement | -| ↳ RA-05(05) | Privileged Access | Enhancement | -| ↳ RA-05(11) | Public Disclosure Program | Enhancement | -| **RA-07** | **Risk Response** | **Base** | -| **RA-09** | **Criticality Analysis** | **Base** | - -
- -
-SA — System and Services Acquisition (21개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SA-01** | **Policy and Procedures** | **Base** | -| **SA-02** | **Allocation of Resources** | **Base** | -| **SA-03** | **System Development Life Cycle** | **Base** | -| **SA-04** | **Acquisition Process** | **Base** | -| ↳ SA-04(01) | Functional Properties of Controls | Enhancement | -| ↳ SA-04(02) | Design and Implementation Information for Controls | Enhancement | -| ↳ SA-04(05) | System, Component, and Service Configurations | Enhancement | -| ↳ SA-04(09) | Functions, Ports, Protocols, and Services in Use | Enhancement | -| ↳ SA-04(10) | Use of Approved PIV Products | Enhancement | -| **SA-05** | **System Documentation** | **Base** | -| **SA-08** | **Security and Privacy Engineering Principles** | **Base** | -| **SA-09** | **External System Services** | **Base** | -| ↳ SA-09(02) | Identification of Functions, Ports, Protocols, and Services | Enhancement | -| **SA-10** | **Developer Configuration Management** | **Base** | -| **SA-11** | **Developer Testing and Evaluation** | **Base** | -| **SA-15** | **Development Process, Standards, and Tools** | **Base** | -| ↳ SA-15(03) | Criticality Analysis | Enhancement | -| **SA-16** | **Developer-provided Training** | **Base** | -| **SA-17** | **Developer Security and Privacy Architecture and Design** | **Base** | -| **SA-21** | **Developer Screening** | **Base** | -| **SA-22** | **Unsupported System Components** | **Base** | - -
- -
-SC — System and Communications Protection (30개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SC-01** | **Policy and Procedures** | **Base** | -| **SC-02** | **Separation of System and User Functionality** | **Base** | -| **SC-03** | **Security Function Isolation** | **Base** | -| **SC-04** | **Information in Shared System Resources** | **Base** | -| **SC-05** | **Denial-of-service Protection** | **Base** | -| **SC-07** | **Boundary Protection** | **Base** | -| ↳ SC-07(03) | Access Points | Enhancement | -| ↳ SC-07(04) | External Telecommunications Services | Enhancement | -| ↳ SC-07(05) | Deny by Default — Allow by Exception | Enhancement | -| ↳ SC-07(07) | Split Tunneling for Remote Devices | Enhancement | -| ↳ SC-07(08) | Route Traffic to Authenticated Proxy Servers | Enhancement | -| ↳ SC-07(18) | Fail Secure | Enhancement | -| ↳ SC-07(21) | Isolation of System Components | Enhancement | -| **SC-08** | **Transmission Confidentiality and Integrity** | **Base** | -| ↳ SC-08(01) | Cryptographic Protection | Enhancement | -| **SC-10** | **Network Disconnect** | **Base** | -| **SC-12** | **Cryptographic Key Establishment and Management** | **Base** | -| ↳ SC-12(01) | Availability | Enhancement | -| **SC-13** | **Cryptographic Protection** | **Base** | -| **SC-15** | **Collaborative Computing Devices and Applications** | **Base** | -| **SC-17** | **Public Key Infrastructure Certificates** | **Base** | -| **SC-18** | **Mobile Code** | **Base** | -| **SC-20** | **Secure Name/Address Resolution Service (Authoritative Source)** | **Base** | -| **SC-21** | **Secure Name/Address Resolution Service (Recursive or Caching Resolver)** | **Base** | -| **SC-22** | **Architecture and Provisioning for Name/Address Resolution Service** | **Base** | -| **SC-23** | **Session Authenticity** | **Base** | -| **SC-24** | **Fail in Known State** | **Base** | -| **SC-28** | **Protection of Information at Rest** | **Base** | -| ↳ SC-28(01) | Cryptographic Protection | Enhancement | -| **SC-39** | **Process Isolation** | **Base** | - -
- -
-SI — System and Information Integrity (28개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SI-01** | **Policy and Procedures** | **Base** | -| **SI-02** | **Flaw Remediation** | **Base** | -| ↳ SI-02(02) | Automated Flaw Remediation Status | Enhancement | -| **SI-03** | **Malicious Code Protection** | **Base** | -| **SI-04** | **System Monitoring** | **Base** | -| ↳ SI-04(02) | Automated Tools and Mechanisms for Real-time Analysis | Enhancement | -| ↳ SI-04(04) | Inbound and Outbound Communications Traffic | Enhancement | -| ↳ SI-04(05) | System-generated Alerts | Enhancement | -| ↳ SI-04(10) | Visibility of Encrypted Communications | Enhancement | -| ↳ SI-04(12) | Automated Organization-generated Alerts | Enhancement | -| ↳ SI-04(14) | Wireless Intrusion Detection | Enhancement | -| ↳ SI-04(20) | Privileged Users | Enhancement | -| ↳ SI-04(22) | Unauthorized Network Services | Enhancement | -| **SI-05** | **Security Alerts, Advisories, and Directives** | **Base** | -| ↳ SI-05(01) | Automated Alerts and Advisories | Enhancement | -| **SI-06** | **Security and Privacy Function Verification** | **Base** | -| **SI-07** | **Software, Firmware, and Information Integrity** | **Base** | -| ↳ SI-07(01) | Integrity Checks | Enhancement | -| ↳ SI-07(02) | Automated Notifications of Integrity Violations | Enhancement | -| ↳ SI-07(05) | Automated Response to Integrity Violations | Enhancement | -| ↳ SI-07(07) | Integration of Detection and Response | Enhancement | -| ↳ SI-07(15) | Code Authentication | Enhancement | -| **SI-08** | **Spam Protection** | **Base** | -| ↳ SI-08(02) | Automatic Updates | Enhancement | -| **SI-10** | **Information Input Validation** | **Base** | -| **SI-11** | **Error Handling** | **Base** | -| **SI-12** | **Information Management and Retention** | **Base** | -| **SI-16** | **Memory Protection** | **Base** | - -
- -
-SR — Supply Chain Risk Management (14개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SR-01** | **Policy and Procedures** | **Base** | -| **SR-02** | **Supply Chain Risk Management Plan** | **Base** | -| ↳ SR-02(01) | Establish SCRM Team | Enhancement | -| **SR-03** | **Supply Chain Controls and Processes** | **Base** | -| **SR-05** | **Acquisition Strategies, Tools, and Methods** | **Base** | -| **SR-06** | **Supplier Assessments and Reviews** | **Base** | -| **SR-08** | **Notification Agreements** | **Base** | -| **SR-09** | **Tamper Resistance and Detection** | **Base** | -| ↳ SR-09(01) | Multiple Stages of System Development Life Cycle | Enhancement | -| **SR-10** | **Inspection of Systems or Components** | **Base** | -| **SR-11** | **Component Authenticity** | **Base** | -| ↳ SR-11(01) | Anti-counterfeit Training | Enhancement | -| ↳ SR-11(02) | Configuration Control for Component Service and Repair | Enhancement | -| **SR-12** | **Component Disposal** | **Base** | - -
- ---- - -## 참고 - -- 이 체크리스트는 NIST OSCAL 공식 프로파일에서 추출한 데이터 기준입니다. -- PM(Program Management)과 PT(PII Processing and Transparency) 패밀리는 기준선에 포함되지 않으며, 조직 수준에서 별도 적용됩니다. -- 컨트롤 상세(Statement, Guidance 등)는 [SP 800-53 상세 문서](../README.md)를 참고하세요. \ No newline at end of file diff --git a/NIST/SP800-53/high/index.html b/NIST/SP800-53/high/index.html new file mode 100644 index 0000000..83115a6 --- /dev/null +++ b/NIST/SP800-53/high/index.html @@ -0,0 +1,4159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SP 800-53B HIGH - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + +

SP 800-53 HIGH 체크리스트

+

개요

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
기준선HIGH (높음)
영향도치명적/재앙적 피해
적용 대상기밀성, 무결성, 가용성의 손실이 조직 운영, 자산, 개인에게 치명적이거나 재앙적인 부정적 영향을 미치는 시스템
총 컨트롤 수370개 (base 188개 + enhancement 182개)
적용 패밀리18개 (PM, PT 제외)
근거SP 800-53B, FIPS 199
+
+

HIGH 기준선은 MODERATE(287개)를 완전히 포함하며, 83개가 추가된 총 370개입니다. HIGH만 충족하면 LOW와 MODERATE는 별도로 충족할 필요가 없습니다. (LOW ⊂ MODERATE ⊂ HIGH)

+
+
+

패밀리별 컨트롤

+

한눈에 보기

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
패밀리컨트롤 수
AC — Access Control46개
AT — Awareness and Training6개
AU — Audit and Accountability25개
CA — Assessment, Authorization, and Monitoring14개
CM — Configuration Management32개
CP — Contingency Planning35개
IA — Identification and Authentication26개
IR — Incident Response18개
MA — Maintenance12개
MP — Media Protection10개
PE — Physical and Environmental Protection25개
PL — Planning7개
PS — Personnel Security10개
RA — Risk Assessment11개
SA — System and Services Acquisition21개
SC — System and Communications Protection30개
SI — System and Information Integrity28개
SR — Supply Chain Risk Management14개
합계370개
+
+
+AC — Access Control (46개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
AC-01Policy and ProceduresBase
AC-02Account ManagementBase
↳ AC-02(01)Automated System Account ManagementEnhancement
↳ AC-02(02)Automated Temporary and Emergency Account ManagementEnhancement
↳ AC-02(03)Disable AccountsEnhancement
↳ AC-02(04)Automated Audit ActionsEnhancement
↳ AC-02(05)Inactivity LogoutEnhancement
↳ AC-02(11)Usage ConditionsEnhancement
↳ AC-02(12)Account Monitoring for Atypical UsageEnhancement
↳ AC-02(13)Disable Accounts for High-risk IndividualsEnhancement
AC-03Access EnforcementBase
AC-04Information Flow EnforcementBase
↳ AC-04(04)Flow Control of Encrypted InformationEnhancement
AC-05Separation of DutiesBase
AC-06Least PrivilegeBase
↳ AC-06(01)Authorize Access to Security FunctionsEnhancement
↳ AC-06(02)Non-privileged Access for Nonsecurity FunctionsEnhancement
↳ AC-06(03)Network Access to Privileged CommandsEnhancement
↳ AC-06(05)Privileged AccountsEnhancement
↳ AC-06(07)Review of User PrivilegesEnhancement
↳ AC-06(09)Log Use of Privileged FunctionsEnhancement
↳ AC-06(10)Prohibit Non-privileged Users from Executing Privileged FunctionsEnhancement
AC-07Unsuccessful Logon AttemptsBase
AC-08System Use NotificationBase
AC-10Concurrent Session ControlBase
AC-11Device LockBase
↳ AC-11(01)Pattern-hiding DisplaysEnhancement
AC-12Session TerminationBase
AC-14Permitted Actions Without Identification or AuthenticationBase
AC-17Remote AccessBase
↳ AC-17(01)Monitoring and ControlEnhancement
↳ AC-17(02)Protection of Confidentiality and Integrity Using EncryptionEnhancement
↳ AC-17(03)Managed Access Control PointsEnhancement
↳ AC-17(04)Privileged Commands and AccessEnhancement
AC-18Wireless AccessBase
↳ AC-18(01)Authentication and EncryptionEnhancement
↳ AC-18(03)Disable Wireless NetworkingEnhancement
↳ AC-18(04)Restrict Configurations by UsersEnhancement
↳ AC-18(05)Antennas and Transmission Power LevelsEnhancement
AC-19Access Control for Mobile DevicesBase
↳ AC-19(05)Full Device or Container-based EncryptionEnhancement
AC-20Use of External SystemsBase
↳ AC-20(01)Limits on Authorized UseEnhancement
↳ AC-20(02)Portable Storage Devices — Restricted UseEnhancement
AC-21Information SharingBase
AC-22Publicly Accessible ContentBase
+
+
+AT — Awareness and Training (6개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
AT-01Policy and ProceduresBase
AT-02Literacy Training and AwarenessBase
↳ AT-02(02)Insider ThreatEnhancement
↳ AT-02(03)Social Engineering and MiningEnhancement
AT-03Role-based TrainingBase
AT-04Training RecordsBase
+
+
+AU — Audit and Accountability (25개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
AU-01Policy and ProceduresBase
AU-02Event LoggingBase
AU-03Content of Audit RecordsBase
↳ AU-03(01)Additional Audit InformationEnhancement
AU-04Audit Log Storage CapacityBase
AU-05Response to Audit Logging Process FailuresBase
↳ AU-05(01)Storage Capacity WarningEnhancement
↳ AU-05(02)Real-time AlertsEnhancement
AU-06Audit Record Review, Analysis, and ReportingBase
↳ AU-06(01)Automated Process IntegrationEnhancement
↳ AU-06(03)Correlate Audit Record RepositoriesEnhancement
↳ AU-06(05)Integrated Analysis of Audit RecordsEnhancement
↳ AU-06(06)Correlation with Physical MonitoringEnhancement
AU-07Audit Record Reduction and Report GenerationBase
↳ AU-07(01)Automatic ProcessingEnhancement
AU-08Time StampsBase
AU-09Protection of Audit InformationBase
↳ AU-09(02)Store on Separate Physical Systems or ComponentsEnhancement
↳ AU-09(03)Cryptographic ProtectionEnhancement
↳ AU-09(04)Access by Subset of Privileged UsersEnhancement
AU-10Non-repudiationBase
AU-11Audit Record RetentionBase
AU-12Audit Record GenerationBase
↳ AU-12(01)System-wide and Time-correlated Audit TrailEnhancement
↳ AU-12(03)Changes by Authorized IndividualsEnhancement
+
+
+CA — Assessment, Authorization, and Monitoring (14개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
CA-01Policy and ProceduresBase
CA-02Control AssessmentsBase
↳ CA-02(01)Independent AssessorsEnhancement
↳ CA-02(02)Specialized AssessmentsEnhancement
CA-03Information ExchangeBase
↳ CA-03(06)Transfer AuthorizationsEnhancement
CA-05Plan of Action and MilestonesBase
CA-06AuthorizationBase
CA-07Continuous MonitoringBase
↳ CA-07(01)Independent AssessmentEnhancement
↳ CA-07(04)Risk MonitoringEnhancement
CA-08Penetration TestingBase
↳ CA-08(01)Independent Penetration Testing Agent or TeamEnhancement
CA-09Internal System ConnectionsBase
+
+
+CM — Configuration Management (32개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
CM-01Policy and ProceduresBase
CM-02Baseline ConfigurationBase
↳ CM-02(02)Automation Support for Accuracy and CurrencyEnhancement
↳ CM-02(03)Retention of Previous ConfigurationsEnhancement
↳ CM-02(07)Configure Systems and Components for High-risk AreasEnhancement
CM-03Configuration Change ControlBase
↳ CM-03(01)Automated Documentation, Notification, and Prohibition of ChangesEnhancement
↳ CM-03(02)Testing, Validation, and Documentation of ChangesEnhancement
↳ CM-03(04)Security and Privacy RepresentativesEnhancement
↳ CM-03(06)Cryptography ManagementEnhancement
CM-04Impact AnalysesBase
↳ CM-04(01)Separate Test EnvironmentsEnhancement
↳ CM-04(02)Verification of ControlsEnhancement
CM-05Access Restrictions for ChangeBase
↳ CM-05(01)Automated Access Enforcement and Audit RecordsEnhancement
CM-06Configuration SettingsBase
↳ CM-06(01)Automated Management, Application, and VerificationEnhancement
↳ CM-06(02)Respond to Unauthorized ChangesEnhancement
CM-07Least FunctionalityBase
↳ CM-07(01)Periodic ReviewEnhancement
↳ CM-07(02)Prevent Program ExecutionEnhancement
↳ CM-07(05)Authorized Software — Allow-by-exceptionEnhancement
CM-08System Component InventoryBase
↳ CM-08(01)Updates During Installation and RemovalEnhancement
↳ CM-08(02)Automated MaintenanceEnhancement
↳ CM-08(03)Automated Unauthorized Component DetectionEnhancement
↳ CM-08(04)Accountability InformationEnhancement
CM-09Configuration Management PlanBase
CM-10Software Usage RestrictionsBase
CM-11User-installed SoftwareBase
CM-12Information LocationBase
↳ CM-12(01)Automated Tools to Support Information LocationEnhancement
+
+
+CP — Contingency Planning (35개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
CP-01Policy and ProceduresBase
CP-02Contingency PlanBase
↳ CP-02(01)Coordinate with Related PlansEnhancement
↳ CP-02(02)Capacity PlanningEnhancement
↳ CP-02(03)Resume Mission and Business FunctionsEnhancement
↳ CP-02(05)Continue Mission and Business FunctionsEnhancement
↳ CP-02(08)Identify Critical AssetsEnhancement
CP-03Contingency TrainingBase
↳ CP-03(01)Simulated EventsEnhancement
CP-04Contingency Plan TestingBase
↳ CP-04(01)Coordinate with Related PlansEnhancement
↳ CP-04(02)Alternate Processing SiteEnhancement
CP-06Alternate Storage SiteBase
↳ CP-06(01)Separation from Primary SiteEnhancement
↳ CP-06(02)Recovery Time and Recovery Point ObjectivesEnhancement
↳ CP-06(03)AccessibilityEnhancement
CP-07Alternate Processing SiteBase
↳ CP-07(01)Separation from Primary SiteEnhancement
↳ CP-07(02)AccessibilityEnhancement
↳ CP-07(03)Priority of ServiceEnhancement
↳ CP-07(04)Preparation for UseEnhancement
CP-08Telecommunications ServicesBase
↳ CP-08(01)Priority of Service ProvisionsEnhancement
↳ CP-08(02)Single Points of FailureEnhancement
↳ CP-08(03)Separation of Primary and Alternate ProvidersEnhancement
↳ CP-08(04)Provider Contingency PlanEnhancement
CP-09System BackupBase
↳ CP-09(01)Testing for Reliability and IntegrityEnhancement
↳ CP-09(02)Test Restoration Using SamplingEnhancement
↳ CP-09(03)Separate Storage for Critical InformationEnhancement
↳ CP-09(05)Transfer to Alternate Storage SiteEnhancement
↳ CP-09(08)Cryptographic ProtectionEnhancement
CP-10System Recovery and ReconstitutionBase
↳ CP-10(02)Transaction RecoveryEnhancement
↳ CP-10(04)Restore Within Time PeriodEnhancement
+
+
+IA — Identification and Authentication (26개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
IA-01Policy and ProceduresBase
IA-02Identification and Authentication (Organizational Users)Base
↳ IA-02(01)Multi-factor Authentication to Privileged AccountsEnhancement
↳ IA-02(02)Multi-factor Authentication to Non-privileged AccountsEnhancement
↳ IA-02(05)Individual Authentication with Group AuthenticationEnhancement
↳ IA-02(08)Access to Accounts — Replay ResistantEnhancement
↳ IA-02(12)Acceptance of PIV CredentialsEnhancement
IA-03Device Identification and AuthenticationBase
IA-04Identifier ManagementBase
↳ IA-04(04)Identify User StatusEnhancement
IA-05Authenticator ManagementBase
↳ IA-05(01)Password-based AuthenticationEnhancement
↳ IA-05(02)Public Key-based AuthenticationEnhancement
↳ IA-05(06)Protection of AuthenticatorsEnhancement
IA-06Authentication FeedbackBase
IA-07Cryptographic Module AuthenticationBase
IA-08Identification and Authentication (Non-organizational Users)Base
↳ IA-08(01)Acceptance of PIV Credentials from Other AgenciesEnhancement
↳ IA-08(02)Acceptance of External AuthenticatorsEnhancement
↳ IA-08(04)Use of Defined ProfilesEnhancement
IA-11Re-authenticationBase
IA-12Identity ProofingBase
↳ IA-12(02)Identity EvidenceEnhancement
↳ IA-12(03)Identity Evidence Validation and VerificationEnhancement
↳ IA-12(04)In-person Validation and VerificationEnhancement
↳ IA-12(05)Address ConfirmationEnhancement
+
+
+IR — Incident Response (18개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
IR-01Policy and ProceduresBase
IR-02Incident Response TrainingBase
↳ IR-02(01)Simulated EventsEnhancement
↳ IR-02(02)Automated Training EnvironmentsEnhancement
IR-03Incident Response TestingBase
↳ IR-03(02)Coordination with Related PlansEnhancement
IR-04Incident HandlingBase
↳ IR-04(01)Automated Incident Handling ProcessesEnhancement
↳ IR-04(04)Information CorrelationEnhancement
↳ IR-04(11)Integrated Incident Response TeamEnhancement
IR-05Incident MonitoringBase
↳ IR-05(01)Automated Tracking, Data Collection, and AnalysisEnhancement
IR-06Incident ReportingBase
↳ IR-06(01)Automated ReportingEnhancement
↳ IR-06(03)Supply Chain CoordinationEnhancement
IR-07Incident Response AssistanceBase
↳ IR-07(01)Automation Support for Availability of Information and SupportEnhancement
IR-08Incident Response PlanBase
+
+
+MA — Maintenance (12개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
MA-01Policy and ProceduresBase
MA-02Controlled MaintenanceBase
↳ MA-02(02)Automated Maintenance ActivitiesEnhancement
MA-03Maintenance ToolsBase
↳ MA-03(01)Inspect ToolsEnhancement
↳ MA-03(02)Inspect MediaEnhancement
↳ MA-03(03)Prevent Unauthorized RemovalEnhancement
MA-04Nonlocal MaintenanceBase
↳ MA-04(03)Comparable Security and SanitizationEnhancement
MA-05Maintenance PersonnelBase
↳ MA-05(01)Individuals Without Appropriate AccessEnhancement
MA-06Timely MaintenanceBase
+
+
+MP — Media Protection (10개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
MP-01Policy and ProceduresBase
MP-02Media AccessBase
MP-03Media MarkingBase
MP-04Media StorageBase
MP-05Media TransportBase
MP-06Media SanitizationBase
↳ MP-06(01)Review, Approve, Track, Document, and VerifyEnhancement
↳ MP-06(02)Equipment TestingEnhancement
↳ MP-06(03)Nondestructive TechniquesEnhancement
MP-07Media UseBase
+
+
+PE — Physical and Environmental Protection (25개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
PE-01Policy and ProceduresBase
PE-02Physical Access AuthorizationsBase
PE-03Physical Access ControlBase
↳ PE-03(01)System AccessEnhancement
PE-04Access Control for TransmissionBase
PE-05Access Control for Output DevicesBase
PE-06Monitoring Physical AccessBase
↳ PE-06(01)Intrusion Alarms and Surveillance EquipmentEnhancement
↳ PE-06(04)Monitoring Physical Access to SystemsEnhancement
PE-08Visitor Access RecordsBase
↳ PE-08(01)Automated Records Maintenance and ReviewEnhancement
PE-09Power Equipment and CablingBase
PE-10Emergency ShutoffBase
PE-11Emergency PowerBase
↳ PE-11(01)Alternate Power Supply — Minimal Operational CapabilityEnhancement
PE-12Emergency LightingBase
PE-13Fire ProtectionBase
↳ PE-13(01)Detection Systems — Automatic Activation and NotificationEnhancement
↳ PE-13(02)Suppression Systems — Automatic Activation and NotificationEnhancement
PE-14Environmental ControlsBase
PE-15Water Damage ProtectionBase
↳ PE-15(01)Automation SupportEnhancement
PE-16Delivery and RemovalBase
PE-17Alternate Work SiteBase
PE-18Location of System ComponentsBase
+
+
+PL — Planning (7개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
PL-01Policy and ProceduresBase
PL-02System Security and Privacy PlansBase
PL-04Rules of BehaviorBase
↳ PL-04(01)Social Media and External Site/Application Usage RestrictionsEnhancement
PL-08Security and Privacy ArchitecturesBase
PL-10Baseline SelectionBase
PL-11Baseline TailoringBase
+
+
+PS — Personnel Security (10개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
PS-01Policy and ProceduresBase
PS-02Position Risk DesignationBase
PS-03Personnel ScreeningBase
PS-04Personnel TerminationBase
↳ PS-04(02)Automated ActionsEnhancement
PS-05Personnel TransferBase
PS-06Access AgreementsBase
PS-07External Personnel SecurityBase
PS-08Personnel SanctionsBase
PS-09Position DescriptionsBase
+
+
+RA — Risk Assessment (11개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
RA-01Policy and ProceduresBase
RA-02Security CategorizationBase
RA-03Risk AssessmentBase
↳ RA-03(01)Supply Chain Risk AssessmentEnhancement
RA-05Vulnerability Monitoring and ScanningBase
↳ RA-05(02)Update Vulnerabilities to Be ScannedEnhancement
↳ RA-05(04)Discoverable InformationEnhancement
↳ RA-05(05)Privileged AccessEnhancement
↳ RA-05(11)Public Disclosure ProgramEnhancement
RA-07Risk ResponseBase
RA-09Criticality AnalysisBase
+
+
+SA — System and Services Acquisition (21개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SA-01Policy and ProceduresBase
SA-02Allocation of ResourcesBase
SA-03System Development Life CycleBase
SA-04Acquisition ProcessBase
↳ SA-04(01)Functional Properties of ControlsEnhancement
↳ SA-04(02)Design and Implementation Information for ControlsEnhancement
↳ SA-04(05)System, Component, and Service ConfigurationsEnhancement
↳ SA-04(09)Functions, Ports, Protocols, and Services in UseEnhancement
↳ SA-04(10)Use of Approved PIV ProductsEnhancement
SA-05System DocumentationBase
SA-08Security and Privacy Engineering PrinciplesBase
SA-09External System ServicesBase
↳ SA-09(02)Identification of Functions, Ports, Protocols, and ServicesEnhancement
SA-10Developer Configuration ManagementBase
SA-11Developer Testing and EvaluationBase
SA-15Development Process, Standards, and ToolsBase
↳ SA-15(03)Criticality AnalysisEnhancement
SA-16Developer-provided TrainingBase
SA-17Developer Security and Privacy Architecture and DesignBase
SA-21Developer ScreeningBase
SA-22Unsupported System ComponentsBase
+
+
+SC — System and Communications Protection (30개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SC-01Policy and ProceduresBase
SC-02Separation of System and User FunctionalityBase
SC-03Security Function IsolationBase
SC-04Information in Shared System ResourcesBase
SC-05Denial-of-service ProtectionBase
SC-07Boundary ProtectionBase
↳ SC-07(03)Access PointsEnhancement
↳ SC-07(04)External Telecommunications ServicesEnhancement
↳ SC-07(05)Deny by Default — Allow by ExceptionEnhancement
↳ SC-07(07)Split Tunneling for Remote DevicesEnhancement
↳ SC-07(08)Route Traffic to Authenticated Proxy ServersEnhancement
↳ SC-07(18)Fail SecureEnhancement
↳ SC-07(21)Isolation of System ComponentsEnhancement
SC-08Transmission Confidentiality and IntegrityBase
↳ SC-08(01)Cryptographic ProtectionEnhancement
SC-10Network DisconnectBase
SC-12Cryptographic Key Establishment and ManagementBase
↳ SC-12(01)AvailabilityEnhancement
SC-13Cryptographic ProtectionBase
SC-15Collaborative Computing Devices and ApplicationsBase
SC-17Public Key Infrastructure CertificatesBase
SC-18Mobile CodeBase
SC-20Secure Name/Address Resolution Service (Authoritative Source)Base
SC-21Secure Name/Address Resolution Service (Recursive or Caching Resolver)Base
SC-22Architecture and Provisioning for Name/Address Resolution ServiceBase
SC-23Session AuthenticityBase
SC-24Fail in Known StateBase
SC-28Protection of Information at RestBase
↳ SC-28(01)Cryptographic ProtectionEnhancement
SC-39Process IsolationBase
+
+
+SI — System and Information Integrity (28개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SI-01Policy and ProceduresBase
SI-02Flaw RemediationBase
↳ SI-02(02)Automated Flaw Remediation StatusEnhancement
SI-03Malicious Code ProtectionBase
SI-04System MonitoringBase
↳ SI-04(02)Automated Tools and Mechanisms for Real-time AnalysisEnhancement
↳ SI-04(04)Inbound and Outbound Communications TrafficEnhancement
↳ SI-04(05)System-generated AlertsEnhancement
↳ SI-04(10)Visibility of Encrypted CommunicationsEnhancement
↳ SI-04(12)Automated Organization-generated AlertsEnhancement
↳ SI-04(14)Wireless Intrusion DetectionEnhancement
↳ SI-04(20)Privileged UsersEnhancement
↳ SI-04(22)Unauthorized Network ServicesEnhancement
SI-05Security Alerts, Advisories, and DirectivesBase
↳ SI-05(01)Automated Alerts and AdvisoriesEnhancement
SI-06Security and Privacy Function VerificationBase
SI-07Software, Firmware, and Information IntegrityBase
↳ SI-07(01)Integrity ChecksEnhancement
↳ SI-07(02)Automated Notifications of Integrity ViolationsEnhancement
↳ SI-07(05)Automated Response to Integrity ViolationsEnhancement
↳ SI-07(07)Integration of Detection and ResponseEnhancement
↳ SI-07(15)Code AuthenticationEnhancement
SI-08Spam ProtectionBase
↳ SI-08(02)Automatic UpdatesEnhancement
SI-10Information Input ValidationBase
SI-11Error HandlingBase
SI-12Information Management and RetentionBase
SI-16Memory ProtectionBase
+
+
+SR — Supply Chain Risk Management (14개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SR-01Policy and ProceduresBase
SR-02Supply Chain Risk Management PlanBase
↳ SR-02(01)Establish SCRM TeamEnhancement
SR-03Supply Chain Controls and ProcessesBase
SR-05Acquisition Strategies, Tools, and MethodsBase
SR-06Supplier Assessments and ReviewsBase
SR-08Notification AgreementsBase
SR-09Tamper Resistance and DetectionBase
↳ SR-09(01)Multiple Stages of System Development Life CycleEnhancement
SR-10Inspection of Systems or ComponentsBase
SR-11Component AuthenticityBase
↳ SR-11(01)Anti-counterfeit TrainingEnhancement
↳ SR-11(02)Configuration Control for Component Service and RepairEnhancement
SR-12Component DisposalBase
+
+
+

참고

+
    +
  • 이 체크리스트는 NIST OSCAL 공식 프로파일에서 추출한 데이터 기준입니다.
  • +
  • PM(Program Management)과 PT(PII Processing and Transparency) 패밀리는 기준선에 포함되지 않으며, 조직 수준에서 별도 적용됩니다.
  • +
  • 컨트롤 상세(Statement, Guidance 등)는 SP 800-53 상세 문서를 참고하세요.
  • +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/NIST/SP800-53/index.html b/NIST/SP800-53/index.html new file mode 100644 index 0000000..9d1a027 --- /dev/null +++ b/NIST/SP800-53/index.html @@ -0,0 +1,4822 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SP 800-53 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

NIST SP 800-53 Rev. 5: 보안 및 프라이버시 컨트롤

+

개요

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
정식 명칭Security and Privacy Controls for Information Systems and Organizations
문서 번호SP 800-53 Revision 5, Update 1
발행일2020년 9월 (Rev. 5 최초 발행), 이후 Update 1 반영
대상연방 정보시스템 및 조직 (민간 부문에서도 널리 참조)
원문https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final
+

SP 800-53은 NIST 사이버보안 체계의 핵심 문서입니다. 조직이 정보시스템과 데이터를 보호하기 위해 구현해야 하는 보안 및 프라이버시 컨트롤 (통제)의 카탈로그를 제공합니다.

+
+

53 시리즈 구성

+

SP 800-53은 단독으로 사용되지 않으며, 3개 문서가 함께 작동합니다:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
문서역할핵심 질문
SP 800-53컨트롤 카탈로그"어떤 통제 항목이 존재하는가?"
SP 800-53A평가 절차"컨트롤이 제대로 구현되었는지 어떻게 검증하는가?"
SP 800-53B기준선 (Baselines)"우리 시스템에 어떤 컨트롤을 적용해야 하는가?"
+
+

Rev. 5의 주요 변경점 (vs Rev. 4)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
변경 사항설명
프라이버시 컨트롤 통합기존 별도 부록이었던 프라이버시 컨트롤이 본문에 통합. PT, PM 패밀리 확대
SR 패밀리 신설Supply Chain Risk Management — 공급망 리스크 관리 컨트롤 추가
PT 패밀리 신설PII Processing and Transparency — 개인정보 처리 및 투명성 컨트롤 추가
"연방" 한정 제거컨트롤 문구에서 "federal"을 제거하여 모든 조직이 활용 가능하도록 범용화
성과 기반으로 전환컨트롤이 "무엇을 해야 하는가"(what)에 집중하며, "어떻게"(how)는 조직이 결정
+
+

수치 요약

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분수량
컨트롤 패밀리20개
Base 컨트롤300개
Enhancement 컨트롤714개
Withdrawn 컨트롤182개
총 컨트롤 (base + enhancement + withdrawn)1,196개
활성 컨트롤 (base + enhancement)1,014개
+
+

평가 절차 (SP 800-53A)

+

SP 800-53A는 각 컨트롤이 올바르게 구현되었는지 검증하는 방법을 정의합니다. SP 800-53의 모든 컨트롤과 Enhancement에 대해 1:1로 평가 절차가 존재합니다.

+

3가지 평가 방법

+ + + + + + + + + + + + + + + + + + + + + + + + + +
방법설명대상 객체
Examine (검토)문서, 메커니즘, 활동을 검토·분석하여 증거를 확보정책/절차서(Specifications), 하드웨어/소프트웨어(Mechanisms), 보호 활동(Activities)
Interview (면담)담당자와 면담하여 이해를 확인하고 증거를 확보관련 인력(Individuals)
Test (테스트)메커니즘이나 활동을 실제 실행하여 기대 상태와 비교하드웨어/소프트웨어(Mechanisms), 보호 활동(Activities)
+

평가 수준 (Depth & Coverage)

+

각 평가 방법에는 깊이(Depth)범위(Coverage) 속성이 있으며, 조직이 시스템 영향도와 리스크 허용수준에 따라 결정합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
수준Depth (깊이)Coverage (범위)
Basic개괄적 검토제한된 범위
Focused심화 분석확대된 범위
Comprehensive철저하고 상세한 분석전체 범위
+
+

상세 내용(평가 절차 구조, 예시, RMF와의 관계 등)은 SP 800-53A 상세 문서를 참고하세요.

+
+
+

기준선 (Baselines)

+

SP 800-53B는 시스템의 영향도 (Impact Level)에 따라 적용할 컨트롤 세트를 정의합니다. 영향도는 FIPS 199에 의해 결정됩니다.

+

영향도 결정 방법 (FIPS 199)

+

시스템이 다루는 정보와 시스템 자체에 대해, 기밀성(Confidentiality)·무결성(Integrity)·가용성(Availability) 각각의 손실이 초래할 잠재적 영향을 평가합니다.

+ + + + + + + + + + + + + + + + + + + + + +
영향도판단 기준
LOW손실이 조직 운영, 자산, 개인에게 제한적인 부정적 영향을 미침 (예: 경미한 재정 손실, 일시적 업무 지장)
MODERATE손실이 조직 운영, 자산, 개인에게 심각한 부정적 영향을 미침 (예: 상당한 재정 손실, 핵심 업무 기능의 심각한 저하)
HIGH손실이 조직 운영, 자산, 개인에게 치명적이거나 재앙적인 부정적 영향을 미침 (예: 대규모 재정 손실, 인명 피해, 핵심 기능 상실)
+

세 가지 보안 목표(C/I/A)의 영향도 중 가장 높은 것이 시스템의 전체 영향도가 됩니다.

+
+

예: 기밀성=MODERATE, 무결성=MODERATE, 가용성=LOW인 시스템 → 전체 영향도는 MODERATE

+
+

기준선별 컨트롤

+

상위 기준선은 하위를 완전히 포함합니다: LOW ⊂ MODERATE ⊂ HIGH

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
기준선컨트롤 수체크리스트
LOW149개LOW 체크리스트
MODERATE287개 (+138)MODERATE 체크리스트
HIGH370개 (+83)HIGH 체크리스트
PRIVACY별도
+
+

컨트롤 수는 NIST OSCAL 공식 프로파일 기준입니다.
+PM(Program Management)과 PT(PII Processing and Transparency) 패밀리는 기준선에 포함되지 않으며, 조직 수준에서 별도 적용됩니다.

+
+
+

컨트롤 구조 이해

+

컨트롤의 구성 요소

+

각 컨트롤은 다음 요소로 구성됩니다:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
요소설명예시 (AC-02)
ID패밀리 코드 + 번호AC-02
Title컨트롤 명칭Account Management
Statement컨트롤이 요구하는 성과"시스템 계정을 정의·생성·활성화·수정·비활성화·제거한다"
Guidance구현 지침계정 유형, 조건, 자동화 방법 등
Enhancement강화 항목 (하위 컨트롤)AC-02(01): 자동화된 계정 관리
Related Controls관련 컨트롤 참조IA-01, IA-04, IA-05...
Baselines적용 기준선L/M/H
+

Base 컨트롤과 Enhancement의 관계

+

SP 800-53의 컨트롤은 Base 컨트롤Enhancement(강화 항목) 두 계층으로 구성됩니다.

+
    +
  • Base 컨트롤: 독립적으로 존재하는 기본 통제 항목 (예: AC-02)
  • +
  • Enhancement: Base에 종속되는 강화 요구사항. 독립적으로 존재할 수 없음 (예: AC-02(01))
  • +
+

Enhancement은 AC-02(01)처럼 괄호 번호로 표기됩니다. 시스템의 영향도가 높아질수록(LOW → MODERATE → HIGH) 더 많은 Enhancement이 필수로 적용됩니다.

+

예시: AC-02 (Account Management)의 계층 구조

+
AC-02 (Base) — 계정 관리                              [LOW / MODERATE / HIGH]
+│  "시스템 계정을 정의·생성·활성화·수정·비활성화·제거한다"
+│
+├── AC-02(01) — 자동화된 계정 관리                      [MODERATE / HIGH]
+├── AC-02(02) — 임시/긴급 계정 자동 관리                 [MODERATE / HIGH]
+├── AC-02(03) — 비활성 계정 비활성화                     [MODERATE / HIGH]
+├── AC-02(04) — 자동 감사 조치                          [MODERATE / HIGH]
+├── AC-02(05) — 비활성 로그아웃                          [MODERATE / HIGH]
+├── AC-02(06) — 동적 권한 관리                          [—]
+├── AC-02(07) — 특권 사용자 계정                        [—]
+├── AC-02(08) — 동적 계정 관리                          [—]
+├── AC-02(09) — 공유/그룹 계정 사용 제한                 [—]
+├── AC-02(11) — 사용 조건                              [HIGH]
+├── AC-02(12) — 비정형 사용 모니터링                     [HIGH]
+└── AC-02(13) — 고위험 개인 계정 비활성화                 [MODERATE / HIGH]
+
+

위 예시에서: +- LOW 시스템: AC-02(Base)만 구현 +- MODERATE 시스템: AC-02 + AC-02(01)~(05), (13) 구현 +- HIGH 시스템: AC-02 + AC-02(01)~(05), (11), (12), (13) 구현 +- 표시 항목: 기준선에 미포함. 조직이 필요에 따라 선택적으로 적용

+
+

20개 컨트롤 패밀리

+

한눈에 보기

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
코드패밀리BaseEnhancement활성 합계
ACAccess Control23108131
ATAwareness and Training51015
AUAudit and Accountability154156
CAAssessment, Authorization, and Monitoring81725
CMConfiguration Management144256
CPContingency Planning123749
IAIdentification and Authentication134659
IRIncident Response93140
MAMaintenance72128
MPMedia Protection81220
PEPhysical and Environmental Protection222951
PLPlanning8311
PMProgram Management32537
PSPersonnel Security9817
PTPII Processing and Transparency81321
RARisk Assessment91322
SASystem and Services Acquisition1791108
SCSystem and Communications Protection4792139
SISystem and Information Integrity2280102
SRSupply Chain Risk Management121527
합계3007141,014
+
+

아래 각 패밀리를 클릭하면 Base 컨트롤 전체 목록을 확인할 수 있습니다.
+기준선 컬럼: L=LOW, M=MODERATE, H=HIGH, —=기준선 미포함
+컨트롤 번호에 갭이 있는 경우(예: AT-04 다음에 AT-06)가 있습니다. 이는 해당 번호의 컨트롤이 Withdrawn(폐지)된 결과이며, 누락이 아닙니다.

+
+
+
+AC — Access Control (23 base / 108 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
AC-01Policy and ProceduresL/M/H
AC-02Account ManagementL/M/H12개
AC-03Access EnforcementL/M/H13개
AC-04Information Flow EnforcementM/H30개
AC-05Separation of DutiesM/H
AC-06Least PrivilegeM/H10개
AC-07Unsuccessful Logon AttemptsL/M/H3개
AC-08System Use NotificationL/M/H
AC-09Previous Logon Notification4개
AC-10Concurrent Session ControlH
AC-11Device LockM/H1개
AC-12Session TerminationM/H3개
AC-14Permitted Actions Without Identification or AuthenticationL/M/H
AC-16Security and Privacy Attributes10개
AC-17Remote AccessL/M/H7개
AC-18Wireless AccessL/M/H4개
AC-19Access Control for Mobile DevicesL/M/H2개
AC-20Use of External SystemsL/M/H5개
AC-21Information SharingM/H2개
AC-22Publicly Accessible ContentL/M/H
AC-23Data Mining Protection
AC-24Access Control Decisions2개
AC-25Reference Monitor
+
+
+AT — Awareness and Training (5 base / 10 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
AT-01Policy and ProceduresL/M/H
AT-02Literacy Training and AwarenessL/M/H6개
AT-03Role-based TrainingL/M/H4개
AT-04Training RecordsL/M/H
AT-06Training Feedback
+
+
+AU — Audit and Accountability (15 base / 41 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
AU-01Policy and ProceduresL/M/H
AU-02Event LoggingL/M/H
AU-03Content of Audit RecordsL/M/H2개
AU-04Audit Log Storage CapacityL/M/H1개
AU-05Response to Audit Logging Process FailuresL/M/H5개
AU-06Audit Record Review, Analysis, and ReportingL/M/H8개
AU-07Audit Record Reduction and Report GenerationM/H1개
AU-08Time StampsL/M/H
AU-09Protection of Audit InformationL/M/H7개
AU-10Non-repudiationH4개
AU-11Audit Record RetentionL/M/H1개
AU-12Audit Record GenerationL/M/H4개
AU-13Monitoring for Information Disclosure3개
AU-14Session Audit2개
AU-16Cross-organizational Audit Logging3개
+
+
+CA — Assessment, Authorization, and Monitoring (8 base / 17 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
CA-01Policy and ProceduresL/M/H
CA-02Control AssessmentsL/M/H3개
CA-03Information ExchangeL/M/H2개
CA-05Plan of Action and MilestonesL/M/H1개
CA-06AuthorizationL/M/H2개
CA-07Continuous MonitoringL/M/H5개
CA-08Penetration TestingH3개
CA-09Internal System ConnectionsL/M/H1개
+
+
+CM — Configuration Management (14 base / 42 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
CM-01Policy and ProceduresL/M/H
CM-02Baseline ConfigurationL/M/H4개
CM-03Configuration Change ControlM/H8개
CM-04Impact AnalysesL/M/H2개
CM-05Access Restrictions for ChangeL/M/H4개
CM-06Configuration SettingsL/M/H2개
CM-07Least FunctionalityL/M/H9개
CM-08System Component InventoryL/M/H8개
CM-09Configuration Management PlanM/H1개
CM-10Software Usage RestrictionsL/M/H1개
CM-11User-installed SoftwareL/M/H2개
CM-12Information LocationM/H1개
CM-13Data Action Mapping
CM-14Signed Components
+
+
+CP — Contingency Planning (12 base / 37 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
CP-01Policy and ProceduresL/M/H
CP-02Contingency PlanL/M/H7개
CP-03Contingency TrainingL/M/H2개
CP-04Contingency Plan TestingL/M/H5개
CP-06Alternate Storage SiteM/H3개
CP-07Alternate Processing SiteM/H5개
CP-08Telecommunications ServicesM/H5개
CP-09System BackupL/M/H7개
CP-10System Recovery and ReconstitutionL/M/H3개
CP-11Alternate Communications Protocols
CP-12Safe Mode
CP-13Alternative Security Mechanisms
+
+
+IA — Identification and Authentication (13 base / 46 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
IA-01Policy and ProceduresL/M/H
IA-02Identification and Authentication (Organizational Users)L/M/H8개
IA-03Device Identification and AuthenticationM/H3개
IA-04Identifier ManagementL/M/H6개
IA-05Authenticator ManagementL/M/H15개
IA-06Authentication FeedbackL/M/H
IA-07Cryptographic Module AuthenticationL/M/H
IA-08Identification and Authentication (Non-organizational Users)L/M/H5개
IA-09Service Identification and Authentication
IA-10Adaptive Authentication
IA-11Re-authenticationL/M/H
IA-12Identity ProofingM/H6개
IA-13Identity Providers and Authorization Servers3개
+
+
+IR — Incident Response (9 base / 31 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
IR-01Policy and ProceduresL/M/H
IR-02Incident Response TrainingL/M/H3개
IR-03Incident Response TestingM/H3개
IR-04Incident HandlingL/M/H15개
IR-05Incident MonitoringL/M/H1개
IR-06Incident ReportingL/M/H3개
IR-07Incident Response AssistanceL/M/H2개
IR-08Incident Response PlanL/M/H1개
IR-09Information Spillage Response3개
+
+
+MA — Maintenance (7 base / 21 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
MA-01Policy and ProceduresL/M/H
MA-02Controlled MaintenanceL/M/H1개
MA-03Maintenance ToolsM/H6개
MA-04Nonlocal MaintenanceL/M/H6개
MA-05Maintenance PersonnelL/M/H5개
MA-06Timely MaintenanceM/H3개
MA-07Field Maintenance
+
+
+MP — Media Protection (8 base / 12 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
MP-01Policy and ProceduresL/M/H
MP-02Media AccessL/M/H
MP-03Media MarkingM/H
MP-04Media StorageM/H1개
MP-05Media TransportM/H1개
MP-06Media SanitizationL/M/H5개
MP-07Media UseL/M/H1개
MP-08Media Downgrading4개
+
+
+PE — Physical and Environmental Protection (22 base / 29 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
PE-01Policy and ProceduresL/M/H
PE-02Physical Access AuthorizationsL/M/H3개
PE-03Physical Access ControlL/M/H7개
PE-04Access Control for TransmissionM/H
PE-05Access Control for Output DevicesM/H1개
PE-06Monitoring Physical AccessL/M/H4개
PE-08Visitor Access RecordsL/M/H2개
PE-09Power Equipment and CablingM/H2개
PE-10Emergency ShutoffM/H
PE-11Emergency PowerM/H2개
PE-12Emergency LightingL/M/H1개
PE-13Fire ProtectionL/M/H3개
PE-14Environmental ControlsL/M/H2개
PE-15Water Damage ProtectionL/M/H1개
PE-16Delivery and RemovalL/M/H
PE-17Alternate Work SiteM/H
PE-18Location of System ComponentsH
PE-19Information Leakage1개
PE-20Asset Monitoring and Tracking
PE-21Electromagnetic Pulse Protection
PE-22Component Marking
PE-23Facility Location
+
+
+PL — Planning (8 base / 3 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
PL-01Policy and ProceduresL/M/H
PL-02System Security and Privacy PlansL/M/H
PL-04Rules of BehaviorL/M/H1개
PL-07Concept of Operations
PL-08Security and Privacy ArchitecturesM/H2개
PL-09Central Management
PL-10Baseline SelectionL/M/H
PL-11Baseline TailoringL/M/H
+
+
+PM — Program Management (32 base / 5 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목Enhancement
PM-01Information Security Program Plan
PM-02Information Security Program Leadership Role
PM-03Information Security and Privacy Resources
PM-04Plan of Action and Milestones Process
PM-05System Inventory1개
PM-06Measures of Performance
PM-07Enterprise Architecture1개
PM-08Critical Infrastructure Plan
PM-09Risk Management Strategy
PM-10Authorization Process
PM-11Mission and Business Process Definition
PM-12Insider Threat Program
PM-13Security and Privacy Workforce
PM-14Testing, Training, and Monitoring
PM-15Security and Privacy Groups and Associations
PM-16Threat Awareness Program1개
PM-17Protecting Controlled Unclassified Information on External Systems
PM-18Privacy Program Plan
PM-19Privacy Program Leadership Role
PM-20Dissemination of Privacy Program Information1개
PM-21Accounting of Disclosures
PM-22Personally Identifiable Information Quality Management
PM-23Data Governance Body
PM-24Data Integrity Board
PM-25Minimization of Personally Identifiable Information Used in Testing, Training, and Research
PM-26Complaint Management
PM-27Privacy Reporting
PM-28Risk Framing
PM-29Risk Management Program Leadership Roles
PM-30Supply Chain Risk Management Strategy1개
PM-31Continuous Monitoring Strategy
PM-32Purposing
+
+
+PS — Personnel Security (9 base / 8 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
PS-01Policy and ProceduresL/M/H
PS-02Position Risk DesignationL/M/H
PS-03Personnel ScreeningL/M/H4개
PS-04Personnel TerminationL/M/H2개
PS-05Personnel TransferL/M/H
PS-06Access AgreementsL/M/H2개
PS-07External Personnel SecurityL/M/H
PS-08Personnel SanctionsL/M/H
PS-09Position DescriptionsL/M/H
+
+
+PT — Personally Identifiable Information Processing and Transparency (8 base / 13 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목Enhancement
PT-01Policy and Procedures
PT-02Authority to Process Personally Identifiable Information2개
PT-03Personally Identifiable Information Processing Purposes2개
PT-04Consent3개
PT-05Privacy Notice2개
PT-06System of Records Notice2개
PT-07Specific Categories of Personally Identifiable Information2개
PT-08Computer Matching Requirements
+
+
+RA — Risk Assessment (9 base / 13 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
RA-01Policy and ProceduresL/M/H
RA-02Security CategorizationL/M/H1개
RA-03Risk AssessmentL/M/H4개
RA-05Vulnerability Monitoring and ScanningL/M/H8개
RA-06Technical Surveillance Countermeasures Survey
RA-07Risk ResponseL/M/H
RA-08Privacy Impact Assessments
RA-09Criticality AnalysisM/H
RA-10Threat Hunting
+
+
+SA — System and Services Acquisition (17 base / 91 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
SA-01Policy and ProceduresL/M/H
SA-02Allocation of ResourcesL/M/H
SA-03System Development Life CycleL/M/H3개
SA-04Acquisition ProcessL/M/H11개
SA-05System DocumentationL/M/H
SA-08Security and Privacy Engineering PrinciplesL/M/H33개
SA-09External System ServicesL/M/H8개
SA-10Developer Configuration ManagementM/H7개
SA-11Developer Testing and EvaluationM/H9개
SA-15Development Process, Standards, and ToolsM/H11개
SA-16Developer-provided TrainingH
SA-17Developer Security and Privacy Architecture and DesignH9개
SA-20Customized Development of Critical Components
SA-21Developer ScreeningH
SA-22Unsupported System ComponentsL/M/H
SA-23Specialization
SA-24Design For Cyber Resiliency
+
+
+SC — System and Communications Protection (47 base / 92 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
SC-01Policy and ProceduresL/M/H
SC-02Separation of System and User FunctionalityM/H2개
SC-03Security Function IsolationH5개
SC-04Information in Shared System ResourcesM/H1개
SC-05Denial-of-service ProtectionL/M/H3개
SC-06Resource Availability
SC-07Boundary ProtectionL/M/H26개
SC-08Transmission Confidentiality and IntegrityM/H5개
SC-10Network DisconnectM/H
SC-11Trusted Path1개
SC-12Cryptographic Key Establishment and ManagementL/M/H4개
SC-13Cryptographic ProtectionL/M/H
SC-15Collaborative Computing Devices and ApplicationsL/M/H3개
SC-16Transmission of Security and Privacy Attributes3개
SC-17Public Key Infrastructure CertificatesM/H
SC-18Mobile CodeM/H5개
SC-20Secure Name/Address Resolution Service (Authoritative Source)L/M/H1개
SC-21Secure Name/Address Resolution Service (Recursive or Caching Resolver)L/M/H
SC-22Architecture and Provisioning for Name/Address Resolution ServiceL/M/H
SC-23Session AuthenticityM/H3개
SC-24Fail in Known StateH
SC-25Thin Nodes
SC-26Decoys
SC-27Platform-independent Applications
SC-28Protection of Information at RestM/H3개
SC-29Heterogeneity1개
SC-30Concealment and Misdirection4개
SC-31Covert Channel Analysis3개
SC-32System Partitioning1개
SC-34Non-modifiable Executable Programs2개
SC-35External Malicious Code Identification
SC-36Distributed Processing and Storage2개
SC-37Out-of-band Channels1개
SC-38Operations Security
SC-39Process IsolationL/M/H2개
SC-40Wireless Link Protection4개
SC-41Port and I/O Device Access
SC-42Sensor Capability and Data4개
SC-43Usage Restrictions
SC-44Detonation Chambers
SC-45System Time Synchronization2개
SC-46Cross Domain Policy Enforcement
SC-47Alternate Communications Paths
SC-48Sensor Relocation1개
SC-49Hardware-enforced Separation and Policy Enforcement
SC-50Software-enforced Separation and Policy Enforcement
SC-51Hardware-based Protection
+
+
+SI — System and Information Integrity (22 base / 80 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
SI-01Policy and ProceduresL/M/H
SI-02Flaw RemediationL/M/H6개
SI-03Malicious Code ProtectionL/M/H4개
SI-04System MonitoringL/M/H23개
SI-05Security Alerts, Advisories, and DirectivesL/M/H1개
SI-06Security and Privacy Function VerificationH2개
SI-07Software, Firmware, and Information IntegrityM/H13개
SI-08Spam ProtectionM/H2개
SI-10Information Input ValidationM/H6개
SI-11Error HandlingM/H
SI-12Information Management and RetentionL/M/H3개
SI-13Predictable Failure Prevention4개
SI-14Non-persistence3개
SI-15Information Output Filtering
SI-16Memory ProtectionM/H
SI-17Fail-safe Procedures
SI-18Personally Identifiable Information Quality Operations5개
SI-19De-identification8개
SI-20Tainting
SI-21Information Refresh
SI-22Information Diversity
SI-23Information Fragmentation
+
+
+SR — Supply Chain Risk Management (12 base / 15 enhancement) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목기준선Enhancement
SR-01Policy and ProceduresL/M/H
SR-02Supply Chain Risk Management PlanL/M/H1개
SR-03Supply Chain Controls and ProcessesL/M/H3개
SR-04Provenance4개
SR-05Acquisition Strategies, Tools, and MethodsL/M/H2개
SR-06Supplier Assessments and ReviewsM/H1개
SR-07Supply Chain Operations Security
SR-08Notification AgreementsL/M/H
SR-09Tamper Resistance and DetectionH1개
SR-10Inspection of Systems or ComponentsL/M/H
SR-11Component AuthenticityL/M/H3개
SR-12Component DisposalL/M/H
+
+
+

참고 자료

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
리소스URL
SP 800-53 Rev. 5 원문https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final
SP 800-53A (평가 절차)https://csrc.nist.gov/pubs/sp/800/53/a/r5/final
SP 800-53B (기준선)https://csrc.nist.gov/pubs/sp/800/53/b/upd1/final
OSCAL 컨트롤 카탈로그 (JSON)https://github.com/usnistgov/oscal-content/tree/main/nist.gov/SP800-53/rev5
CPRT (컨트롤 참조 도구)https://csrc.nist.gov/projects/cprt
CSF 2.0 ↔ SP 800-53 매핑https://csrc.nist.gov/files/pubs/sp/800/53/r5/upd1/final/docs/csf-pf-to-sp800-53r5-mappings.xlsx
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/NIST/SP800-53/low.md b/NIST/SP800-53/low.md deleted file mode 100644 index 906dd4d..0000000 --- a/NIST/SP800-53/low.md +++ /dev/null @@ -1,345 +0,0 @@ -# SP 800-53 LOW 체크리스트 - -## 개요 - -| 항목 | 내용 | -|------|------| -| **기준선** | LOW (낮음) | -| **영향도** | 제한적 피해 | -| **적용 대상** | 기밀성, 무결성, 가용성의 손실이 조직 운영, 자산, 개인에게 **제한적인** 부정적 영향을 미치는 시스템 | -| **총 컨트롤 수** | 149개 (base 131개 + enhancement 18개) | -| **적용 패밀리** | 18개 (PM, PT 제외) | -| **근거** | SP 800-53B, FIPS 199 | - -> LOW 기준선은 가장 기본적인 컨트롤 세트입니다. MODERATE와 HIGH 기준선은 LOW를 **완전히 포함**하며 추가 컨트롤을 요구합니다. (LOW ⊂ MODERATE ⊂ HIGH) - ---- - -## 패밀리별 컨트롤 - -### 한눈에 보기 - -| 패밀리 | 컨트롤 수 | -|--------|----------| -| AC — Access Control | 11개 | -| AT — Awareness and Training | 5개 | -| AU — Audit and Accountability | 10개 | -| CA — Assessment, Authorization, and Monitoring | 8개 | -| CM — Configuration Management | 9개 | -| CP — Contingency Planning | 6개 | -| IA — Identification and Authentication | 16개 | -| IR — Incident Response | 7개 | -| MA — Maintenance | 4개 | -| MP — Media Protection | 4개 | -| PE — Physical and Environmental Protection | 10개 | -| PL — Planning | 6개 | -| PS — Personnel Security | 9개 | -| RA — Risk Assessment | 8개 | -| SA — System and Services Acquisition | 9개 | -| SC — System and Communications Protection | 10개 | -| SI — System and Information Integrity | 6개 | -| SR — Supply Chain Risk Management | 11개 | -| **합계** | **149개** | - ---- - -
-AC — Access Control (11개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **AC-01** | **Policy and Procedures** | **Base** | -| **AC-02** | **Account Management** | **Base** | -| **AC-03** | **Access Enforcement** | **Base** | -| **AC-07** | **Unsuccessful Logon Attempts** | **Base** | -| **AC-08** | **System Use Notification** | **Base** | -| **AC-14** | **Permitted Actions Without Identification or Authentication** | **Base** | -| **AC-17** | **Remote Access** | **Base** | -| **AC-18** | **Wireless Access** | **Base** | -| **AC-19** | **Access Control for Mobile Devices** | **Base** | -| **AC-20** | **Use of External Systems** | **Base** | -| **AC-22** | **Publicly Accessible Content** | **Base** | - -
- -
-AT — Awareness and Training (5개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **AT-01** | **Policy and Procedures** | **Base** | -| **AT-02** | **Literacy Training and Awareness** | **Base** | -| ↳ AT-02(02) | Insider Threat | Enhancement | -| **AT-03** | **Role-based Training** | **Base** | -| **AT-04** | **Training Records** | **Base** | - -
- -
-AU — Audit and Accountability (10개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **AU-01** | **Policy and Procedures** | **Base** | -| **AU-02** | **Event Logging** | **Base** | -| **AU-03** | **Content of Audit Records** | **Base** | -| **AU-04** | **Audit Log Storage Capacity** | **Base** | -| **AU-05** | **Response to Audit Logging Process Failures** | **Base** | -| **AU-06** | **Audit Record Review, Analysis, and Reporting** | **Base** | -| **AU-08** | **Time Stamps** | **Base** | -| **AU-09** | **Protection of Audit Information** | **Base** | -| **AU-11** | **Audit Record Retention** | **Base** | -| **AU-12** | **Audit Record Generation** | **Base** | - -
- -
-CA — Assessment, Authorization, and Monitoring (8개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **CA-01** | **Policy and Procedures** | **Base** | -| **CA-02** | **Control Assessments** | **Base** | -| **CA-03** | **Information Exchange** | **Base** | -| **CA-05** | **Plan of Action and Milestones** | **Base** | -| **CA-06** | **Authorization** | **Base** | -| **CA-07** | **Continuous Monitoring** | **Base** | -| ↳ CA-07(04) | Risk Monitoring | Enhancement | -| **CA-09** | **Internal System Connections** | **Base** | - -
- -
-CM — Configuration Management (9개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **CM-01** | **Policy and Procedures** | **Base** | -| **CM-02** | **Baseline Configuration** | **Base** | -| **CM-04** | **Impact Analyses** | **Base** | -| **CM-05** | **Access Restrictions for Change** | **Base** | -| **CM-06** | **Configuration Settings** | **Base** | -| **CM-07** | **Least Functionality** | **Base** | -| **CM-08** | **System Component Inventory** | **Base** | -| **CM-10** | **Software Usage Restrictions** | **Base** | -| **CM-11** | **User-installed Software** | **Base** | - -
- -
-CP — Contingency Planning (6개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **CP-01** | **Policy and Procedures** | **Base** | -| **CP-02** | **Contingency Plan** | **Base** | -| **CP-03** | **Contingency Training** | **Base** | -| **CP-04** | **Contingency Plan Testing** | **Base** | -| **CP-09** | **System Backup** | **Base** | -| **CP-10** | **System Recovery and Reconstitution** | **Base** | - -
- -
-IA — Identification and Authentication (16개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **IA-01** | **Policy and Procedures** | **Base** | -| **IA-02** | **Identification and Authentication (Organizational Users)** | **Base** | -| ↳ IA-02(01) | Multi-factor Authentication to Privileged Accounts | Enhancement | -| ↳ IA-02(02) | Multi-factor Authentication to Non-privileged Accounts | Enhancement | -| ↳ IA-02(08) | Access to Accounts — Replay Resistant | Enhancement | -| ↳ IA-02(12) | Acceptance of PIV Credentials | Enhancement | -| **IA-04** | **Identifier Management** | **Base** | -| **IA-05** | **Authenticator Management** | **Base** | -| ↳ IA-05(01) | Password-based Authentication | Enhancement | -| **IA-06** | **Authentication Feedback** | **Base** | -| **IA-07** | **Cryptographic Module Authentication** | **Base** | -| **IA-08** | **Identification and Authentication (Non-organizational Users)** | **Base** | -| ↳ IA-08(01) | Acceptance of PIV Credentials from Other Agencies | Enhancement | -| ↳ IA-08(02) | Acceptance of External Authenticators | Enhancement | -| ↳ IA-08(04) | Use of Defined Profiles | Enhancement | -| **IA-11** | **Re-authentication** | **Base** | - -
- -
-IR — Incident Response (7개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **IR-01** | **Policy and Procedures** | **Base** | -| **IR-02** | **Incident Response Training** | **Base** | -| **IR-04** | **Incident Handling** | **Base** | -| **IR-05** | **Incident Monitoring** | **Base** | -| **IR-06** | **Incident Reporting** | **Base** | -| **IR-07** | **Incident Response Assistance** | **Base** | -| **IR-08** | **Incident Response Plan** | **Base** | - -
- -
-MA — Maintenance (4개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **MA-01** | **Policy and Procedures** | **Base** | -| **MA-02** | **Controlled Maintenance** | **Base** | -| **MA-04** | **Nonlocal Maintenance** | **Base** | -| **MA-05** | **Maintenance Personnel** | **Base** | - -
- -
-MP — Media Protection (4개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **MP-01** | **Policy and Procedures** | **Base** | -| **MP-02** | **Media Access** | **Base** | -| **MP-06** | **Media Sanitization** | **Base** | -| **MP-07** | **Media Use** | **Base** | - -
- -
-PE — Physical and Environmental Protection (10개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **PE-01** | **Policy and Procedures** | **Base** | -| **PE-02** | **Physical Access Authorizations** | **Base** | -| **PE-03** | **Physical Access Control** | **Base** | -| **PE-06** | **Monitoring Physical Access** | **Base** | -| **PE-08** | **Visitor Access Records** | **Base** | -| **PE-12** | **Emergency Lighting** | **Base** | -| **PE-13** | **Fire Protection** | **Base** | -| **PE-14** | **Environmental Controls** | **Base** | -| **PE-15** | **Water Damage Protection** | **Base** | -| **PE-16** | **Delivery and Removal** | **Base** | - -
- -
-PL — Planning (6개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **PL-01** | **Policy and Procedures** | **Base** | -| **PL-02** | **System Security and Privacy Plans** | **Base** | -| **PL-04** | **Rules of Behavior** | **Base** | -| ↳ PL-04(01) | Social Media and External Site/Application Usage Restrictions | Enhancement | -| **PL-10** | **Baseline Selection** | **Base** | -| **PL-11** | **Baseline Tailoring** | **Base** | - -
- -
-PS — Personnel Security (9개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **PS-01** | **Policy and Procedures** | **Base** | -| **PS-02** | **Position Risk Designation** | **Base** | -| **PS-03** | **Personnel Screening** | **Base** | -| **PS-04** | **Personnel Termination** | **Base** | -| **PS-05** | **Personnel Transfer** | **Base** | -| **PS-06** | **Access Agreements** | **Base** | -| **PS-07** | **External Personnel Security** | **Base** | -| **PS-08** | **Personnel Sanctions** | **Base** | -| **PS-09** | **Position Descriptions** | **Base** | - -
- -
-RA — Risk Assessment (8개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **RA-01** | **Policy and Procedures** | **Base** | -| **RA-02** | **Security Categorization** | **Base** | -| **RA-03** | **Risk Assessment** | **Base** | -| ↳ RA-03(01) | Supply Chain Risk Assessment | Enhancement | -| **RA-05** | **Vulnerability Monitoring and Scanning** | **Base** | -| ↳ RA-05(02) | Update Vulnerabilities to Be Scanned | Enhancement | -| ↳ RA-05(11) | Public Disclosure Program | Enhancement | -| **RA-07** | **Risk Response** | **Base** | - -
- -
-SA — System and Services Acquisition (9개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SA-01** | **Policy and Procedures** | **Base** | -| **SA-02** | **Allocation of Resources** | **Base** | -| **SA-03** | **System Development Life Cycle** | **Base** | -| **SA-04** | **Acquisition Process** | **Base** | -| ↳ SA-04(10) | Use of Approved PIV Products | Enhancement | -| **SA-05** | **System Documentation** | **Base** | -| **SA-08** | **Security and Privacy Engineering Principles** | **Base** | -| **SA-09** | **External System Services** | **Base** | -| **SA-22** | **Unsupported System Components** | **Base** | - -
- -
-SC — System and Communications Protection (10개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SC-01** | **Policy and Procedures** | **Base** | -| **SC-05** | **Denial-of-service Protection** | **Base** | -| **SC-07** | **Boundary Protection** | **Base** | -| **SC-12** | **Cryptographic Key Establishment and Management** | **Base** | -| **SC-13** | **Cryptographic Protection** | **Base** | -| **SC-15** | **Collaborative Computing Devices and Applications** | **Base** | -| **SC-20** | **Secure Name/Address Resolution Service (Authoritative Source)** | **Base** | -| **SC-21** | **Secure Name/Address Resolution Service (Recursive or Caching Resolver)** | **Base** | -| **SC-22** | **Architecture and Provisioning for Name/Address Resolution Service** | **Base** | -| **SC-39** | **Process Isolation** | **Base** | - -
- -
-SI — System and Information Integrity (6개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SI-01** | **Policy and Procedures** | **Base** | -| **SI-02** | **Flaw Remediation** | **Base** | -| **SI-03** | **Malicious Code Protection** | **Base** | -| **SI-04** | **System Monitoring** | **Base** | -| **SI-05** | **Security Alerts, Advisories, and Directives** | **Base** | -| **SI-12** | **Information Management and Retention** | **Base** | - -
- -
-SR — Supply Chain Risk Management (11개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SR-01** | **Policy and Procedures** | **Base** | -| **SR-02** | **Supply Chain Risk Management Plan** | **Base** | -| ↳ SR-02(01) | Establish SCRM Team | Enhancement | -| **SR-03** | **Supply Chain Controls and Processes** | **Base** | -| **SR-05** | **Acquisition Strategies, Tools, and Methods** | **Base** | -| **SR-08** | **Notification Agreements** | **Base** | -| **SR-10** | **Inspection of Systems or Components** | **Base** | -| **SR-11** | **Component Authenticity** | **Base** | -| ↳ SR-11(01) | Anti-counterfeit Training | Enhancement | -| ↳ SR-11(02) | Configuration Control for Component Service and Repair | Enhancement | -| **SR-12** | **Component Disposal** | **Base** | - -
- ---- - -## 참고 - -- 이 체크리스트는 NIST OSCAL 공식 프로파일에서 추출한 데이터 기준입니다. -- PM(Program Management)과 PT(PII Processing and Transparency) 패밀리는 기준선에 포함되지 않으며, 조직 수준에서 별도 적용됩니다. -- 컨트롤 상세(Statement, Guidance 등)는 [SP 800-53 상세 문서](../README.md)를 참고하세요. \ No newline at end of file diff --git a/NIST/SP800-53/low/index.html b/NIST/SP800-53/low/index.html new file mode 100644 index 0000000..7a460b6 --- /dev/null +++ b/NIST/SP800-53/low/index.html @@ -0,0 +1,3054 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SP 800-53B LOW - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + +

SP 800-53 LOW 체크리스트

+

개요

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
기준선LOW (낮음)
영향도제한적 피해
적용 대상기밀성, 무결성, 가용성의 손실이 조직 운영, 자산, 개인에게 제한적인 부정적 영향을 미치는 시스템
총 컨트롤 수149개 (base 131개 + enhancement 18개)
적용 패밀리18개 (PM, PT 제외)
근거SP 800-53B, FIPS 199
+
+

LOW 기준선은 가장 기본적인 컨트롤 세트입니다. MODERATE와 HIGH 기준선은 LOW를 완전히 포함하며 추가 컨트롤을 요구합니다. (LOW ⊂ MODERATE ⊂ HIGH)

+
+
+

패밀리별 컨트롤

+

한눈에 보기

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
패밀리컨트롤 수
AC — Access Control11개
AT — Awareness and Training5개
AU — Audit and Accountability10개
CA — Assessment, Authorization, and Monitoring8개
CM — Configuration Management9개
CP — Contingency Planning6개
IA — Identification and Authentication16개
IR — Incident Response7개
MA — Maintenance4개
MP — Media Protection4개
PE — Physical and Environmental Protection10개
PL — Planning6개
PS — Personnel Security9개
RA — Risk Assessment8개
SA — System and Services Acquisition9개
SC — System and Communications Protection10개
SI — System and Information Integrity6개
SR — Supply Chain Risk Management11개
합계149개
+
+
+AC — Access Control (11개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
AC-01Policy and ProceduresBase
AC-02Account ManagementBase
AC-03Access EnforcementBase
AC-07Unsuccessful Logon AttemptsBase
AC-08System Use NotificationBase
AC-14Permitted Actions Without Identification or AuthenticationBase
AC-17Remote AccessBase
AC-18Wireless AccessBase
AC-19Access Control for Mobile DevicesBase
AC-20Use of External SystemsBase
AC-22Publicly Accessible ContentBase
+
+
+AT — Awareness and Training (5개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
AT-01Policy and ProceduresBase
AT-02Literacy Training and AwarenessBase
↳ AT-02(02)Insider ThreatEnhancement
AT-03Role-based TrainingBase
AT-04Training RecordsBase
+
+
+AU — Audit and Accountability (10개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
AU-01Policy and ProceduresBase
AU-02Event LoggingBase
AU-03Content of Audit RecordsBase
AU-04Audit Log Storage CapacityBase
AU-05Response to Audit Logging Process FailuresBase
AU-06Audit Record Review, Analysis, and ReportingBase
AU-08Time StampsBase
AU-09Protection of Audit InformationBase
AU-11Audit Record RetentionBase
AU-12Audit Record GenerationBase
+
+
+CA — Assessment, Authorization, and Monitoring (8개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
CA-01Policy and ProceduresBase
CA-02Control AssessmentsBase
CA-03Information ExchangeBase
CA-05Plan of Action and MilestonesBase
CA-06AuthorizationBase
CA-07Continuous MonitoringBase
↳ CA-07(04)Risk MonitoringEnhancement
CA-09Internal System ConnectionsBase
+
+
+CM — Configuration Management (9개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
CM-01Policy and ProceduresBase
CM-02Baseline ConfigurationBase
CM-04Impact AnalysesBase
CM-05Access Restrictions for ChangeBase
CM-06Configuration SettingsBase
CM-07Least FunctionalityBase
CM-08System Component InventoryBase
CM-10Software Usage RestrictionsBase
CM-11User-installed SoftwareBase
+
+
+CP — Contingency Planning (6개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
CP-01Policy and ProceduresBase
CP-02Contingency PlanBase
CP-03Contingency TrainingBase
CP-04Contingency Plan TestingBase
CP-09System BackupBase
CP-10System Recovery and ReconstitutionBase
+
+
+IA — Identification and Authentication (16개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
IA-01Policy and ProceduresBase
IA-02Identification and Authentication (Organizational Users)Base
↳ IA-02(01)Multi-factor Authentication to Privileged AccountsEnhancement
↳ IA-02(02)Multi-factor Authentication to Non-privileged AccountsEnhancement
↳ IA-02(08)Access to Accounts — Replay ResistantEnhancement
↳ IA-02(12)Acceptance of PIV CredentialsEnhancement
IA-04Identifier ManagementBase
IA-05Authenticator ManagementBase
↳ IA-05(01)Password-based AuthenticationEnhancement
IA-06Authentication FeedbackBase
IA-07Cryptographic Module AuthenticationBase
IA-08Identification and Authentication (Non-organizational Users)Base
↳ IA-08(01)Acceptance of PIV Credentials from Other AgenciesEnhancement
↳ IA-08(02)Acceptance of External AuthenticatorsEnhancement
↳ IA-08(04)Use of Defined ProfilesEnhancement
IA-11Re-authenticationBase
+
+
+IR — Incident Response (7개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
IR-01Policy and ProceduresBase
IR-02Incident Response TrainingBase
IR-04Incident HandlingBase
IR-05Incident MonitoringBase
IR-06Incident ReportingBase
IR-07Incident Response AssistanceBase
IR-08Incident Response PlanBase
+
+
+MA — Maintenance (4개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
MA-01Policy and ProceduresBase
MA-02Controlled MaintenanceBase
MA-04Nonlocal MaintenanceBase
MA-05Maintenance PersonnelBase
+
+
+MP — Media Protection (4개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
MP-01Policy and ProceduresBase
MP-02Media AccessBase
MP-06Media SanitizationBase
MP-07Media UseBase
+
+
+PE — Physical and Environmental Protection (10개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
PE-01Policy and ProceduresBase
PE-02Physical Access AuthorizationsBase
PE-03Physical Access ControlBase
PE-06Monitoring Physical AccessBase
PE-08Visitor Access RecordsBase
PE-12Emergency LightingBase
PE-13Fire ProtectionBase
PE-14Environmental ControlsBase
PE-15Water Damage ProtectionBase
PE-16Delivery and RemovalBase
+
+
+PL — Planning (6개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
PL-01Policy and ProceduresBase
PL-02System Security and Privacy PlansBase
PL-04Rules of BehaviorBase
↳ PL-04(01)Social Media and External Site/Application Usage RestrictionsEnhancement
PL-10Baseline SelectionBase
PL-11Baseline TailoringBase
+
+
+PS — Personnel Security (9개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
PS-01Policy and ProceduresBase
PS-02Position Risk DesignationBase
PS-03Personnel ScreeningBase
PS-04Personnel TerminationBase
PS-05Personnel TransferBase
PS-06Access AgreementsBase
PS-07External Personnel SecurityBase
PS-08Personnel SanctionsBase
PS-09Position DescriptionsBase
+
+
+RA — Risk Assessment (8개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
RA-01Policy and ProceduresBase
RA-02Security CategorizationBase
RA-03Risk AssessmentBase
↳ RA-03(01)Supply Chain Risk AssessmentEnhancement
RA-05Vulnerability Monitoring and ScanningBase
↳ RA-05(02)Update Vulnerabilities to Be ScannedEnhancement
↳ RA-05(11)Public Disclosure ProgramEnhancement
RA-07Risk ResponseBase
+
+
+SA — System and Services Acquisition (9개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SA-01Policy and ProceduresBase
SA-02Allocation of ResourcesBase
SA-03System Development Life CycleBase
SA-04Acquisition ProcessBase
↳ SA-04(10)Use of Approved PIV ProductsEnhancement
SA-05System DocumentationBase
SA-08Security and Privacy Engineering PrinciplesBase
SA-09External System ServicesBase
SA-22Unsupported System ComponentsBase
+
+
+SC — System and Communications Protection (10개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SC-01Policy and ProceduresBase
SC-05Denial-of-service ProtectionBase
SC-07Boundary ProtectionBase
SC-12Cryptographic Key Establishment and ManagementBase
SC-13Cryptographic ProtectionBase
SC-15Collaborative Computing Devices and ApplicationsBase
SC-20Secure Name/Address Resolution Service (Authoritative Source)Base
SC-21Secure Name/Address Resolution Service (Recursive or Caching Resolver)Base
SC-22Architecture and Provisioning for Name/Address Resolution ServiceBase
SC-39Process IsolationBase
+
+
+SI — System and Information Integrity (6개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SI-01Policy and ProceduresBase
SI-02Flaw RemediationBase
SI-03Malicious Code ProtectionBase
SI-04System MonitoringBase
SI-05Security Alerts, Advisories, and DirectivesBase
SI-12Information Management and RetentionBase
+
+
+SR — Supply Chain Risk Management (11개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SR-01Policy and ProceduresBase
SR-02Supply Chain Risk Management PlanBase
↳ SR-02(01)Establish SCRM TeamEnhancement
SR-03Supply Chain Controls and ProcessesBase
SR-05Acquisition Strategies, Tools, and MethodsBase
SR-08Notification AgreementsBase
SR-10Inspection of Systems or ComponentsBase
SR-11Component AuthenticityBase
↳ SR-11(01)Anti-counterfeit TrainingEnhancement
↳ SR-11(02)Configuration Control for Component Service and RepairEnhancement
SR-12Component DisposalBase
+
+
+

참고

+
    +
  • 이 체크리스트는 NIST OSCAL 공식 프로파일에서 추출한 데이터 기준입니다.
  • +
  • PM(Program Management)과 PT(PII Processing and Transparency) 패밀리는 기준선에 포함되지 않으며, 조직 수준에서 별도 적용됩니다.
  • +
  • 컨트롤 상세(Statement, Guidance 등)는 SP 800-53 상세 문서를 참고하세요.
  • +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/NIST/SP800-53/moderate.md b/NIST/SP800-53/moderate.md deleted file mode 100644 index 916925f..0000000 --- a/NIST/SP800-53/moderate.md +++ /dev/null @@ -1,483 +0,0 @@ -# SP 800-53 MODERATE 체크리스트 - -## 개요 - -| 항목 | 내용 | -|------|------| -| **기준선** | MODERATE (보통) | -| **영향도** | 심각한 피해 | -| **적용 대상** | 기밀성, 무결성, 가용성의 손실이 조직 운영, 자산, 개인에게 **심각한** 부정적 영향을 미치는 시스템 | -| **총 컨트롤 수** | 287개 (base 177개 + enhancement 110개) | -| **적용 패밀리** | 18개 (PM, PT 제외) | -| **근거** | SP 800-53B, FIPS 199 | - -> MODERATE 기준선은 LOW(149개)를 **완전히 포함**하며, 138개가 추가된 총 287개입니다. MODERATE만 충족하면 LOW는 별도로 충족할 필요가 없습니다. (LOW ⊂ MODERATE ⊂ HIGH) - ---- - -## 패밀리별 컨트롤 - -### 한눈에 보기 - -| 패밀리 | 컨트롤 수 | -|--------|----------| -| AC — Access Control | 39개 | -| AT — Awareness and Training | 6개 | -| AU — Audit and Accountability | 16개 | -| CA — Assessment, Authorization, and Monitoring | 10개 | -| CM — Configuration Management | 24개 | -| CP — Contingency Planning | 23개 | -| IA — Identification and Authentication | 24개 | -| IR — Incident Response | 13개 | -| MA — Maintenance | 9개 | -| MP — Media Protection | 7개 | -| PE — Physical and Environmental Protection | 18개 | -| PL — Planning | 7개 | -| PS — Personnel Security | 9개 | -| RA — Risk Assessment | 10개 | -| SA — System and Services Acquisition | 17개 | -| SC — System and Communications Protection | 25개 | -| SI — System and Information Integrity | 18개 | -| SR — Supply Chain Risk Management | 12개 | -| **합계** | **287개** | - ---- - -
-AC — Access Control (39개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **AC-01** | **Policy and Procedures** | **Base** | -| **AC-02** | **Account Management** | **Base** | -| ↳ AC-02(01) | Automated System Account Management | Enhancement | -| ↳ AC-02(02) | Automated Temporary and Emergency Account Management | Enhancement | -| ↳ AC-02(03) | Disable Accounts | Enhancement | -| ↳ AC-02(04) | Automated Audit Actions | Enhancement | -| ↳ AC-02(05) | Inactivity Logout | Enhancement | -| ↳ AC-02(13) | Disable Accounts for High-risk Individuals | Enhancement | -| **AC-03** | **Access Enforcement** | **Base** | -| **AC-04** | **Information Flow Enforcement** | **Base** | -| **AC-05** | **Separation of Duties** | **Base** | -| **AC-06** | **Least Privilege** | **Base** | -| ↳ AC-06(01) | Authorize Access to Security Functions | Enhancement | -| ↳ AC-06(02) | Non-privileged Access for Nonsecurity Functions | Enhancement | -| ↳ AC-06(05) | Privileged Accounts | Enhancement | -| ↳ AC-06(07) | Review of User Privileges | Enhancement | -| ↳ AC-06(09) | Log Use of Privileged Functions | Enhancement | -| ↳ AC-06(10) | Prohibit Non-privileged Users from Executing Privileged Functions | Enhancement | -| **AC-07** | **Unsuccessful Logon Attempts** | **Base** | -| **AC-08** | **System Use Notification** | **Base** | -| **AC-11** | **Device Lock** | **Base** | -| ↳ AC-11(01) | Pattern-hiding Displays | Enhancement | -| **AC-12** | **Session Termination** | **Base** | -| **AC-14** | **Permitted Actions Without Identification or Authentication** | **Base** | -| **AC-17** | **Remote Access** | **Base** | -| ↳ AC-17(01) | Monitoring and Control | Enhancement | -| ↳ AC-17(02) | Protection of Confidentiality and Integrity Using Encryption | Enhancement | -| ↳ AC-17(03) | Managed Access Control Points | Enhancement | -| ↳ AC-17(04) | Privileged Commands and Access | Enhancement | -| **AC-18** | **Wireless Access** | **Base** | -| ↳ AC-18(01) | Authentication and Encryption | Enhancement | -| ↳ AC-18(03) | Disable Wireless Networking | Enhancement | -| **AC-19** | **Access Control for Mobile Devices** | **Base** | -| ↳ AC-19(05) | Full Device or Container-based Encryption | Enhancement | -| **AC-20** | **Use of External Systems** | **Base** | -| ↳ AC-20(01) | Limits on Authorized Use | Enhancement | -| ↳ AC-20(02) | Portable Storage Devices — Restricted Use | Enhancement | -| **AC-21** | **Information Sharing** | **Base** | -| **AC-22** | **Publicly Accessible Content** | **Base** | - -
- -
-AT — Awareness and Training (6개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **AT-01** | **Policy and Procedures** | **Base** | -| **AT-02** | **Literacy Training and Awareness** | **Base** | -| ↳ AT-02(02) | Insider Threat | Enhancement | -| ↳ AT-02(03) | Social Engineering and Mining | Enhancement | -| **AT-03** | **Role-based Training** | **Base** | -| **AT-04** | **Training Records** | **Base** | - -
- -
-AU — Audit and Accountability (16개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **AU-01** | **Policy and Procedures** | **Base** | -| **AU-02** | **Event Logging** | **Base** | -| **AU-03** | **Content of Audit Records** | **Base** | -| ↳ AU-03(01) | Additional Audit Information | Enhancement | -| **AU-04** | **Audit Log Storage Capacity** | **Base** | -| **AU-05** | **Response to Audit Logging Process Failures** | **Base** | -| **AU-06** | **Audit Record Review, Analysis, and Reporting** | **Base** | -| ↳ AU-06(01) | Automated Process Integration | Enhancement | -| ↳ AU-06(03) | Correlate Audit Record Repositories | Enhancement | -| **AU-07** | **Audit Record Reduction and Report Generation** | **Base** | -| ↳ AU-07(01) | Automatic Processing | Enhancement | -| **AU-08** | **Time Stamps** | **Base** | -| **AU-09** | **Protection of Audit Information** | **Base** | -| ↳ AU-09(04) | Access by Subset of Privileged Users | Enhancement | -| **AU-11** | **Audit Record Retention** | **Base** | -| **AU-12** | **Audit Record Generation** | **Base** | - -
- -
-CA — Assessment, Authorization, and Monitoring (10개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **CA-01** | **Policy and Procedures** | **Base** | -| **CA-02** | **Control Assessments** | **Base** | -| ↳ CA-02(01) | Independent Assessors | Enhancement | -| **CA-03** | **Information Exchange** | **Base** | -| **CA-05** | **Plan of Action and Milestones** | **Base** | -| **CA-06** | **Authorization** | **Base** | -| **CA-07** | **Continuous Monitoring** | **Base** | -| ↳ CA-07(01) | Independent Assessment | Enhancement | -| ↳ CA-07(04) | Risk Monitoring | Enhancement | -| **CA-09** | **Internal System Connections** | **Base** | - -
- -
-CM — Configuration Management (24개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **CM-01** | **Policy and Procedures** | **Base** | -| **CM-02** | **Baseline Configuration** | **Base** | -| ↳ CM-02(02) | Automation Support for Accuracy and Currency | Enhancement | -| ↳ CM-02(03) | Retention of Previous Configurations | Enhancement | -| ↳ CM-02(07) | Configure Systems and Components for High-risk Areas | Enhancement | -| **CM-03** | **Configuration Change Control** | **Base** | -| ↳ CM-03(02) | Testing, Validation, and Documentation of Changes | Enhancement | -| ↳ CM-03(04) | Security and Privacy Representatives | Enhancement | -| **CM-04** | **Impact Analyses** | **Base** | -| ↳ CM-04(02) | Verification of Controls | Enhancement | -| **CM-05** | **Access Restrictions for Change** | **Base** | -| **CM-06** | **Configuration Settings** | **Base** | -| **CM-07** | **Least Functionality** | **Base** | -| ↳ CM-07(01) | Periodic Review | Enhancement | -| ↳ CM-07(02) | Prevent Program Execution | Enhancement | -| ↳ CM-07(05) | Authorized Software — Allow-by-exception | Enhancement | -| **CM-08** | **System Component Inventory** | **Base** | -| ↳ CM-08(01) | Updates During Installation and Removal | Enhancement | -| ↳ CM-08(03) | Automated Unauthorized Component Detection | Enhancement | -| **CM-09** | **Configuration Management Plan** | **Base** | -| **CM-10** | **Software Usage Restrictions** | **Base** | -| **CM-11** | **User-installed Software** | **Base** | -| **CM-12** | **Information Location** | **Base** | -| ↳ CM-12(01) | Automated Tools to Support Information Location | Enhancement | - -
- -
-CP — Contingency Planning (23개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **CP-01** | **Policy and Procedures** | **Base** | -| **CP-02** | **Contingency Plan** | **Base** | -| ↳ CP-02(01) | Coordinate with Related Plans | Enhancement | -| ↳ CP-02(03) | Resume Mission and Business Functions | Enhancement | -| ↳ CP-02(08) | Identify Critical Assets | Enhancement | -| **CP-03** | **Contingency Training** | **Base** | -| **CP-04** | **Contingency Plan Testing** | **Base** | -| ↳ CP-04(01) | Coordinate with Related Plans | Enhancement | -| **CP-06** | **Alternate Storage Site** | **Base** | -| ↳ CP-06(01) | Separation from Primary Site | Enhancement | -| ↳ CP-06(03) | Accessibility | Enhancement | -| **CP-07** | **Alternate Processing Site** | **Base** | -| ↳ CP-07(01) | Separation from Primary Site | Enhancement | -| ↳ CP-07(02) | Accessibility | Enhancement | -| ↳ CP-07(03) | Priority of Service | Enhancement | -| **CP-08** | **Telecommunications Services** | **Base** | -| ↳ CP-08(01) | Priority of Service Provisions | Enhancement | -| ↳ CP-08(02) | Single Points of Failure | Enhancement | -| **CP-09** | **System Backup** | **Base** | -| ↳ CP-09(01) | Testing for Reliability and Integrity | Enhancement | -| ↳ CP-09(08) | Cryptographic Protection | Enhancement | -| **CP-10** | **System Recovery and Reconstitution** | **Base** | -| ↳ CP-10(02) | Transaction Recovery | Enhancement | - -
- -
-IA — Identification and Authentication (24개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **IA-01** | **Policy and Procedures** | **Base** | -| **IA-02** | **Identification and Authentication (Organizational Users)** | **Base** | -| ↳ IA-02(01) | Multi-factor Authentication to Privileged Accounts | Enhancement | -| ↳ IA-02(02) | Multi-factor Authentication to Non-privileged Accounts | Enhancement | -| ↳ IA-02(08) | Access to Accounts — Replay Resistant | Enhancement | -| ↳ IA-02(12) | Acceptance of PIV Credentials | Enhancement | -| **IA-03** | **Device Identification and Authentication** | **Base** | -| **IA-04** | **Identifier Management** | **Base** | -| ↳ IA-04(04) | Identify User Status | Enhancement | -| **IA-05** | **Authenticator Management** | **Base** | -| ↳ IA-05(01) | Password-based Authentication | Enhancement | -| ↳ IA-05(02) | Public Key-based Authentication | Enhancement | -| ↳ IA-05(06) | Protection of Authenticators | Enhancement | -| **IA-06** | **Authentication Feedback** | **Base** | -| **IA-07** | **Cryptographic Module Authentication** | **Base** | -| **IA-08** | **Identification and Authentication (Non-organizational Users)** | **Base** | -| ↳ IA-08(01) | Acceptance of PIV Credentials from Other Agencies | Enhancement | -| ↳ IA-08(02) | Acceptance of External Authenticators | Enhancement | -| ↳ IA-08(04) | Use of Defined Profiles | Enhancement | -| **IA-11** | **Re-authentication** | **Base** | -| **IA-12** | **Identity Proofing** | **Base** | -| ↳ IA-12(02) | Identity Evidence | Enhancement | -| ↳ IA-12(03) | Identity Evidence Validation and Verification | Enhancement | -| ↳ IA-12(05) | Address Confirmation | Enhancement | - -
- -
-IR — Incident Response (13개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **IR-01** | **Policy and Procedures** | **Base** | -| **IR-02** | **Incident Response Training** | **Base** | -| **IR-03** | **Incident Response Testing** | **Base** | -| ↳ IR-03(02) | Coordination with Related Plans | Enhancement | -| **IR-04** | **Incident Handling** | **Base** | -| ↳ IR-04(01) | Automated Incident Handling Processes | Enhancement | -| **IR-05** | **Incident Monitoring** | **Base** | -| **IR-06** | **Incident Reporting** | **Base** | -| ↳ IR-06(01) | Automated Reporting | Enhancement | -| ↳ IR-06(03) | Supply Chain Coordination | Enhancement | -| **IR-07** | **Incident Response Assistance** | **Base** | -| ↳ IR-07(01) | Automation Support for Availability of Information and Support | Enhancement | -| **IR-08** | **Incident Response Plan** | **Base** | - -
- -
-MA — Maintenance (9개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **MA-01** | **Policy and Procedures** | **Base** | -| **MA-02** | **Controlled Maintenance** | **Base** | -| **MA-03** | **Maintenance Tools** | **Base** | -| ↳ MA-03(01) | Inspect Tools | Enhancement | -| ↳ MA-03(02) | Inspect Media | Enhancement | -| ↳ MA-03(03) | Prevent Unauthorized Removal | Enhancement | -| **MA-04** | **Nonlocal Maintenance** | **Base** | -| **MA-05** | **Maintenance Personnel** | **Base** | -| **MA-06** | **Timely Maintenance** | **Base** | - -
- -
-MP — Media Protection (7개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **MP-01** | **Policy and Procedures** | **Base** | -| **MP-02** | **Media Access** | **Base** | -| **MP-03** | **Media Marking** | **Base** | -| **MP-04** | **Media Storage** | **Base** | -| **MP-05** | **Media Transport** | **Base** | -| **MP-06** | **Media Sanitization** | **Base** | -| **MP-07** | **Media Use** | **Base** | - -
- -
-PE — Physical and Environmental Protection (18개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **PE-01** | **Policy and Procedures** | **Base** | -| **PE-02** | **Physical Access Authorizations** | **Base** | -| **PE-03** | **Physical Access Control** | **Base** | -| **PE-04** | **Access Control for Transmission** | **Base** | -| **PE-05** | **Access Control for Output Devices** | **Base** | -| **PE-06** | **Monitoring Physical Access** | **Base** | -| ↳ PE-06(01) | Intrusion Alarms and Surveillance Equipment | Enhancement | -| **PE-08** | **Visitor Access Records** | **Base** | -| **PE-09** | **Power Equipment and Cabling** | **Base** | -| **PE-10** | **Emergency Shutoff** | **Base** | -| **PE-11** | **Emergency Power** | **Base** | -| **PE-12** | **Emergency Lighting** | **Base** | -| **PE-13** | **Fire Protection** | **Base** | -| ↳ PE-13(01) | Detection Systems — Automatic Activation and Notification | Enhancement | -| **PE-14** | **Environmental Controls** | **Base** | -| **PE-15** | **Water Damage Protection** | **Base** | -| **PE-16** | **Delivery and Removal** | **Base** | -| **PE-17** | **Alternate Work Site** | **Base** | - -
- -
-PL — Planning (7개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **PL-01** | **Policy and Procedures** | **Base** | -| **PL-02** | **System Security and Privacy Plans** | **Base** | -| **PL-04** | **Rules of Behavior** | **Base** | -| ↳ PL-04(01) | Social Media and External Site/Application Usage Restrictions | Enhancement | -| **PL-08** | **Security and Privacy Architectures** | **Base** | -| **PL-10** | **Baseline Selection** | **Base** | -| **PL-11** | **Baseline Tailoring** | **Base** | - -
- -
-PS — Personnel Security (9개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **PS-01** | **Policy and Procedures** | **Base** | -| **PS-02** | **Position Risk Designation** | **Base** | -| **PS-03** | **Personnel Screening** | **Base** | -| **PS-04** | **Personnel Termination** | **Base** | -| **PS-05** | **Personnel Transfer** | **Base** | -| **PS-06** | **Access Agreements** | **Base** | -| **PS-07** | **External Personnel Security** | **Base** | -| **PS-08** | **Personnel Sanctions** | **Base** | -| **PS-09** | **Position Descriptions** | **Base** | - -
- -
-RA — Risk Assessment (10개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **RA-01** | **Policy and Procedures** | **Base** | -| **RA-02** | **Security Categorization** | **Base** | -| **RA-03** | **Risk Assessment** | **Base** | -| ↳ RA-03(01) | Supply Chain Risk Assessment | Enhancement | -| **RA-05** | **Vulnerability Monitoring and Scanning** | **Base** | -| ↳ RA-05(02) | Update Vulnerabilities to Be Scanned | Enhancement | -| ↳ RA-05(05) | Privileged Access | Enhancement | -| ↳ RA-05(11) | Public Disclosure Program | Enhancement | -| **RA-07** | **Risk Response** | **Base** | -| **RA-09** | **Criticality Analysis** | **Base** | - -
- -
-SA — System and Services Acquisition (17개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SA-01** | **Policy and Procedures** | **Base** | -| **SA-02** | **Allocation of Resources** | **Base** | -| **SA-03** | **System Development Life Cycle** | **Base** | -| **SA-04** | **Acquisition Process** | **Base** | -| ↳ SA-04(01) | Functional Properties of Controls | Enhancement | -| ↳ SA-04(02) | Design and Implementation Information for Controls | Enhancement | -| ↳ SA-04(09) | Functions, Ports, Protocols, and Services in Use | Enhancement | -| ↳ SA-04(10) | Use of Approved PIV Products | Enhancement | -| **SA-05** | **System Documentation** | **Base** | -| **SA-08** | **Security and Privacy Engineering Principles** | **Base** | -| **SA-09** | **External System Services** | **Base** | -| ↳ SA-09(02) | Identification of Functions, Ports, Protocols, and Services | Enhancement | -| **SA-10** | **Developer Configuration Management** | **Base** | -| **SA-11** | **Developer Testing and Evaluation** | **Base** | -| **SA-15** | **Development Process, Standards, and Tools** | **Base** | -| ↳ SA-15(03) | Criticality Analysis | Enhancement | -| **SA-22** | **Unsupported System Components** | **Base** | - -
- -
-SC — System and Communications Protection (25개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SC-01** | **Policy and Procedures** | **Base** | -| **SC-02** | **Separation of System and User Functionality** | **Base** | -| **SC-04** | **Information in Shared System Resources** | **Base** | -| **SC-05** | **Denial-of-service Protection** | **Base** | -| **SC-07** | **Boundary Protection** | **Base** | -| ↳ SC-07(03) | Access Points | Enhancement | -| ↳ SC-07(04) | External Telecommunications Services | Enhancement | -| ↳ SC-07(05) | Deny by Default — Allow by Exception | Enhancement | -| ↳ SC-07(07) | Split Tunneling for Remote Devices | Enhancement | -| ↳ SC-07(08) | Route Traffic to Authenticated Proxy Servers | Enhancement | -| **SC-08** | **Transmission Confidentiality and Integrity** | **Base** | -| ↳ SC-08(01) | Cryptographic Protection | Enhancement | -| **SC-10** | **Network Disconnect** | **Base** | -| **SC-12** | **Cryptographic Key Establishment and Management** | **Base** | -| **SC-13** | **Cryptographic Protection** | **Base** | -| **SC-15** | **Collaborative Computing Devices and Applications** | **Base** | -| **SC-17** | **Public Key Infrastructure Certificates** | **Base** | -| **SC-18** | **Mobile Code** | **Base** | -| **SC-20** | **Secure Name/Address Resolution Service (Authoritative Source)** | **Base** | -| **SC-21** | **Secure Name/Address Resolution Service (Recursive or Caching Resolver)** | **Base** | -| **SC-22** | **Architecture and Provisioning for Name/Address Resolution Service** | **Base** | -| **SC-23** | **Session Authenticity** | **Base** | -| **SC-28** | **Protection of Information at Rest** | **Base** | -| ↳ SC-28(01) | Cryptographic Protection | Enhancement | -| **SC-39** | **Process Isolation** | **Base** | - -
- -
-SI — System and Information Integrity (18개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SI-01** | **Policy and Procedures** | **Base** | -| **SI-02** | **Flaw Remediation** | **Base** | -| ↳ SI-02(02) | Automated Flaw Remediation Status | Enhancement | -| **SI-03** | **Malicious Code Protection** | **Base** | -| **SI-04** | **System Monitoring** | **Base** | -| ↳ SI-04(02) | Automated Tools and Mechanisms for Real-time Analysis | Enhancement | -| ↳ SI-04(04) | Inbound and Outbound Communications Traffic | Enhancement | -| ↳ SI-04(05) | System-generated Alerts | Enhancement | -| **SI-05** | **Security Alerts, Advisories, and Directives** | **Base** | -| **SI-07** | **Software, Firmware, and Information Integrity** | **Base** | -| ↳ SI-07(01) | Integrity Checks | Enhancement | -| ↳ SI-07(07) | Integration of Detection and Response | Enhancement | -| **SI-08** | **Spam Protection** | **Base** | -| ↳ SI-08(02) | Automatic Updates | Enhancement | -| **SI-10** | **Information Input Validation** | **Base** | -| **SI-11** | **Error Handling** | **Base** | -| **SI-12** | **Information Management and Retention** | **Base** | -| **SI-16** | **Memory Protection** | **Base** | - -
- -
-SR — Supply Chain Risk Management (12개) - -| 컨트롤 | 제목 | 유형 | -|--------|------|------| -| **SR-01** | **Policy and Procedures** | **Base** | -| **SR-02** | **Supply Chain Risk Management Plan** | **Base** | -| ↳ SR-02(01) | Establish SCRM Team | Enhancement | -| **SR-03** | **Supply Chain Controls and Processes** | **Base** | -| **SR-05** | **Acquisition Strategies, Tools, and Methods** | **Base** | -| **SR-06** | **Supplier Assessments and Reviews** | **Base** | -| **SR-08** | **Notification Agreements** | **Base** | -| **SR-10** | **Inspection of Systems or Components** | **Base** | -| **SR-11** | **Component Authenticity** | **Base** | -| ↳ SR-11(01) | Anti-counterfeit Training | Enhancement | -| ↳ SR-11(02) | Configuration Control for Component Service and Repair | Enhancement | -| **SR-12** | **Component Disposal** | **Base** | - -
- ---- - -## 참고 - -- 이 체크리스트는 NIST OSCAL 공식 프로파일에서 추출한 데이터 기준입니다. -- PM(Program Management)과 PT(PII Processing and Transparency) 패밀리는 기준선에 포함되지 않으며, 조직 수준에서 별도 적용됩니다. -- 컨트롤 상세(Statement, Guidance 등)는 [SP 800-53 상세 문서](../README.md)를 참고하세요. \ No newline at end of file diff --git a/NIST/SP800-53/moderate/index.html b/NIST/SP800-53/moderate/index.html new file mode 100644 index 0000000..35a9720 --- /dev/null +++ b/NIST/SP800-53/moderate/index.html @@ -0,0 +1,3744 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SP 800-53B MODERATE - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + +

SP 800-53 MODERATE 체크리스트

+

개요

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
기준선MODERATE (보통)
영향도심각한 피해
적용 대상기밀성, 무결성, 가용성의 손실이 조직 운영, 자산, 개인에게 심각한 부정적 영향을 미치는 시스템
총 컨트롤 수287개 (base 177개 + enhancement 110개)
적용 패밀리18개 (PM, PT 제외)
근거SP 800-53B, FIPS 199
+
+

MODERATE 기준선은 LOW(149개)를 완전히 포함하며, 138개가 추가된 총 287개입니다. MODERATE만 충족하면 LOW는 별도로 충족할 필요가 없습니다. (LOW ⊂ MODERATE ⊂ HIGH)

+
+
+

패밀리별 컨트롤

+

한눈에 보기

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
패밀리컨트롤 수
AC — Access Control39개
AT — Awareness and Training6개
AU — Audit and Accountability16개
CA — Assessment, Authorization, and Monitoring10개
CM — Configuration Management24개
CP — Contingency Planning23개
IA — Identification and Authentication24개
IR — Incident Response13개
MA — Maintenance9개
MP — Media Protection7개
PE — Physical and Environmental Protection18개
PL — Planning7개
PS — Personnel Security9개
RA — Risk Assessment10개
SA — System and Services Acquisition17개
SC — System and Communications Protection25개
SI — System and Information Integrity18개
SR — Supply Chain Risk Management12개
합계287개
+
+
+AC — Access Control (39개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
AC-01Policy and ProceduresBase
AC-02Account ManagementBase
↳ AC-02(01)Automated System Account ManagementEnhancement
↳ AC-02(02)Automated Temporary and Emergency Account ManagementEnhancement
↳ AC-02(03)Disable AccountsEnhancement
↳ AC-02(04)Automated Audit ActionsEnhancement
↳ AC-02(05)Inactivity LogoutEnhancement
↳ AC-02(13)Disable Accounts for High-risk IndividualsEnhancement
AC-03Access EnforcementBase
AC-04Information Flow EnforcementBase
AC-05Separation of DutiesBase
AC-06Least PrivilegeBase
↳ AC-06(01)Authorize Access to Security FunctionsEnhancement
↳ AC-06(02)Non-privileged Access for Nonsecurity FunctionsEnhancement
↳ AC-06(05)Privileged AccountsEnhancement
↳ AC-06(07)Review of User PrivilegesEnhancement
↳ AC-06(09)Log Use of Privileged FunctionsEnhancement
↳ AC-06(10)Prohibit Non-privileged Users from Executing Privileged FunctionsEnhancement
AC-07Unsuccessful Logon AttemptsBase
AC-08System Use NotificationBase
AC-11Device LockBase
↳ AC-11(01)Pattern-hiding DisplaysEnhancement
AC-12Session TerminationBase
AC-14Permitted Actions Without Identification or AuthenticationBase
AC-17Remote AccessBase
↳ AC-17(01)Monitoring and ControlEnhancement
↳ AC-17(02)Protection of Confidentiality and Integrity Using EncryptionEnhancement
↳ AC-17(03)Managed Access Control PointsEnhancement
↳ AC-17(04)Privileged Commands and AccessEnhancement
AC-18Wireless AccessBase
↳ AC-18(01)Authentication and EncryptionEnhancement
↳ AC-18(03)Disable Wireless NetworkingEnhancement
AC-19Access Control for Mobile DevicesBase
↳ AC-19(05)Full Device or Container-based EncryptionEnhancement
AC-20Use of External SystemsBase
↳ AC-20(01)Limits on Authorized UseEnhancement
↳ AC-20(02)Portable Storage Devices — Restricted UseEnhancement
AC-21Information SharingBase
AC-22Publicly Accessible ContentBase
+
+
+AT — Awareness and Training (6개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
AT-01Policy and ProceduresBase
AT-02Literacy Training and AwarenessBase
↳ AT-02(02)Insider ThreatEnhancement
↳ AT-02(03)Social Engineering and MiningEnhancement
AT-03Role-based TrainingBase
AT-04Training RecordsBase
+
+
+AU — Audit and Accountability (16개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
AU-01Policy and ProceduresBase
AU-02Event LoggingBase
AU-03Content of Audit RecordsBase
↳ AU-03(01)Additional Audit InformationEnhancement
AU-04Audit Log Storage CapacityBase
AU-05Response to Audit Logging Process FailuresBase
AU-06Audit Record Review, Analysis, and ReportingBase
↳ AU-06(01)Automated Process IntegrationEnhancement
↳ AU-06(03)Correlate Audit Record RepositoriesEnhancement
AU-07Audit Record Reduction and Report GenerationBase
↳ AU-07(01)Automatic ProcessingEnhancement
AU-08Time StampsBase
AU-09Protection of Audit InformationBase
↳ AU-09(04)Access by Subset of Privileged UsersEnhancement
AU-11Audit Record RetentionBase
AU-12Audit Record GenerationBase
+
+
+CA — Assessment, Authorization, and Monitoring (10개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
CA-01Policy and ProceduresBase
CA-02Control AssessmentsBase
↳ CA-02(01)Independent AssessorsEnhancement
CA-03Information ExchangeBase
CA-05Plan of Action and MilestonesBase
CA-06AuthorizationBase
CA-07Continuous MonitoringBase
↳ CA-07(01)Independent AssessmentEnhancement
↳ CA-07(04)Risk MonitoringEnhancement
CA-09Internal System ConnectionsBase
+
+
+CM — Configuration Management (24개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
CM-01Policy and ProceduresBase
CM-02Baseline ConfigurationBase
↳ CM-02(02)Automation Support for Accuracy and CurrencyEnhancement
↳ CM-02(03)Retention of Previous ConfigurationsEnhancement
↳ CM-02(07)Configure Systems and Components for High-risk AreasEnhancement
CM-03Configuration Change ControlBase
↳ CM-03(02)Testing, Validation, and Documentation of ChangesEnhancement
↳ CM-03(04)Security and Privacy RepresentativesEnhancement
CM-04Impact AnalysesBase
↳ CM-04(02)Verification of ControlsEnhancement
CM-05Access Restrictions for ChangeBase
CM-06Configuration SettingsBase
CM-07Least FunctionalityBase
↳ CM-07(01)Periodic ReviewEnhancement
↳ CM-07(02)Prevent Program ExecutionEnhancement
↳ CM-07(05)Authorized Software — Allow-by-exceptionEnhancement
CM-08System Component InventoryBase
↳ CM-08(01)Updates During Installation and RemovalEnhancement
↳ CM-08(03)Automated Unauthorized Component DetectionEnhancement
CM-09Configuration Management PlanBase
CM-10Software Usage RestrictionsBase
CM-11User-installed SoftwareBase
CM-12Information LocationBase
↳ CM-12(01)Automated Tools to Support Information LocationEnhancement
+
+
+CP — Contingency Planning (23개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
CP-01Policy and ProceduresBase
CP-02Contingency PlanBase
↳ CP-02(01)Coordinate with Related PlansEnhancement
↳ CP-02(03)Resume Mission and Business FunctionsEnhancement
↳ CP-02(08)Identify Critical AssetsEnhancement
CP-03Contingency TrainingBase
CP-04Contingency Plan TestingBase
↳ CP-04(01)Coordinate with Related PlansEnhancement
CP-06Alternate Storage SiteBase
↳ CP-06(01)Separation from Primary SiteEnhancement
↳ CP-06(03)AccessibilityEnhancement
CP-07Alternate Processing SiteBase
↳ CP-07(01)Separation from Primary SiteEnhancement
↳ CP-07(02)AccessibilityEnhancement
↳ CP-07(03)Priority of ServiceEnhancement
CP-08Telecommunications ServicesBase
↳ CP-08(01)Priority of Service ProvisionsEnhancement
↳ CP-08(02)Single Points of FailureEnhancement
CP-09System BackupBase
↳ CP-09(01)Testing for Reliability and IntegrityEnhancement
↳ CP-09(08)Cryptographic ProtectionEnhancement
CP-10System Recovery and ReconstitutionBase
↳ CP-10(02)Transaction RecoveryEnhancement
+
+
+IA — Identification and Authentication (24개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
IA-01Policy and ProceduresBase
IA-02Identification and Authentication (Organizational Users)Base
↳ IA-02(01)Multi-factor Authentication to Privileged AccountsEnhancement
↳ IA-02(02)Multi-factor Authentication to Non-privileged AccountsEnhancement
↳ IA-02(08)Access to Accounts — Replay ResistantEnhancement
↳ IA-02(12)Acceptance of PIV CredentialsEnhancement
IA-03Device Identification and AuthenticationBase
IA-04Identifier ManagementBase
↳ IA-04(04)Identify User StatusEnhancement
IA-05Authenticator ManagementBase
↳ IA-05(01)Password-based AuthenticationEnhancement
↳ IA-05(02)Public Key-based AuthenticationEnhancement
↳ IA-05(06)Protection of AuthenticatorsEnhancement
IA-06Authentication FeedbackBase
IA-07Cryptographic Module AuthenticationBase
IA-08Identification and Authentication (Non-organizational Users)Base
↳ IA-08(01)Acceptance of PIV Credentials from Other AgenciesEnhancement
↳ IA-08(02)Acceptance of External AuthenticatorsEnhancement
↳ IA-08(04)Use of Defined ProfilesEnhancement
IA-11Re-authenticationBase
IA-12Identity ProofingBase
↳ IA-12(02)Identity EvidenceEnhancement
↳ IA-12(03)Identity Evidence Validation and VerificationEnhancement
↳ IA-12(05)Address ConfirmationEnhancement
+
+
+IR — Incident Response (13개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
IR-01Policy and ProceduresBase
IR-02Incident Response TrainingBase
IR-03Incident Response TestingBase
↳ IR-03(02)Coordination with Related PlansEnhancement
IR-04Incident HandlingBase
↳ IR-04(01)Automated Incident Handling ProcessesEnhancement
IR-05Incident MonitoringBase
IR-06Incident ReportingBase
↳ IR-06(01)Automated ReportingEnhancement
↳ IR-06(03)Supply Chain CoordinationEnhancement
IR-07Incident Response AssistanceBase
↳ IR-07(01)Automation Support for Availability of Information and SupportEnhancement
IR-08Incident Response PlanBase
+
+
+MA — Maintenance (9개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
MA-01Policy and ProceduresBase
MA-02Controlled MaintenanceBase
MA-03Maintenance ToolsBase
↳ MA-03(01)Inspect ToolsEnhancement
↳ MA-03(02)Inspect MediaEnhancement
↳ MA-03(03)Prevent Unauthorized RemovalEnhancement
MA-04Nonlocal MaintenanceBase
MA-05Maintenance PersonnelBase
MA-06Timely MaintenanceBase
+
+
+MP — Media Protection (7개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
MP-01Policy and ProceduresBase
MP-02Media AccessBase
MP-03Media MarkingBase
MP-04Media StorageBase
MP-05Media TransportBase
MP-06Media SanitizationBase
MP-07Media UseBase
+
+
+PE — Physical and Environmental Protection (18개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
PE-01Policy and ProceduresBase
PE-02Physical Access AuthorizationsBase
PE-03Physical Access ControlBase
PE-04Access Control for TransmissionBase
PE-05Access Control for Output DevicesBase
PE-06Monitoring Physical AccessBase
↳ PE-06(01)Intrusion Alarms and Surveillance EquipmentEnhancement
PE-08Visitor Access RecordsBase
PE-09Power Equipment and CablingBase
PE-10Emergency ShutoffBase
PE-11Emergency PowerBase
PE-12Emergency LightingBase
PE-13Fire ProtectionBase
↳ PE-13(01)Detection Systems — Automatic Activation and NotificationEnhancement
PE-14Environmental ControlsBase
PE-15Water Damage ProtectionBase
PE-16Delivery and RemovalBase
PE-17Alternate Work SiteBase
+
+
+PL — Planning (7개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
PL-01Policy and ProceduresBase
PL-02System Security and Privacy PlansBase
PL-04Rules of BehaviorBase
↳ PL-04(01)Social Media and External Site/Application Usage RestrictionsEnhancement
PL-08Security and Privacy ArchitecturesBase
PL-10Baseline SelectionBase
PL-11Baseline TailoringBase
+
+
+PS — Personnel Security (9개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
PS-01Policy and ProceduresBase
PS-02Position Risk DesignationBase
PS-03Personnel ScreeningBase
PS-04Personnel TerminationBase
PS-05Personnel TransferBase
PS-06Access AgreementsBase
PS-07External Personnel SecurityBase
PS-08Personnel SanctionsBase
PS-09Position DescriptionsBase
+
+
+RA — Risk Assessment (10개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
RA-01Policy and ProceduresBase
RA-02Security CategorizationBase
RA-03Risk AssessmentBase
↳ RA-03(01)Supply Chain Risk AssessmentEnhancement
RA-05Vulnerability Monitoring and ScanningBase
↳ RA-05(02)Update Vulnerabilities to Be ScannedEnhancement
↳ RA-05(05)Privileged AccessEnhancement
↳ RA-05(11)Public Disclosure ProgramEnhancement
RA-07Risk ResponseBase
RA-09Criticality AnalysisBase
+
+
+SA — System and Services Acquisition (17개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SA-01Policy and ProceduresBase
SA-02Allocation of ResourcesBase
SA-03System Development Life CycleBase
SA-04Acquisition ProcessBase
↳ SA-04(01)Functional Properties of ControlsEnhancement
↳ SA-04(02)Design and Implementation Information for ControlsEnhancement
↳ SA-04(09)Functions, Ports, Protocols, and Services in UseEnhancement
↳ SA-04(10)Use of Approved PIV ProductsEnhancement
SA-05System DocumentationBase
SA-08Security and Privacy Engineering PrinciplesBase
SA-09External System ServicesBase
↳ SA-09(02)Identification of Functions, Ports, Protocols, and ServicesEnhancement
SA-10Developer Configuration ManagementBase
SA-11Developer Testing and EvaluationBase
SA-15Development Process, Standards, and ToolsBase
↳ SA-15(03)Criticality AnalysisEnhancement
SA-22Unsupported System ComponentsBase
+
+
+SC — System and Communications Protection (25개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SC-01Policy and ProceduresBase
SC-02Separation of System and User FunctionalityBase
SC-04Information in Shared System ResourcesBase
SC-05Denial-of-service ProtectionBase
SC-07Boundary ProtectionBase
↳ SC-07(03)Access PointsEnhancement
↳ SC-07(04)External Telecommunications ServicesEnhancement
↳ SC-07(05)Deny by Default — Allow by ExceptionEnhancement
↳ SC-07(07)Split Tunneling for Remote DevicesEnhancement
↳ SC-07(08)Route Traffic to Authenticated Proxy ServersEnhancement
SC-08Transmission Confidentiality and IntegrityBase
↳ SC-08(01)Cryptographic ProtectionEnhancement
SC-10Network DisconnectBase
SC-12Cryptographic Key Establishment and ManagementBase
SC-13Cryptographic ProtectionBase
SC-15Collaborative Computing Devices and ApplicationsBase
SC-17Public Key Infrastructure CertificatesBase
SC-18Mobile CodeBase
SC-20Secure Name/Address Resolution Service (Authoritative Source)Base
SC-21Secure Name/Address Resolution Service (Recursive or Caching Resolver)Base
SC-22Architecture and Provisioning for Name/Address Resolution ServiceBase
SC-23Session AuthenticityBase
SC-28Protection of Information at RestBase
↳ SC-28(01)Cryptographic ProtectionEnhancement
SC-39Process IsolationBase
+
+
+SI — System and Information Integrity (18개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SI-01Policy and ProceduresBase
SI-02Flaw RemediationBase
↳ SI-02(02)Automated Flaw Remediation StatusEnhancement
SI-03Malicious Code ProtectionBase
SI-04System MonitoringBase
↳ SI-04(02)Automated Tools and Mechanisms for Real-time AnalysisEnhancement
↳ SI-04(04)Inbound and Outbound Communications TrafficEnhancement
↳ SI-04(05)System-generated AlertsEnhancement
SI-05Security Alerts, Advisories, and DirectivesBase
SI-07Software, Firmware, and Information IntegrityBase
↳ SI-07(01)Integrity ChecksEnhancement
↳ SI-07(07)Integration of Detection and ResponseEnhancement
SI-08Spam ProtectionBase
↳ SI-08(02)Automatic UpdatesEnhancement
SI-10Information Input ValidationBase
SI-11Error HandlingBase
SI-12Information Management and RetentionBase
SI-16Memory ProtectionBase
+
+
+SR — Supply Chain Risk Management (12개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컨트롤제목유형
SR-01Policy and ProceduresBase
SR-02Supply Chain Risk Management PlanBase
↳ SR-02(01)Establish SCRM TeamEnhancement
SR-03Supply Chain Controls and ProcessesBase
SR-05Acquisition Strategies, Tools, and MethodsBase
SR-06Supplier Assessments and ReviewsBase
SR-08Notification AgreementsBase
SR-10Inspection of Systems or ComponentsBase
SR-11Component AuthenticityBase
↳ SR-11(01)Anti-counterfeit TrainingEnhancement
↳ SR-11(02)Configuration Control for Component Service and RepairEnhancement
SR-12Component DisposalBase
+
+
+

참고

+
    +
  • 이 체크리스트는 NIST OSCAL 공식 프로파일에서 추출한 데이터 기준입니다.
  • +
  • PM(Program Management)과 PT(PII Processing and Transparency) 패밀리는 기준선에 포함되지 않으며, 조직 수준에서 별도 적용됩니다.
  • +
  • 컨트롤 상세(Statement, Guidance 등)는 SP 800-53 상세 문서를 참고하세요.
  • +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/NIST/SP800/README.md b/NIST/SP800/README.md deleted file mode 100644 index 2750092..0000000 --- a/NIST/SP800/README.md +++ /dev/null @@ -1,421 +0,0 @@ -# SP 800 시리즈 — 전체 문서 목록 - -## 개요 - -SP 800 시리즈는 NIST CSRC에서 발행하는 컴퓨터/정보 보안 가이드라인입니다. 현재 **209건**의 문서가 발행되어 있습니다 (Final + Public Draft). - -| 상태 | 문서 수 | -|------|---------| -| Final | 188건 | -| Public Draft | 21건 | -| **합계** | **209건** | - -> 아래 목록은 주제별로 분류되어 있습니다. 각 주제를 클릭하면 해당 문서 목록을 확인할 수 있습니다. - ---- - -## 주제별 분류 요약 - -| 주제 | 문서 수 | -|------|---------| -| 위험 관리 (Risk Management) | 5건 | -| 보안 컨트롤 및 기준선 (Security Controls & Baselines) | 14건 | -| 식별·인증·접근제어 (Identity & Access) | 21건 | -| 암호 (Cryptography) | 37건 | -| 침해사고 대응 및 포렌식 (Incident Response & Forensics) | 6건 | -| 네트워크·통신 보안 (Network & Communication Security) | 16건 | -| 클라우드·가상화·마이크로서비스 (Cloud & Virtualization) | 17건 | -| 제로 트러스트 (Zero Trust) | 2건 | -| IoT·OT·산업제어 (IoT & Operational Technology) | 3건 | -| 소프트웨어 개발 보안 (Secure Software Development) | 8건 | -| 시스템·서버·엔드포인트 보안 (System & Endpoint Security) | 22건 | -| 테스트·평가·모니터링 (Testing & Monitoring) | 8건 | -| 프라이버시 (Privacy) | 1건 | -| 공급망 리스크 관리 (Supply Chain) | 1건 | -| 인력·교육 (Workforce & Training) | 1건 | -| SCAP·자동화 (Automation) | 3건 | -| CMVP·암호모듈 검증 (Cryptographic Module Validation) | 8건 | -| CUI 보호 (Controlled Unclassified Information) | 6건 | -| 연례 보고서 (Annual Reports) | 13건 | -| 기타 (Other) | 17건 | - ---- - -
-위험 관리 (Risk Management) (5건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-30 Rev. 1 | Guide for Conducting Risk Assessments | 위험 평가 수행 절차 가이드 | Final | -| SP 800-37 Rev. 2 | Risk Management Framework for Information Systems and Organizations: A System Life Cycle Approach for Security and Privacy | 위험관리 프레임워크(RMF) — 7단계 생명주기 접근 | Final | -| SP 800-39 | Managing Information Security Risk: Organization, Mission, and Information System View | 조직·미션·시스템 관점의 정보보안 리스크 관리 | Final | -| SP 800-221 | Enterprise Impact of Information and Communications Technology Risk: Governing and Managing ICT Risk Programs Within an Enterprise Risk Portfolio | ICT 리스크의 엔터프라이즈 영향: ICT 리스크 프로그램 거버넌스 및 관리 | Final | -| SP 800-221A | Information and Communications Technology (ICT) Risk Outcomes: Integrating ICT Risk Management Programs with the Enterprise Risk Portfolio | ICT 리스크 성과: 엔터프라이즈 리스크 포트폴리오 통합 | Final | - -
- -
-보안 컨트롤 및 기준선 (Security Controls & Baselines) (14건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-18 Rev. 1 | Guide for Developing Security Plans for Federal Information Systems | 보안/프라이버시/공급망 리스크 관리 계획 수립 가이드 | Final | -| SP 800-18 Rev. 2 | Developing Security, Privacy, and Cybersecurity Supply Chain Risk Management Plans for Systems | 보안/프라이버시/공급망 리스크 관리 계획 수립 가이드 | Public Draft | -| SP 800-53 Rev. 5 | Security and Privacy Controls for Information Systems and Organizations | 정보시스템 및 조직을 위한 보안/프라이버시 컨트롤 카탈로그 | Final | -| SP 800-53A Rev. 5 | Assessing Security and Privacy Controls in Information Systems and Organizations | 보안/프라이버시 컨트롤 평가 절차 | Final | -| SP 800-53B | Control Baselines for Information Systems and Organizations | 정보시스템 및 조직을 위한 컨트롤 기준선 | Final | -| SP 800-181 Rev. 1 | Workforce Framework for Cybersecurity (NICE Framework) | 사이버보안 인력 프레임워크(NICE Framework) | Final | -| SP 800-183 | Networks of 'Things' | '사물' 네트워크(Networks of Things) | Final | -| SP 800-184 | Guide for Cybersecurity Event Recovery | 사이버보안 이벤트 복구 가이드 | Final | -| SP 800-185 | SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHash | SHA-3 파생 함수: cSHAKE, KMAC, TupleHash, ParallelHash | Final | -| SP 800-186 | Recommendations for Discrete Logarithm-based Cryptography: Elliptic Curve Domain Parameters | 이산 로그 기반 암호의 타원 곡선 도메인 파라미터 권고 | Final | -| SP 800-187 | Guide to LTE Security | LTE 보안 가이드 | Final | -| SP 800-188 | De-Identifying Government Datasets: Techniques and Governance | 정부 데이터셋 비식별화: 기법 및 거버넌스 | Final | -| SP 800-189 | Resilient Interdomain Traffic Exchange: BGP Security and DDoS Mitigation | BGP 보안 및 DDoS 완화를 위한 복원적 도메인 간 트래픽 교환 | Final | -| SP 800-189 Rev. 1 | Border Gateway Protocol Security and Resilience | BGP 보안 및 DDoS 완화를 위한 복원적 도메인 간 트래픽 교환 | Public Draft | - -
- -
-식별·인증·접근제어 (Identity & Access) (21건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-63-4 | Digital Identity Guidelines | 디지털 신원 가이드라인 — IAL/AAL/FAL 수준 정의 | Final | -| SP 800-63A-4 | Digital Identity Guidelines: Identity Proofing and Enrollment | 디지털 신원: 신원 확인(Identity Proofing) 및 등록 | Final | -| SP 800-63B-4 | Digital Identity Guidelines: Authentication and Authenticator Management | 디지털 신원: 인증 및 인증자 관리 | Final | -| SP 800-63C-4 | Digital Identity Guidelines: Federation and Assertions | 디지털 신원: 연합(Federation) 및 어설션 | Final | -| SP 800-73-5 | Interfaces for Personal Identity Verification: Part 3 – PIV Client Application Programming Interface | PIV 인터페이스: 클라이언트 API 사양 | Final | -| SP 800-76-2 | Biometric Specifications for Personal Identity Verification | PIV를 위한 생체인식 사양 | Final | -| SP 800-78-5 | Cryptographic Algorithms and Key Sizes for Personal Identity Verification | PIV를 위한 암호 알고리즘 및 키 크기 | Final | -| SP 800-79-2 | Guidelines for the Authorization of Personal Identity Verification Card Issuers (PCI) and Derived PIV Credential Issuers (DPCI) | PIV 카드/파생 PIV 자격증명 발급자 인가 가이드라인 | Final | -| SP 800-79 Rev. 3 | Guidelines for the Authorization of PIV Card and Derived PIV Credential Issuers | PIV 카드/파생 PIV 자격증명 발급자 인가 가이드라인 | Public Draft | -| SP 800-85A-4 | PIV Card Application and Middleware Interface Test Guidelines (SP 800-73-4 Compliance) | PIV 카드 애플리케이션 및 미들웨어 인터페이스 테스트 가이드라인 | Final | -| SP 800-85B | PIV Data Model Test Guidelines | PIV 데이터 모델 테스트 가이드라인 | Final | -| SP 800-96 | PIV Card to Reader Interoperability Guidelines | PIV 카드-리더기 상호운용성 가이드라인 | Final | -| SP 800-116 Rev. 1 | Guidelines for the Use of PIV Credentials in Facility Access | 시설 접근에서의 PIV 자격증명 활용 가이드라인 | Final | -| SP 800-156 | Representation of PIV Chain-of-Trust for Import and Export | PIV 신뢰 체인의 반입/반출 표현 | Final | -| SP 800-157 | Guidelines for Derived Personal Identity Verification (PIV) Credentials | 파생 PIV 자격증명 가이드라인 | Final | -| SP 800-157 Rev. 1 | Guidelines for Derived Personal Identity Verification (PIV) Credentials | 파생 PIV 자격증명 가이드라인 | Public Draft | -| SP 800-162 | Guide to Attribute Based Access Control (ABAC) Definition and Considerations | 속성 기반 접근 제어(ABAC) 정의 및 고려사항 가이드 | Final | -| SP 800-166 | Derived PIV Application and Data Model Test Guidelines | 파생 PIV 애플리케이션 및 데이터 모델 테스트 가이드라인 | Final | -| SP 800-178 | A Comparison of Attribute Based Access Control (ABAC) Standards for Data Service Applications: Extensible Access Control Markup Language (XACML) and Next Generation Access Control (NGAC) | ABAC 표준 비교: XACML vs NGAC | Final | -| SP 800-205 | Attribute Considerations for Access Control Systems | 접근 제어 시스템의 속성 고려사항 | Final | -| SP 800-217 | Guidelines for Personal Identity Verification (PIV) Federation | PIV 연합(Federation) 가이드라인 | Public Draft | - -
- -
-암호 (Cryptography) (37건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-22 Rev. 1 | A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications | 암호용 난수/의사난수 생성기의 통계적 테스트 스위트 | Final | -| SP 800-38A | Recommendation for Block Cipher Modes of Operation: Three Variants of Ciphertext Stealing for CBC Mode | 블록 암호 운용 모드: CBC Ciphertext Stealing 변형 | Final | -| SP 800-38B | Recommendation for Block Cipher Modes of Operation: the CMAC Mode for Authentication | 블록 암호 운용 모드: CMAC 인증 | Final | -| SP 800-38C | Recommendation for Block Cipher Modes of Operation: the CCM Mode for Authentication and Confidentiality | 블록 암호 운용 모드: CCM 인증 및 기밀성 | Final | -| SP 800-38D | Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC | 블록 암호 운용 모드: GCM/GMAC | Final | -| SP 800-38E | Recommendation for Block Cipher Modes of Operation: the XTS-AES Mode for Confidentiality on Storage Devices | 블록 암호 운용 모드: XTS-AES (스토리지 암호화) | Final | -| SP 800-38F | Recommendation for Block Cipher Modes of Operation: Methods for Key Wrapping | 블록 암호 운용 모드: 키 래핑 방법 | Final | -| SP 800-38G | Recommendation for Block Cipher Modes of Operation: Methods for Format-Preserving Encryption | 블록 암호 운용 모드: 형식 보존 암호화(FPE) | Final | -| SP 800-38G Rev. 1 | Recommendation for Block Cipher Modes of Operation: Methods for Format-Preserving Encryption | 블록 암호 운용 모드: 형식 보존 암호화(FPE) | Public Draft | -| SP 800-56A Rev. 3 | Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography | 이산 로그 기반 키 교환 방식 권고 | Final | -| SP 800-56B Rev. 2 | Recommendation for Pair-Wise Key-Establishment Using Integer Factorization Cryptography | 정수 인수분해 기반 키 교환 방식 권고 | Final | -| SP 800-56C Rev. 2 | Recommendation for Key-Derivation Methods in Key-Establishment Schemes | 키 교환 방식의 키 유도 방법 권고 | Final | -| SP 800-57 Part 1 Rev. 5 | Recommendation for Key Management: Part 1 – General | 키 관리 권고사항 — 일반 지침, 조직 관행, 응용별 가이드 | Final | -| SP 800-57 Part 2 Rev. 1 | Recommendation for Key Management: Part 2 – Best Practices for Key Management Organizations | 키 관리 권고사항 — 일반 지침, 조직 관행, 응용별 가이드 | Final | -| SP 800-57 Part 3 Rev. 1 | Recommendation for Key Management, Part 3: Application-Specific Key Management Guidance | 키 관리 권고사항 — 일반 지침, 조직 관행, 응용별 가이드 | Final | -| SP 800-57 Rev. 6 | Recommendation for Key Management: Part 1 – General | 키 관리 권고사항 — 일반 지침, 조직 관행, 응용별 가이드 | Public Draft | -| SP 800-89 | Recommendation for Obtaining Assurances for Digital Signature Applications | 디지털 서명 애플리케이션의 보증 확보 권고 | Final | -| SP 800-90A Rev. 1 | Recommendation for Random Number Generation Using Deterministic Random Bit Generators | 결정론적 난수 비트 생성기(DRBG) 권고 | Final | -| SP 800-90B | Recommendation for the Entropy Sources Used for Random Bit Generation | 난수 비트 생성에 사용되는 엔트로피 소스 권고 | Final | -| SP 800-90C | Recommendation for Random Bit Generator (RBG) Constructions | 난수 비트 생성기(RBG) 구성 권고 | Final | -| SP 800-107 Rev. 1 | Recommendation for Applications Using Approved Hash Algorithms | 승인된 해시 알고리즘 활용 권고 | Final | -| SP 800-108 Rev. 1 | Recommendation for Key Derivation Using Pseudorandom Functions | 의사난수 함수를 사용한 키 유도 권고 | Final | -| SP 800-130 | A Framework for Designing Cryptographic Key Management Systems | 암호 키 관리 시스템 설계 프레임워크 | Final | -| SP 800-131A Rev. 2 | Transitioning the Use of Cryptographic Algorithms and Key Lengths | 암호 알고리즘 및 키 길이 전환 가이드 | Final | -| SP 800-131A Rev. 3 | Transitioning the Use of Cryptographic Algorithms and Key Lengths | 암호 알고리즘 및 키 길이 전환 가이드 | Public Draft | -| SP 800-132 | Recommendation for Password-Based Key Derivation: Part 1: Storage Applications | 패스워드 기반 키 유도 권고 (스토리지 애플리케이션) | Final | -| SP 800-133 Rev. 2 | Recommendation for Cryptographic Key Generation | 암호 키 생성 권고 | Final | -| SP 800-133 Rev. 3 | Recommendation for Cryptographic Key Generation | 암호 키 생성 권고 | Public Draft | -| SP 800-135 Rev. 1 | Recommendation for Existing Application-Specific Key Derivation Functions | 기존 애플리케이션별 키 유도 함수 권고 | Final | -| SP 800-152 | A Profile for U.S. Federal Cryptographic Key Management Systems (CKMS) | 미국 연방 암호 키 관리 시스템(CKMS) 프로파일 | Final | -| SP 800-175A | Guideline for Using Cryptographic Standards in the Federal Government: Directives, Mandates and Policies | 연방 정부의 암호 표준 활용 가이드라인: 지침·의무·정책 | Final | -| SP 800-175B Rev. 1 | Guideline for Using Cryptographic Standards in the Federal Government: Cryptographic Mechanisms | 연방 정부의 암호 표준 활용 가이드라인: 암호 메커니즘 | Final | -| SP 800-208 | Recommendation for Stateful Hash-Based Signature Schemes | 상태 유지 해시 기반 서명 방식 권고 | Final | -| SP 800-224 | Keyed-Hash Message Authentication Code (HMAC): Specification of HMAC and Recommendations for Message Authentication | HMAC 사양 및 메시지 인증 권고 | Public Draft | -| SP 800-227 | Recommendations for Key-Encapsulation Mechanisms | 키 캡슐화 메커니즘(KEM) 권고 — 양자내성 포함 | Final | -| SP 800-230 | Additional SLH-DSA Parameter Sets for Limited Signature Use Cases | 제한된 서명 사용을 위한 추가 SLH-DSA 파라미터 세트 | Public Draft | -| SP 800-232 | Ascon-Based Lightweight Cryptography Standards for Constrained Devices: Authenticated Encryption, Hash, and Extendable Output Functions | Ascon 기반 경량 암호 표준: 인증 암호화, 해시, XOF | Final | - -
- -
-침해사고 대응 및 포렌식 (Incident Response & Forensics) (6건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-61 Rev. 3 | Incident Response Recommendations and Considerations for Cybersecurity Risk Management: A CSF 2.0 Community Profile | 침해사고 대응 권고사항 — CSF 2.0 커뮤니티 프로파일 | Final | -| SP 800-83 Rev. 1 | Guide to Malware Incident Prevention and Handling for Desktops and Laptops | 데스크톱/노트북 악성코드 사고 예방 및 대응 가이드 | Final | -| SP 800-84 | Guide to Test, Training, and Exercise Programs for IT Plans and Capabilities | IT 계획 및 역량에 대한 테스트·훈련·훈련 프로그램 가이드 | Final | -| SP 800-86 | Guide to Integrating Forensic Techniques into Incident Response | 포렌식 기법의 침해사고 대응 통합 가이드 | Final | -| SP 800-101 Rev. 1 | Guidelines on Mobile Device Forensics | 모바일 디바이스 포렌식 가이드라인 | Final | -| SP 800-150 | Guide to Cyber Threat Information Sharing | 사이버 위협 정보 공유 가이드 | Final | - -
- -
-네트워크·통신 보안 (Network & Communication Security) (16건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-41 Rev. 1 | Guidelines on Firewalls and Firewall Policy | 방화벽 및 방화벽 정책 가이드라인 | Final | -| SP 800-46 Rev. 2 | Guide to Enterprise Telework, Remote Access, and Bring Your Own Device (BYOD) Security | 텔레워크·원격 접근·BYOD 보안 가이드 | Final | -| SP 800-47 Rev. 1 | Managing the Security of Information Exchanges | 정보 교환 보안 관리 | Final | -| SP 800-49 | Federal S/MIME V3 Client Profile | 연방 S/MIME V3 클라이언트 프로파일 | Final | -| SP 800-52 Rev. 2 | Guidelines for the Selection, Configuration, and Use of Transport Layer Security (TLS) Implementations | TLS 구현의 선택·구성·사용 가이드라인 | Final | -| SP 800-58 | Security Considerations for Voice Over IP Systems | VoIP 시스템 보안 고려사항 | Final | -| SP 800-77 Rev. 1 | Guide to IPsec VPNs | IPsec VPN 가이드 | Final | -| SP 800-81 Rev. 3 | Secure Domain Name System (DNS) Deployment Guide | 보안 DNS(DNSSEC) 배포 가이드 | Final | -| SP 800-95 | Guide to Secure Web Services | 보안 웹 서비스 가이드 | Final | -| SP 800-113 | Guide to SSL VPNs | SSL VPN 가이드 | Final | -| SP 800-114 Rev. 1 | User's Guide to Telework and Bring Your Own Device (BYOD) Security | 텔레워크·BYOD 보안 사용자 가이드 | Final | -| SP 800-119 | Guidelines for the Secure Deployment of IPv6 | IPv6 보안 배포 가이드라인 | Final | -| SP 800-121 Rev. 2 | Guide to Bluetooth Security | 블루투스 보안 가이드 | Final | -| SP 800-153 | Guidelines for Securing Wireless Local Area Networks (WLANs) | 무선 LAN(WLAN) 보안 가이드라인 | Final | -| SP 800-177 Rev. 1 | Trustworthy Email | 신뢰할 수 있는 이메일(Trustworthy Email) | Final | -| SP 800-215 | Guide to a Secure Enterprise Network Landscape | 안전한 엔터프라이즈 네트워크 환경 가이드 | Final | - -
- -
-클라우드·가상화·마이크로서비스 (Cloud & Virtualization) (17건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-125 | Guide to Security for Full Virtualization Technologies | 완전 가상화 기술 보안 가이드 | Final | -| SP 800-125A Rev. 1 | Security Recommendations for Server-based Hypervisor Platforms | 서버 기반 하이퍼바이저 플랫폼 보안 권고 | Final | -| SP 800-125B | Secure Virtual Network Configuration for Virtual Machine (VM) Protection | VM 보호를 위한 가상 네트워크 보안 구성 | Final | -| SP 800-144 | Guidelines on Security and Privacy in Public Cloud Computing | 퍼블릭 클라우드 컴퓨팅의 보안 및 프라이버시 가이드라인 | Final | -| SP 800-145 | The NIST Definition of Cloud Computing | 클라우드 컴퓨팅의 NIST 정의 | Final | -| SP 800-146 | Cloud Computing Synopsis and Recommendations | 클라우드 컴퓨팅 개요 및 권고사항 | Final | -| SP 800-190 | Application Container Security Guide | 애플리케이션 컨테이너 보안 가이드 | Final | -| SP 800-201 | NIST Cloud Computing Forensic Reference Architecture | 클라우드 컴퓨팅 포렌식 참조 아키텍처 | Final | -| SP 800-204 | Security Strategies for Microservices-based Application Systems | 마이크로서비스 기반 애플리케이션 보안 전략 | Final | -| SP 800-204A | Building Secure Microservices-based Applications Using Service-Mesh Architecture | 서비스 메시 아키텍처를 활용한 안전한 마이크로서비스 구축 | Final | -| SP 800-204B | Attribute-based Access Control for Microservices-based Applications using a Service Mesh | 서비스 메시를 활용한 마이크로서비스 속성 기반 접근 제어 | Final | -| SP 800-204C | Implementation of DevSecOps for a Microservices-based Application with Service Mesh | 서비스 메시 기반 마이크로서비스의 DevSecOps 구현 | Final | -| SP 800-204D | Strategies for the Integration of Software Supply Chain Security in DevSecOps CI/CD Pipelines | DevSecOps CI/CD 파이프라인의 소프트웨어 공급망 보안 통합 전략 | Final | -| SP 800-210 | General Access Control Guidance for Cloud Systems | 클라우드 시스템의 일반 접근 제어 가이드 | Final | -| SP 800-228 | Guidelines for API Protection for Cloud-Native Systems | 클라우드 네이티브 시스템의 API 보호 가이드라인 | Final | -| SP 800-233 | Service Mesh Proxy Models for Cloud-Native Applications | 클라우드 네이티브 애플리케이션의 서비스 메시 프록시 모델 | Final | -| SP 800-234 | High-Performance Computing (HPC) Security Overlay | 고성능 컴퓨팅(HPC) 보안 오버레이 | Public Draft | - -
- -
-제로 트러스트 (Zero Trust) (2건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-207 | Zero Trust Architecture | 제로 트러스트 아키텍처(ZTA) 참조 모델 | Final | -| SP 800-207A | A Zero Trust Architecture Model for Access Control in Cloud-Native Applications in Multi-Cloud Environments | 멀티 클라우드 환경의 클라우드 네이티브 앱을 위한 ZTA 모델 | Final | - -
- -
-IoT·OT·산업제어 (IoT & Operational Technology) (3건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-82 Rev. 3 | Guide to Operational Technology (OT) Security | OT(운영기술) 보안 가이드 — ICS/SCADA 포함 | Final | -| SP 800-213 | IoT Device Cybersecurity Guidance for the Federal Government: Establishing IoT Device Cybersecurity Requirements | 연방 정부 IoT 디바이스 사이버보안 가이드 | Final | -| SP 800-213A | IoT Device Cybersecurity Guidance for the Federal Government: IoT Device Cybersecurity Requirement Catalog | IoT 디바이스 사이버보안 요구사항 카탈로그 | Final | - -
- -
-소프트웨어 개발 보안 (Secure Software Development) (8건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-160 Vol. 1 Rev. 1 | Engineering Trustworthy Secure Systems | 신뢰할 수 있는 안전한 시스템 엔지니어링 / 사이버 복원력 시스템 개발 | Final | -| SP 800-160 Vol. 2 Rev. 1 | Developing Cyber-Resilient Systems: A Systems Security Engineering Approach | 신뢰할 수 있는 안전한 시스템 엔지니어링 / 사이버 복원력 시스템 개발 | Final | -| SP 800-163 Rev. 1 | Vetting the Security of Mobile Applications | 모바일 애플리케이션 보안 검증(Vetting) | Final | -| SP 800-218 | Secure Software Development Framework (SSDF) Version 1.1: Recommendations for Mitigating the Risk of Software Vulnerabilities | 안전한 소프트웨어 개발 프레임워크(SSDF) — 소프트웨어 취약점 위험 완화 권고 | Final | -| SP 800-218 Rev. 1 | Secure Software Development Framework (SSDF) Version 1.2: Recommendations for Mitigating the Risk of Software Vulnerabilities | 안전한 소프트웨어 개발 프레임워크(SSDF) — 소프트웨어 취약점 위험 완화 권고 | Public Draft | -| SP 800-218A | Secure Software Development Practices for Generative AI and Dual-Use Foundation Models: An SSDF Community Profile | 생성형 AI 및 이중 용도 기반 모델을 위한 SSDF 커뮤니티 프로파일 | Final | -| SP 800-219 Rev. 1 | Automated Secure Configuration Guidance from the macOS Security Compliance Project (mSCP) | macOS 보안 준수 프로젝트(mSCP)의 자동 보안 구성 가이드 | Final | -| SP 800-231 | Bug Framework (BF): Formalizing Cybersecurity Weaknesses and Vulnerabilities | 버그 프레임워크(BF): 사이버보안 약점 및 취약점 형식화 | Final | - -
- -
-시스템·서버·엔드포인트 보안 (System & Endpoint Security) (22건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-12 Rev. 1 | An Introduction to Information Security | 정보보안 입문서 — 보안 프로그램의 기본 개념과 요소 소개 | Final | -| SP 800-28 Version 2 | Guidelines on Active Content and Mobile Code | 액티브 콘텐츠 및 모바일 코드 보안 가이드라인 | Final | -| SP 800-35 | Guide to Information Technology Security Services | IT 보안 서비스 선정·관리 가이드 | Final | -| SP 800-44 Version 2 | Guidelines on Securing Public Web Servers | 공개 웹 서버 보안 가이드라인 | Final | -| SP 800-45 Version 2 | Guidelines on Electronic Mail Security | 이메일 보안 가이드라인 | Final | -| SP 800-100 | Information Security Handbook: A Guide for Managers | 정보보안 핸드북 — 관리자를 위한 보안 프로그램 가이드 | Final | -| SP 800-111 | Guide to Storage Encryption Technologies for End User Devices | 최종 사용자 디바이스의 스토리지 암호화 기술 가이드 | Final | -| SP 800-122 | Guide to Protecting the Confidentiality of Personally Identifiable Information (PII) | 개인식별정보(PII) 기밀성 보호 가이드 | Final | -| SP 800-123 | Guide to General Server Security | 일반 서버 보안 가이드 | Final | -| SP 800-124 Rev. 2 | Guidelines for Managing the Security of Mobile Devices in the Enterprise | 엔터프라이즈 모바일 디바이스 보안 관리 가이드라인 | Final | -| SP 800-126 Rev. 1 | The Technical Specification for the Security Content Automation Protocol (SCAP): SCAP Version 1.1 | 보안 콘텐츠 자동화 프로토콜(SCAP) 기술 사양 | Final | -| SP 800-126 Rev. 2 | The Technical Specification for the Security Content Automation Protocol (SCAP): SCAP Version 1.2 | 보안 콘텐츠 자동화 프로토콜(SCAP) 기술 사양 | Final | -| SP 800-126 Rev. 3 | The Technical Specification for the Security Content Automation Protocol (SCAP): SCAP Version 1.3 | 보안 콘텐츠 자동화 프로토콜(SCAP) 기술 사양 | Final | -| SP 800-126 Rev. 4 | Technical Specification for the Security Content Automation Protocol (SCAP): SCAP Version 1.4 | 보안 콘텐츠 자동화 프로토콜(SCAP) 기술 사양 | Public Draft | -| SP 800-126A | SCAP 1.3 Component Specification Version Updates: An Annex to NIST Special Publication 800-126 Revision 3 | SCAP 구성요소 사양 버전 업데이트 부록 | Final | -| SP 800-126A Rev. 4 | SCAP 1.4 Component Specification Version Updates: An Annex to NIST Special Publication 800-126 Revision 4 | SCAP 구성요소 사양 버전 업데이트 부록 | Public Draft | -| SP 800-128 | Guide for Security-Focused Configuration Management of Information Systems | 정보시스템의 보안 중심 구성 관리 가이드 | Final | -| SP 800-147 | BIOS Protection Guidelines | BIOS 보호 가이드라인 | Final | -| SP 800-147B | BIOS Protection Guidelines for Servers | 서버용 BIOS 보호 가이드라인 | Final | -| SP 800-167 | Guide to Application Whitelisting | 애플리케이션 화이트리스팅 가이드 | Final | -| SP 800-193 | Platform Firmware Resiliency Guidelines | 플랫폼 펌웨어 복원력 가이드라인 | Final | -| SP 800-209 | Security Guidelines for Storage Infrastructure | 스토리지 인프라 보안 가이드라인 | Final | - -
- -
-테스트·평가·모니터링 (Testing & Monitoring) (8건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-40 Rev. 4 | Guide to Enterprise Patch Management Planning: Preventive Maintenance for Technology | 엔터프라이즈 패치 관리 계획 가이드 | Final | -| SP 800-55 Vol. 1 | Measurement Guide for Information Security: Volume 1 — Identifying and Selecting Measures | 정보보안 측정 가이드 — 측정 지표 식별·선정·개발 | Final | -| SP 800-55 Vol. 2 | Measurement Guide for Information Security: Volume 2 — Developing an Information Security Measurement Program | 정보보안 측정 가이드 — 측정 지표 식별·선정·개발 | Final | -| SP 800-115 | Technical Guide to Information Security Testing and Assessment | 정보보안 테스트 및 평가 기술 가이드 | Final | -| SP 800-137 | Information Security Continuous Monitoring (ISCM) for Federal Information Systems and Organizations | 연방 정보시스템 정보보안 지속적 모니터링(ISCM) | Final | -| SP 800-137A | Assessing Information Security Continuous Monitoring (ISCM) Programs: Developing an ISCM Program Assessment | ISCM 프로그램 평가 개발 | Final | -| SP 800-142 | Practical Combinatorial Testing | 실용적 조합 테스트(Combinatorial Testing) | Final | -| SP 800-192 | Verification and Test Methods for Access Control Policies/Models | 접근 제어 정책/모델 검증 및 테스트 방법 | Final | - -
- -
-프라이버시 (Privacy) (1건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-226 | Guidelines for Evaluating Differential Privacy Guarantees | 차등 프라이버시 보증 평가 가이드라인 | Final | - -
- -
-공급망 리스크 관리 (Supply Chain) (1건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-161 Rev. 1 | Cybersecurity Supply Chain Risk Management Practices for Systems and Organizations | 시스템 및 조직을 위한 사이버보안 공급망 리스크 관리 관행 | Final | - -
- -
-인력·교육 (Workforce & Training) (1건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-50 Rev. 1 | Building a Cybersecurity and Privacy Learning Program | 사이버보안/프라이버시 교육·학습 프로그램 구축 | Final | - -
- -
-SCAP·자동화 (Automation) (3건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-51 Rev. 1 | Guide to Using Vulnerability Naming Schemes | 취약점 명명 체계(CVE 등) 활용 가이드 | Final | -| SP 800-70 Rev. 4 | National Checklist Program for IT Products: Guidelines for Checklist Users and Developers | IT 제품 국가 체크리스트 프로그램(NCP) 가이드라인 | Final | -| SP 800-70 Rev. 5 | National Checklist Program for IT Products: Guidelines for Checklist Users and Developers | IT 제품 국가 체크리스트 프로그램(NCP) 가이드라인 | Public Draft | - -
- -
-CMVP·암호모듈 검증 (Cryptographic Module Validation) (8건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-140 | FIPS 140-3 Derived Test Requirements (DTR): CMVP Validation Authority Updates to ISO/IEC 24759 | FIPS 140-3 파생 테스트 요구사항(DTR) | Final | -| SP 800-140A | CMVP Documentation Requirements: CMVP Validation Authority Updates to ISO/IEC 24759 | CMVP 문서화 요구사항 | Final | -| SP 800-140B Rev. 1 | Cryptographic Module Validation Program (CMVP) Security Policy Requirements: CMVP Validation Authority Updates to ISO/IEC 24759 and ISO/IEC 19790 Annex B | CMVP 보안 정책 요구사항 | Final | -| SP 800-140C Rev. 2 | Cryptographic Module Validation Program (CMVP)-Approved Security Functions: CMVP Validation Authority Updates to ISO/IEC 24759 | CMVP 승인 보안 함수 | Final | -| SP 800-140D Rev. 2 | Cryptographic Module Validation Program (CMVP)-Approved Sensitive Security Parameter Generation and Establishment Methods: CMVP Validation Authority Updates to ISO/IEC 24759 | CMVP 승인 민감 보안 파라미터 생성/수립 방법 | Final | -| SP 800-140E | CMVP Approved Authentication Mechanisms: CMVP Validation Authority Requirements for ISO/IEC 19790 Annex E and ISO/IEC 24579 Section 6.17 | CMVP 승인 인증 메커니즘 | Final | -| SP 800-140F | CMVP Approved Non-Invasive Attack Mitigation Test Metrics: CMVP Validation Authority Updates to ISO/IEC 24759 | CMVP 승인 비침습 공격 완화 테스트 메트릭 | Final | -| SP 800-140F Rev. 1 | CMVP Approved Non-Invasive Attack Mitigation Test Metrics: CMVP Validation Authority Updates to ISO/IEC 24759 | CMVP 승인 비침습 공격 완화 테스트 메트릭 | Public Draft | - -
- -
-CUI 보호 (Controlled Unclassified Information) (6건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-171 Rev. 3 | Protecting Controlled Unclassified Information in Nonfederal Systems and Organizations | 비연방 시스템의 CUI 보호 — CMMC 2.0의 기반 | Final | -| SP 800-171A Rev. 3 | Assessing Security Requirements for Controlled Unclassified Information | CUI 보안 요구사항 평가 | Final | -| SP 800-172 | Enhanced Security Requirements for Protecting Controlled Unclassified Information: A Supplement to NIST Special Publication 800-171 | CUI 보호 강화 보안 요구사항 — SP 800-171 보충 | Final | -| SP 800-172 Rev. 3 | Enhanced Security Requirements for Protecting Controlled Unclassified Information | CUI 보호 강화 보안 요구사항 — SP 800-171 보충 | Public Draft | -| SP 800-172A | Assessing Enhanced Security Requirements for Controlled Unclassified Information | CUI 강화 보안 요구사항 평가 | Final | -| SP 800-172A Rev. 3 | Assessing Enhanced Security Requirements for Controlled Unclassified Information | CUI 강화 보안 요구사항 평가 | Public Draft | - -
- -
-연례 보고서 (Annual Reports) (13건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-165 | Computer Security Division 2012 Annual Report | 2012년 컴퓨터 보안 부문 연례 보고서 | Final | -| SP 800-170 | Computer Security Division 2013 Annual Report | 2013년 연례 보고서 | Final | -| SP 800-176 | Computer Security Division 2014 Annual Report | 2014년 연례 보고서 | Final | -| SP 800-182 | Computer Security Division 2015 Annual Report | 2015년 연례 보고서 | Final | -| SP 800-195 | 2016 NIST/ITL Cybersecurity Program Annual Report | 2016년 연례 보고서 | Final | -| SP 800-203 | 2017 NIST/ITL Cybersecurity Program Annual Report | 2017년 연례 보고서 | Final | -| SP 800-206 | Annual Report 2018: NIST/ITL Cybersecurity Program | 2018년 연례 보고서 | Final | -| SP 800-211 | 2019 NIST/ITL Cybersecurity Program Annual Report | 2019년 연례 보고서 | Final | -| SP 800-214 | 2020 Cybersecurity and Privacy Annual Report | 2020년 연례 보고서 | Final | -| SP 800-220 | Fiscal Year 2021 Cybersecurity and Privacy Annual Report | 2021년 연례 보고서 | Final | -| SP 800-225 | Fiscal Year 2022 Cybersecurity and Privacy Annual Report | 2022년 연례 보고서 | Final | -| SP 800-229 | Fiscal Year 2023 Cybersecurity and Privacy Annual Report | 2023년 연례 보고서 | Final | -| SP 800-236 | Fiscal Year 2024 Cybersecurity and Privacy Annual Report | 2024년 연례 보고서 | Final | - -
- -
-기타 (Other) (17건) - -| 문서 번호 | 제목 | 주요 내용 | 상태 | -|-----------|------|----------|------| -| SP 800-34 Rev. 1 | Contingency Planning Guide for Federal Information Systems | 연방 정보시스템 비상 계획(Contingency Planning) 가이드 | Final | -| SP 800-59 | Guideline for Identifying an Information System as a National Security System | 국가 안보 시스템(NSS) 식별 가이드라인 | Final | -| SP 800-60 Vol. 1 Rev. 1 | Guide for Mapping Types of Information and Information Systems to Security Categories | 정보 유형 및 시스템의 보안 범주 매핑 가이드 (FIPS 199 지원) | Final | -| SP 800-60 Vol. 2 Rev. 1 | Guide for Mapping Types of Information and Information Systems to Security Categories: Appendices | 정보 유형 및 시스템의 보안 범주 매핑 가이드 (FIPS 199 지원) | Final | -| SP 800-66 Rev. 2 | Implementing the Health Insurance Portability and Accountability Act (HIPAA) Security Rule: A Cybersecurity Resource Guide | HIPAA 보안 규칙 구현을 위한 사이버보안 리소스 가이드 | Final | -| SP 800-72 | Guidelines on PDA Forensics | PDA 포렌식 가이드라인 | Final | -| SP 800-87 Rev. 2 | Codes for Identification of Federal and Federally-Assisted Organizations | 연방 및 연방 지원 조직 식별 코드 | Final | -| SP 800-88 Rev. 2 | Guidelines for Media Sanitization | 매체 삭제(sanitization) 가이드라인 | Final | -| SP 800-92 | Guide to Computer Security Log Management | 컴퓨터 보안 로그 관리 가이드 | Final | -| SP 800-92 Rev. 1 | Cybersecurity Log Management Planning Guide | 컴퓨터 보안 로그 관리 가이드 | Public Draft | -| SP 800-94 | Guide to Intrusion Detection and Prevention Systems (IDPS) | 침입 탐지/방지 시스템(IDPS) 가이드 | Final | -| SP 800-98 | Guidelines for Securing Radio Frequency Identification (RFID) Systems | RFID 시스템 보안 가이드라인 | Final | -| SP 800-154 | Guide to Data-Centric System Threat Modeling | 데이터 중심 시스템 위협 모델링 가이드 | Public Draft | -| SP 800-168 | Approximate Matching: Definition and Terminology | 근사 매칭(Approximate Matching) 정의 및 용어 | Final | -| SP 800-202 | Quick Start Guide for Populating Mobile Test Devices | 모바일 테스트 디바이스 데이터 적재 빠른 시작 가이드 | Final | -| SP 800-216 | Recommendations for Federal Vulnerability Disclosure Guidelines | 연방 취약점 공개 가이드라인 권고 | Final | -| SP 800-223 | High-Performance Computing Security: Architecture, Threat Analysis, and Security Posture | 고성능 컴퓨팅(HPC) 보안: 아키텍처, 위협 분석, 보안 태세 | Final | - -
- ---- - -## 참고 - -- 이 목록은 NIST CSRC 공식 출판물 데이터에서 추출되었습니다. -- Withdrawn(폐지) 문서는 포함되어 있지 않습니다. -- 동일 문서의 여러 개정판이 존재하는 경우 모두 포함됩니다 (예: SP 800-57 Part 1 Rev. 5와 Rev. 6 Draft). -- SP 800-53 시리즈(53/53A/53B)의 상세 내용은 [SP 800-53 상세 문서](../SP800-53/README.md)를 참고하세요. -- 전체 목록: https://csrc.nist.gov/publications/sp800 \ No newline at end of file diff --git a/NIST/SP800/index.html b/NIST/SP800/index.html new file mode 100644 index 0000000..bd9f1eb --- /dev/null +++ b/NIST/SP800/index.html @@ -0,0 +1,3571 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SP 800 시리즈 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ + + + + + + + + + + +
+ + + + + + + + +

SP 800 시리즈 — 전체 문서 목록

+

개요

+

SP 800 시리즈는 NIST CSRC에서 발행하는 컴퓨터/정보 보안 가이드라인입니다. 현재 209건의 문서가 발행되어 있습니다 (Final + Public Draft).

+ + + + + + + + + + + + + + + + + + + + + +
상태문서 수
Final188건
Public Draft21건
합계209건
+
+

아래 목록은 주제별로 분류되어 있습니다. 각 주제를 클릭하면 해당 문서 목록을 확인할 수 있습니다.

+
+
+

주제별 분류 요약

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
주제문서 수
위험 관리 (Risk Management)5건
보안 컨트롤 및 기준선 (Security Controls & Baselines)14건
식별·인증·접근제어 (Identity & Access)21건
암호 (Cryptography)37건
침해사고 대응 및 포렌식 (Incident Response & Forensics)6건
네트워크·통신 보안 (Network & Communication Security)16건
클라우드·가상화·마이크로서비스 (Cloud & Virtualization)17건
제로 트러스트 (Zero Trust)2건
IoT·OT·산업제어 (IoT & Operational Technology)3건
소프트웨어 개발 보안 (Secure Software Development)8건
시스템·서버·엔드포인트 보안 (System & Endpoint Security)22건
테스트·평가·모니터링 (Testing & Monitoring)8건
프라이버시 (Privacy)1건
공급망 리스크 관리 (Supply Chain)1건
인력·교육 (Workforce & Training)1건
SCAP·자동화 (Automation)3건
CMVP·암호모듈 검증 (Cryptographic Module Validation)8건
CUI 보호 (Controlled Unclassified Information)6건
연례 보고서 (Annual Reports)13건
기타 (Other)17건
+
+
+위험 관리 (Risk Management) (5건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-30 Rev. 1Guide for Conducting Risk Assessments위험 평가 수행 절차 가이드Final
SP 800-37 Rev. 2Risk Management Framework for Information Systems and Organizations: A System Life Cycle Approach for Security and Privacy위험관리 프레임워크(RMF) — 7단계 생명주기 접근Final
SP 800-39Managing Information Security Risk: Organization, Mission, and Information System View조직·미션·시스템 관점의 정보보안 리스크 관리Final
SP 800-221Enterprise Impact of Information and Communications Technology Risk: Governing and Managing ICT Risk Programs Within an Enterprise Risk PortfolioICT 리스크의 엔터프라이즈 영향: ICT 리스크 프로그램 거버넌스 및 관리Final
SP 800-221AInformation and Communications Technology (ICT) Risk Outcomes: Integrating ICT Risk Management Programs with the Enterprise Risk PortfolioICT 리스크 성과: 엔터프라이즈 리스크 포트폴리오 통합Final
+
+
+보안 컨트롤 및 기준선 (Security Controls & Baselines) (14건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-18 Rev. 1Guide for Developing Security Plans for Federal Information Systems보안/프라이버시/공급망 리스크 관리 계획 수립 가이드Final
SP 800-18 Rev. 2Developing Security, Privacy, and Cybersecurity Supply Chain Risk Management Plans for Systems보안/프라이버시/공급망 리스크 관리 계획 수립 가이드Public Draft
SP 800-53 Rev. 5Security and Privacy Controls for Information Systems and Organizations정보시스템 및 조직을 위한 보안/프라이버시 컨트롤 카탈로그Final
SP 800-53A Rev. 5Assessing Security and Privacy Controls in Information Systems and Organizations보안/프라이버시 컨트롤 평가 절차Final
SP 800-53BControl Baselines for Information Systems and Organizations정보시스템 및 조직을 위한 컨트롤 기준선Final
SP 800-181 Rev. 1Workforce Framework for Cybersecurity (NICE Framework)사이버보안 인력 프레임워크(NICE Framework)Final
SP 800-183Networks of 'Things''사물' 네트워크(Networks of Things)Final
SP 800-184Guide for Cybersecurity Event Recovery사이버보안 이벤트 복구 가이드Final
SP 800-185SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHashSHA-3 파생 함수: cSHAKE, KMAC, TupleHash, ParallelHashFinal
SP 800-186Recommendations for Discrete Logarithm-based Cryptography: Elliptic Curve Domain Parameters이산 로그 기반 암호의 타원 곡선 도메인 파라미터 권고Final
SP 800-187Guide to LTE SecurityLTE 보안 가이드Final
SP 800-188De-Identifying Government Datasets: Techniques and Governance정부 데이터셋 비식별화: 기법 및 거버넌스Final
SP 800-189Resilient Interdomain Traffic Exchange: BGP Security and DDoS MitigationBGP 보안 및 DDoS 완화를 위한 복원적 도메인 간 트래픽 교환Final
SP 800-189 Rev. 1Border Gateway Protocol Security and ResilienceBGP 보안 및 DDoS 완화를 위한 복원적 도메인 간 트래픽 교환Public Draft
+
+
+식별·인증·접근제어 (Identity & Access) (21건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-63-4Digital Identity Guidelines디지털 신원 가이드라인 — IAL/AAL/FAL 수준 정의Final
SP 800-63A-4Digital Identity Guidelines: Identity Proofing and Enrollment디지털 신원: 신원 확인(Identity Proofing) 및 등록Final
SP 800-63B-4Digital Identity Guidelines: Authentication and Authenticator Management디지털 신원: 인증 및 인증자 관리Final
SP 800-63C-4Digital Identity Guidelines: Federation and Assertions디지털 신원: 연합(Federation) 및 어설션Final
SP 800-73-5Interfaces for Personal Identity Verification: Part 3 – PIV Client Application Programming InterfacePIV 인터페이스: 클라이언트 API 사양Final
SP 800-76-2Biometric Specifications for Personal Identity VerificationPIV를 위한 생체인식 사양Final
SP 800-78-5Cryptographic Algorithms and Key Sizes for Personal Identity VerificationPIV를 위한 암호 알고리즘 및 키 크기Final
SP 800-79-2Guidelines for the Authorization of Personal Identity Verification Card Issuers (PCI) and Derived PIV Credential Issuers (DPCI)PIV 카드/파생 PIV 자격증명 발급자 인가 가이드라인Final
SP 800-79 Rev. 3Guidelines for the Authorization of PIV Card and Derived PIV Credential IssuersPIV 카드/파생 PIV 자격증명 발급자 인가 가이드라인Public Draft
SP 800-85A-4PIV Card Application and Middleware Interface Test Guidelines (SP 800-73-4 Compliance)PIV 카드 애플리케이션 및 미들웨어 인터페이스 테스트 가이드라인Final
SP 800-85BPIV Data Model Test GuidelinesPIV 데이터 모델 테스트 가이드라인Final
SP 800-96PIV Card to Reader Interoperability GuidelinesPIV 카드-리더기 상호운용성 가이드라인Final
SP 800-116 Rev. 1Guidelines for the Use of PIV Credentials in Facility Access시설 접근에서의 PIV 자격증명 활용 가이드라인Final
SP 800-156Representation of PIV Chain-of-Trust for Import and ExportPIV 신뢰 체인의 반입/반출 표현Final
SP 800-157Guidelines for Derived Personal Identity Verification (PIV) Credentials파생 PIV 자격증명 가이드라인Final
SP 800-157 Rev. 1Guidelines for Derived Personal Identity Verification (PIV) Credentials파생 PIV 자격증명 가이드라인Public Draft
SP 800-162Guide to Attribute Based Access Control (ABAC) Definition and Considerations속성 기반 접근 제어(ABAC) 정의 및 고려사항 가이드Final
SP 800-166Derived PIV Application and Data Model Test Guidelines파생 PIV 애플리케이션 및 데이터 모델 테스트 가이드라인Final
SP 800-178A Comparison of Attribute Based Access Control (ABAC) Standards for Data Service Applications: Extensible Access Control Markup Language (XACML) and Next Generation Access Control (NGAC)ABAC 표준 비교: XACML vs NGACFinal
SP 800-205Attribute Considerations for Access Control Systems접근 제어 시스템의 속성 고려사항Final
SP 800-217Guidelines for Personal Identity Verification (PIV) FederationPIV 연합(Federation) 가이드라인Public Draft
+
+
+암호 (Cryptography) (37건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-22 Rev. 1A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications암호용 난수/의사난수 생성기의 통계적 테스트 스위트Final
SP 800-38ARecommendation for Block Cipher Modes of Operation: Three Variants of Ciphertext Stealing for CBC Mode블록 암호 운용 모드: CBC Ciphertext Stealing 변형Final
SP 800-38BRecommendation for Block Cipher Modes of Operation: the CMAC Mode for Authentication블록 암호 운용 모드: CMAC 인증Final
SP 800-38CRecommendation for Block Cipher Modes of Operation: the CCM Mode for Authentication and Confidentiality블록 암호 운용 모드: CCM 인증 및 기밀성Final
SP 800-38DRecommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC블록 암호 운용 모드: GCM/GMACFinal
SP 800-38ERecommendation for Block Cipher Modes of Operation: the XTS-AES Mode for Confidentiality on Storage Devices블록 암호 운용 모드: XTS-AES (스토리지 암호화)Final
SP 800-38FRecommendation for Block Cipher Modes of Operation: Methods for Key Wrapping블록 암호 운용 모드: 키 래핑 방법Final
SP 800-38GRecommendation for Block Cipher Modes of Operation: Methods for Format-Preserving Encryption블록 암호 운용 모드: 형식 보존 암호화(FPE)Final
SP 800-38G Rev. 1Recommendation for Block Cipher Modes of Operation: Methods for Format-Preserving Encryption블록 암호 운용 모드: 형식 보존 암호화(FPE)Public Draft
SP 800-56A Rev. 3Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography이산 로그 기반 키 교환 방식 권고Final
SP 800-56B Rev. 2Recommendation for Pair-Wise Key-Establishment Using Integer Factorization Cryptography정수 인수분해 기반 키 교환 방식 권고Final
SP 800-56C Rev. 2Recommendation for Key-Derivation Methods in Key-Establishment Schemes키 교환 방식의 키 유도 방법 권고Final
SP 800-57 Part 1 Rev. 5Recommendation for Key Management: Part 1 – General키 관리 권고사항 — 일반 지침, 조직 관행, 응용별 가이드Final
SP 800-57 Part 2 Rev. 1Recommendation for Key Management: Part 2 – Best Practices for Key Management Organizations키 관리 권고사항 — 일반 지침, 조직 관행, 응용별 가이드Final
SP 800-57 Part 3 Rev. 1Recommendation for Key Management, Part 3: Application-Specific Key Management Guidance키 관리 권고사항 — 일반 지침, 조직 관행, 응용별 가이드Final
SP 800-57 Rev. 6Recommendation for Key Management: Part 1 – General키 관리 권고사항 — 일반 지침, 조직 관행, 응용별 가이드Public Draft
SP 800-89Recommendation for Obtaining Assurances for Digital Signature Applications디지털 서명 애플리케이션의 보증 확보 권고Final
SP 800-90A Rev. 1Recommendation for Random Number Generation Using Deterministic Random Bit Generators결정론적 난수 비트 생성기(DRBG) 권고Final
SP 800-90BRecommendation for the Entropy Sources Used for Random Bit Generation난수 비트 생성에 사용되는 엔트로피 소스 권고Final
SP 800-90CRecommendation for Random Bit Generator (RBG) Constructions난수 비트 생성기(RBG) 구성 권고Final
SP 800-107 Rev. 1Recommendation for Applications Using Approved Hash Algorithms승인된 해시 알고리즘 활용 권고Final
SP 800-108 Rev. 1Recommendation for Key Derivation Using Pseudorandom Functions의사난수 함수를 사용한 키 유도 권고Final
SP 800-130A Framework for Designing Cryptographic Key Management Systems암호 키 관리 시스템 설계 프레임워크Final
SP 800-131A Rev. 2Transitioning the Use of Cryptographic Algorithms and Key Lengths암호 알고리즘 및 키 길이 전환 가이드Final
SP 800-131A Rev. 3Transitioning the Use of Cryptographic Algorithms and Key Lengths암호 알고리즘 및 키 길이 전환 가이드Public Draft
SP 800-132Recommendation for Password-Based Key Derivation: Part 1: Storage Applications패스워드 기반 키 유도 권고 (스토리지 애플리케이션)Final
SP 800-133 Rev. 2Recommendation for Cryptographic Key Generation암호 키 생성 권고Final
SP 800-133 Rev. 3Recommendation for Cryptographic Key Generation암호 키 생성 권고Public Draft
SP 800-135 Rev. 1Recommendation for Existing Application-Specific Key Derivation Functions기존 애플리케이션별 키 유도 함수 권고Final
SP 800-152A Profile for U.S. Federal Cryptographic Key Management Systems (CKMS)미국 연방 암호 키 관리 시스템(CKMS) 프로파일Final
SP 800-175AGuideline for Using Cryptographic Standards in the Federal Government: Directives, Mandates and Policies연방 정부의 암호 표준 활용 가이드라인: 지침·의무·정책Final
SP 800-175B Rev. 1Guideline for Using Cryptographic Standards in the Federal Government: Cryptographic Mechanisms연방 정부의 암호 표준 활용 가이드라인: 암호 메커니즘Final
SP 800-208Recommendation for Stateful Hash-Based Signature Schemes상태 유지 해시 기반 서명 방식 권고Final
SP 800-224Keyed-Hash Message Authentication Code (HMAC): Specification of HMAC and Recommendations for Message AuthenticationHMAC 사양 및 메시지 인증 권고Public Draft
SP 800-227Recommendations for Key-Encapsulation Mechanisms키 캡슐화 메커니즘(KEM) 권고 — 양자내성 포함Final
SP 800-230Additional SLH-DSA Parameter Sets for Limited Signature Use Cases제한된 서명 사용을 위한 추가 SLH-DSA 파라미터 세트Public Draft
SP 800-232Ascon-Based Lightweight Cryptography Standards for Constrained Devices: Authenticated Encryption, Hash, and Extendable Output FunctionsAscon 기반 경량 암호 표준: 인증 암호화, 해시, XOFFinal
+
+
+침해사고 대응 및 포렌식 (Incident Response & Forensics) (6건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-61 Rev. 3Incident Response Recommendations and Considerations for Cybersecurity Risk Management: A CSF 2.0 Community Profile침해사고 대응 권고사항 — CSF 2.0 커뮤니티 프로파일Final
SP 800-83 Rev. 1Guide to Malware Incident Prevention and Handling for Desktops and Laptops데스크톱/노트북 악성코드 사고 예방 및 대응 가이드Final
SP 800-84Guide to Test, Training, and Exercise Programs for IT Plans and CapabilitiesIT 계획 및 역량에 대한 테스트·훈련·훈련 프로그램 가이드Final
SP 800-86Guide to Integrating Forensic Techniques into Incident Response포렌식 기법의 침해사고 대응 통합 가이드Final
SP 800-101 Rev. 1Guidelines on Mobile Device Forensics모바일 디바이스 포렌식 가이드라인Final
SP 800-150Guide to Cyber Threat Information Sharing사이버 위협 정보 공유 가이드Final
+
+
+네트워크·통신 보안 (Network & Communication Security) (16건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-41 Rev. 1Guidelines on Firewalls and Firewall Policy방화벽 및 방화벽 정책 가이드라인Final
SP 800-46 Rev. 2Guide to Enterprise Telework, Remote Access, and Bring Your Own Device (BYOD) Security텔레워크·원격 접근·BYOD 보안 가이드Final
SP 800-47 Rev. 1Managing the Security of Information Exchanges정보 교환 보안 관리Final
SP 800-49Federal S/MIME V3 Client Profile연방 S/MIME V3 클라이언트 프로파일Final
SP 800-52 Rev. 2Guidelines for the Selection, Configuration, and Use of Transport Layer Security (TLS) ImplementationsTLS 구현의 선택·구성·사용 가이드라인Final
SP 800-58Security Considerations for Voice Over IP SystemsVoIP 시스템 보안 고려사항Final
SP 800-77 Rev. 1Guide to IPsec VPNsIPsec VPN 가이드Final
SP 800-81 Rev. 3Secure Domain Name System (DNS) Deployment Guide보안 DNS(DNSSEC) 배포 가이드Final
SP 800-95Guide to Secure Web Services보안 웹 서비스 가이드Final
SP 800-113Guide to SSL VPNsSSL VPN 가이드Final
SP 800-114 Rev. 1User's Guide to Telework and Bring Your Own Device (BYOD) Security텔레워크·BYOD 보안 사용자 가이드Final
SP 800-119Guidelines for the Secure Deployment of IPv6IPv6 보안 배포 가이드라인Final
SP 800-121 Rev. 2Guide to Bluetooth Security블루투스 보안 가이드Final
SP 800-153Guidelines for Securing Wireless Local Area Networks (WLANs)무선 LAN(WLAN) 보안 가이드라인Final
SP 800-177 Rev. 1Trustworthy Email신뢰할 수 있는 이메일(Trustworthy Email)Final
SP 800-215Guide to a Secure Enterprise Network Landscape안전한 엔터프라이즈 네트워크 환경 가이드Final
+
+
+클라우드·가상화·마이크로서비스 (Cloud & Virtualization) (17건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-125Guide to Security for Full Virtualization Technologies완전 가상화 기술 보안 가이드Final
SP 800-125A Rev. 1Security Recommendations for Server-based Hypervisor Platforms서버 기반 하이퍼바이저 플랫폼 보안 권고Final
SP 800-125BSecure Virtual Network Configuration for Virtual Machine (VM) ProtectionVM 보호를 위한 가상 네트워크 보안 구성Final
SP 800-144Guidelines on Security and Privacy in Public Cloud Computing퍼블릭 클라우드 컴퓨팅의 보안 및 프라이버시 가이드라인Final
SP 800-145The NIST Definition of Cloud Computing클라우드 컴퓨팅의 NIST 정의Final
SP 800-146Cloud Computing Synopsis and Recommendations클라우드 컴퓨팅 개요 및 권고사항Final
SP 800-190Application Container Security Guide애플리케이션 컨테이너 보안 가이드Final
SP 800-201NIST Cloud Computing Forensic Reference Architecture클라우드 컴퓨팅 포렌식 참조 아키텍처Final
SP 800-204Security Strategies for Microservices-based Application Systems마이크로서비스 기반 애플리케이션 보안 전략Final
SP 800-204ABuilding Secure Microservices-based Applications Using Service-Mesh Architecture서비스 메시 아키텍처를 활용한 안전한 마이크로서비스 구축Final
SP 800-204BAttribute-based Access Control for Microservices-based Applications using a Service Mesh서비스 메시를 활용한 마이크로서비스 속성 기반 접근 제어Final
SP 800-204CImplementation of DevSecOps for a Microservices-based Application with Service Mesh서비스 메시 기반 마이크로서비스의 DevSecOps 구현Final
SP 800-204DStrategies for the Integration of Software Supply Chain Security in DevSecOps CI/CD PipelinesDevSecOps CI/CD 파이프라인의 소프트웨어 공급망 보안 통합 전략Final
SP 800-210General Access Control Guidance for Cloud Systems클라우드 시스템의 일반 접근 제어 가이드Final
SP 800-228Guidelines for API Protection for Cloud-Native Systems클라우드 네이티브 시스템의 API 보호 가이드라인Final
SP 800-233Service Mesh Proxy Models for Cloud-Native Applications클라우드 네이티브 애플리케이션의 서비스 메시 프록시 모델Final
SP 800-234High-Performance Computing (HPC) Security Overlay고성능 컴퓨팅(HPC) 보안 오버레이Public Draft
+
+
+제로 트러스트 (Zero Trust) (2건) + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-207Zero Trust Architecture제로 트러스트 아키텍처(ZTA) 참조 모델Final
SP 800-207AA Zero Trust Architecture Model for Access Control in Cloud-Native Applications in Multi-Cloud Environments멀티 클라우드 환경의 클라우드 네이티브 앱을 위한 ZTA 모델Final
+
+
+IoT·OT·산업제어 (IoT & Operational Technology) (3건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-82 Rev. 3Guide to Operational Technology (OT) SecurityOT(운영기술) 보안 가이드 — ICS/SCADA 포함Final
SP 800-213IoT Device Cybersecurity Guidance for the Federal Government: Establishing IoT Device Cybersecurity Requirements연방 정부 IoT 디바이스 사이버보안 가이드Final
SP 800-213AIoT Device Cybersecurity Guidance for the Federal Government: IoT Device Cybersecurity Requirement CatalogIoT 디바이스 사이버보안 요구사항 카탈로그Final
+
+
+소프트웨어 개발 보안 (Secure Software Development) (8건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-160 Vol. 1 Rev. 1Engineering Trustworthy Secure Systems신뢰할 수 있는 안전한 시스템 엔지니어링 / 사이버 복원력 시스템 개발Final
SP 800-160 Vol. 2 Rev. 1Developing Cyber-Resilient Systems: A Systems Security Engineering Approach신뢰할 수 있는 안전한 시스템 엔지니어링 / 사이버 복원력 시스템 개발Final
SP 800-163 Rev. 1Vetting the Security of Mobile Applications모바일 애플리케이션 보안 검증(Vetting)Final
SP 800-218Secure Software Development Framework (SSDF) Version 1.1: Recommendations for Mitigating the Risk of Software Vulnerabilities안전한 소프트웨어 개발 프레임워크(SSDF) — 소프트웨어 취약점 위험 완화 권고Final
SP 800-218 Rev. 1Secure Software Development Framework (SSDF) Version 1.2: Recommendations for Mitigating the Risk of Software Vulnerabilities안전한 소프트웨어 개발 프레임워크(SSDF) — 소프트웨어 취약점 위험 완화 권고Public Draft
SP 800-218ASecure Software Development Practices for Generative AI and Dual-Use Foundation Models: An SSDF Community Profile생성형 AI 및 이중 용도 기반 모델을 위한 SSDF 커뮤니티 프로파일Final
SP 800-219 Rev. 1Automated Secure Configuration Guidance from the macOS Security Compliance Project (mSCP)macOS 보안 준수 프로젝트(mSCP)의 자동 보안 구성 가이드Final
SP 800-231Bug Framework (BF): Formalizing Cybersecurity Weaknesses and Vulnerabilities버그 프레임워크(BF): 사이버보안 약점 및 취약점 형식화Final
+
+
+시스템·서버·엔드포인트 보안 (System & Endpoint Security) (22건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-12 Rev. 1An Introduction to Information Security정보보안 입문서 — 보안 프로그램의 기본 개념과 요소 소개Final
SP 800-28 Version 2Guidelines on Active Content and Mobile Code액티브 콘텐츠 및 모바일 코드 보안 가이드라인Final
SP 800-35Guide to Information Technology Security ServicesIT 보안 서비스 선정·관리 가이드Final
SP 800-44 Version 2Guidelines on Securing Public Web Servers공개 웹 서버 보안 가이드라인Final
SP 800-45 Version 2Guidelines on Electronic Mail Security이메일 보안 가이드라인Final
SP 800-100Information Security Handbook: A Guide for Managers정보보안 핸드북 — 관리자를 위한 보안 프로그램 가이드Final
SP 800-111Guide to Storage Encryption Technologies for End User Devices최종 사용자 디바이스의 스토리지 암호화 기술 가이드Final
SP 800-122Guide to Protecting the Confidentiality of Personally Identifiable Information (PII)개인식별정보(PII) 기밀성 보호 가이드Final
SP 800-123Guide to General Server Security일반 서버 보안 가이드Final
SP 800-124 Rev. 2Guidelines for Managing the Security of Mobile Devices in the Enterprise엔터프라이즈 모바일 디바이스 보안 관리 가이드라인Final
SP 800-126 Rev. 1The Technical Specification for the Security Content Automation Protocol (SCAP): SCAP Version 1.1보안 콘텐츠 자동화 프로토콜(SCAP) 기술 사양Final
SP 800-126 Rev. 2The Technical Specification for the Security Content Automation Protocol (SCAP): SCAP Version 1.2보안 콘텐츠 자동화 프로토콜(SCAP) 기술 사양Final
SP 800-126 Rev. 3The Technical Specification for the Security Content Automation Protocol (SCAP): SCAP Version 1.3보안 콘텐츠 자동화 프로토콜(SCAP) 기술 사양Final
SP 800-126 Rev. 4Technical Specification for the Security Content Automation Protocol (SCAP): SCAP Version 1.4보안 콘텐츠 자동화 프로토콜(SCAP) 기술 사양Public Draft
SP 800-126ASCAP 1.3 Component Specification Version Updates: An Annex to NIST Special Publication 800-126 Revision 3SCAP 구성요소 사양 버전 업데이트 부록Final
SP 800-126A Rev. 4SCAP 1.4 Component Specification Version Updates: An Annex to NIST Special Publication 800-126 Revision 4SCAP 구성요소 사양 버전 업데이트 부록Public Draft
SP 800-128Guide for Security-Focused Configuration Management of Information Systems정보시스템의 보안 중심 구성 관리 가이드Final
SP 800-147BIOS Protection GuidelinesBIOS 보호 가이드라인Final
SP 800-147BBIOS Protection Guidelines for Servers서버용 BIOS 보호 가이드라인Final
SP 800-167Guide to Application Whitelisting애플리케이션 화이트리스팅 가이드Final
SP 800-193Platform Firmware Resiliency Guidelines플랫폼 펌웨어 복원력 가이드라인Final
SP 800-209Security Guidelines for Storage Infrastructure스토리지 인프라 보안 가이드라인Final
+
+
+테스트·평가·모니터링 (Testing & Monitoring) (8건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-40 Rev. 4Guide to Enterprise Patch Management Planning: Preventive Maintenance for Technology엔터프라이즈 패치 관리 계획 가이드Final
SP 800-55 Vol. 1Measurement Guide for Information Security: Volume 1 — Identifying and Selecting Measures정보보안 측정 가이드 — 측정 지표 식별·선정·개발Final
SP 800-55 Vol. 2Measurement Guide for Information Security: Volume 2 — Developing an Information Security Measurement Program정보보안 측정 가이드 — 측정 지표 식별·선정·개발Final
SP 800-115Technical Guide to Information Security Testing and Assessment정보보안 테스트 및 평가 기술 가이드Final
SP 800-137Information Security Continuous Monitoring (ISCM) for Federal Information Systems and Organizations연방 정보시스템 정보보안 지속적 모니터링(ISCM)Final
SP 800-137AAssessing Information Security Continuous Monitoring (ISCM) Programs: Developing an ISCM Program AssessmentISCM 프로그램 평가 개발Final
SP 800-142Practical Combinatorial Testing실용적 조합 테스트(Combinatorial Testing)Final
SP 800-192Verification and Test Methods for Access Control Policies/Models접근 제어 정책/모델 검증 및 테스트 방법Final
+
+
+프라이버시 (Privacy) (1건) + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-226Guidelines for Evaluating Differential Privacy Guarantees차등 프라이버시 보증 평가 가이드라인Final
+
+
+공급망 리스크 관리 (Supply Chain) (1건) + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-161 Rev. 1Cybersecurity Supply Chain Risk Management Practices for Systems and Organizations시스템 및 조직을 위한 사이버보안 공급망 리스크 관리 관행Final
+
+
+인력·교육 (Workforce & Training) (1건) + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-50 Rev. 1Building a Cybersecurity and Privacy Learning Program사이버보안/프라이버시 교육·학습 프로그램 구축Final
+
+
+SCAP·자동화 (Automation) (3건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-51 Rev. 1Guide to Using Vulnerability Naming Schemes취약점 명명 체계(CVE 등) 활용 가이드Final
SP 800-70 Rev. 4National Checklist Program for IT Products: Guidelines for Checklist Users and DevelopersIT 제품 국가 체크리스트 프로그램(NCP) 가이드라인Final
SP 800-70 Rev. 5National Checklist Program for IT Products: Guidelines for Checklist Users and DevelopersIT 제품 국가 체크리스트 프로그램(NCP) 가이드라인Public Draft
+
+
+CMVP·암호모듈 검증 (Cryptographic Module Validation) (8건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-140FIPS 140-3 Derived Test Requirements (DTR): CMVP Validation Authority Updates to ISO/IEC 24759FIPS 140-3 파생 테스트 요구사항(DTR)Final
SP 800-140ACMVP Documentation Requirements: CMVP Validation Authority Updates to ISO/IEC 24759CMVP 문서화 요구사항Final
SP 800-140B Rev. 1Cryptographic Module Validation Program (CMVP) Security Policy Requirements: CMVP Validation Authority Updates to ISO/IEC 24759 and ISO/IEC 19790 Annex BCMVP 보안 정책 요구사항Final
SP 800-140C Rev. 2Cryptographic Module Validation Program (CMVP)-Approved Security Functions: CMVP Validation Authority Updates to ISO/IEC 24759CMVP 승인 보안 함수Final
SP 800-140D Rev. 2Cryptographic Module Validation Program (CMVP)-Approved Sensitive Security Parameter Generation and Establishment Methods: CMVP Validation Authority Updates to ISO/IEC 24759CMVP 승인 민감 보안 파라미터 생성/수립 방법Final
SP 800-140ECMVP Approved Authentication Mechanisms: CMVP Validation Authority Requirements for ISO/IEC 19790 Annex E and ISO/IEC 24579 Section 6.17CMVP 승인 인증 메커니즘Final
SP 800-140FCMVP Approved Non-Invasive Attack Mitigation Test Metrics: CMVP Validation Authority Updates to ISO/IEC 24759CMVP 승인 비침습 공격 완화 테스트 메트릭Final
SP 800-140F Rev. 1CMVP Approved Non-Invasive Attack Mitigation Test Metrics: CMVP Validation Authority Updates to ISO/IEC 24759CMVP 승인 비침습 공격 완화 테스트 메트릭Public Draft
+
+
+CUI 보호 (Controlled Unclassified Information) (6건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-171 Rev. 3Protecting Controlled Unclassified Information in Nonfederal Systems and Organizations비연방 시스템의 CUI 보호 — CMMC 2.0의 기반Final
SP 800-171A Rev. 3Assessing Security Requirements for Controlled Unclassified InformationCUI 보안 요구사항 평가Final
SP 800-172Enhanced Security Requirements for Protecting Controlled Unclassified Information: A Supplement to NIST Special Publication 800-171CUI 보호 강화 보안 요구사항 — SP 800-171 보충Final
SP 800-172 Rev. 3Enhanced Security Requirements for Protecting Controlled Unclassified InformationCUI 보호 강화 보안 요구사항 — SP 800-171 보충Public Draft
SP 800-172AAssessing Enhanced Security Requirements for Controlled Unclassified InformationCUI 강화 보안 요구사항 평가Final
SP 800-172A Rev. 3Assessing Enhanced Security Requirements for Controlled Unclassified InformationCUI 강화 보안 요구사항 평가Public Draft
+
+
+연례 보고서 (Annual Reports) (13건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-165Computer Security Division 2012 Annual Report2012년 컴퓨터 보안 부문 연례 보고서Final
SP 800-170Computer Security Division 2013 Annual Report2013년 연례 보고서Final
SP 800-176Computer Security Division 2014 Annual Report2014년 연례 보고서Final
SP 800-182Computer Security Division 2015 Annual Report2015년 연례 보고서Final
SP 800-1952016 NIST/ITL Cybersecurity Program Annual Report2016년 연례 보고서Final
SP 800-2032017 NIST/ITL Cybersecurity Program Annual Report2017년 연례 보고서Final
SP 800-206Annual Report 2018: NIST/ITL Cybersecurity Program2018년 연례 보고서Final
SP 800-2112019 NIST/ITL Cybersecurity Program Annual Report2019년 연례 보고서Final
SP 800-2142020 Cybersecurity and Privacy Annual Report2020년 연례 보고서Final
SP 800-220Fiscal Year 2021 Cybersecurity and Privacy Annual Report2021년 연례 보고서Final
SP 800-225Fiscal Year 2022 Cybersecurity and Privacy Annual Report2022년 연례 보고서Final
SP 800-229Fiscal Year 2023 Cybersecurity and Privacy Annual Report2023년 연례 보고서Final
SP 800-236Fiscal Year 2024 Cybersecurity and Privacy Annual Report2024년 연례 보고서Final
+
+
+기타 (Other) (17건) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서 번호제목주요 내용상태
SP 800-34 Rev. 1Contingency Planning Guide for Federal Information Systems연방 정보시스템 비상 계획(Contingency Planning) 가이드Final
SP 800-59Guideline for Identifying an Information System as a National Security System국가 안보 시스템(NSS) 식별 가이드라인Final
SP 800-60 Vol. 1 Rev. 1Guide for Mapping Types of Information and Information Systems to Security Categories정보 유형 및 시스템의 보안 범주 매핑 가이드 (FIPS 199 지원)Final
SP 800-60 Vol. 2 Rev. 1Guide for Mapping Types of Information and Information Systems to Security Categories: Appendices정보 유형 및 시스템의 보안 범주 매핑 가이드 (FIPS 199 지원)Final
SP 800-66 Rev. 2Implementing the Health Insurance Portability and Accountability Act (HIPAA) Security Rule: A Cybersecurity Resource GuideHIPAA 보안 규칙 구현을 위한 사이버보안 리소스 가이드Final
SP 800-72Guidelines on PDA ForensicsPDA 포렌식 가이드라인Final
SP 800-87 Rev. 2Codes for Identification of Federal and Federally-Assisted Organizations연방 및 연방 지원 조직 식별 코드Final
SP 800-88 Rev. 2Guidelines for Media Sanitization매체 삭제(sanitization) 가이드라인Final
SP 800-92Guide to Computer Security Log Management컴퓨터 보안 로그 관리 가이드Final
SP 800-92 Rev. 1Cybersecurity Log Management Planning Guide컴퓨터 보안 로그 관리 가이드Public Draft
SP 800-94Guide to Intrusion Detection and Prevention Systems (IDPS)침입 탐지/방지 시스템(IDPS) 가이드Final
SP 800-98Guidelines for Securing Radio Frequency Identification (RFID) SystemsRFID 시스템 보안 가이드라인Final
SP 800-154Guide to Data-Centric System Threat Modeling데이터 중심 시스템 위협 모델링 가이드Public Draft
SP 800-168Approximate Matching: Definition and Terminology근사 매칭(Approximate Matching) 정의 및 용어Final
SP 800-202Quick Start Guide for Populating Mobile Test Devices모바일 테스트 디바이스 데이터 적재 빠른 시작 가이드Final
SP 800-216Recommendations for Federal Vulnerability Disclosure Guidelines연방 취약점 공개 가이드라인 권고Final
SP 800-223High-Performance Computing Security: Architecture, Threat Analysis, and Security Posture고성능 컴퓨팅(HPC) 보안: 아키텍처, 위협 분석, 보안 태세Final
+
+
+

참고

+
    +
  • 이 목록은 NIST CSRC 공식 출판물 데이터에서 추출되었습니다.
  • +
  • Withdrawn(폐지) 문서는 포함되어 있지 않습니다.
  • +
  • 동일 문서의 여러 개정판이 존재하는 경우 모두 포함됩니다 (예: SP 800-57 Part 1 Rev. 5와 Rev. 6 Draft).
  • +
  • SP 800-53 시리즈(53/53A/53B)의 상세 내용은 SP 800-53 상세 문서를 참고하세요.
  • +
  • 전체 목록: https://csrc.nist.gov/publications/sp800
  • +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/NIST/index.html b/NIST/index.html new file mode 100644 index 0000000..9443147 --- /dev/null +++ b/NIST/index.html @@ -0,0 +1,3178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 개요 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

NIST 사이버보안 및 프라이버시 문서 체계

+

개요

+

NIST(National Institute of Standards and Technology, 미국 국립표준기술연구소)는 미국의 측정·표준·기술을 담당하는 연방기관입니다. 연방 정보보안 현대화법(FISMA)에 따라 사이버보안 및 프라이버시 분야의 표준과 가이드라인을 개발하는 역할도 수행합니다. NIST의 사이버보안/프라이버시 관련 출판물은 미국 연방기관을 대상으로 하지만, 그 체계성과 공신력 때문에 전 세계 보안 실무의 사실상 표준(de facto standard)으로 널리 참조됩니다.

+
+

NIST가 발행하는 사이버보안/프라이버시 출판물은 미국 정부 저작물(U.S. Government Work)로서 퍼블릭 도메인이며, 자유롭게 활용할 수 있습니다.

+
+
+

학습 경로

+

NIST 체계를 처음 접한다면 아래 순서로 읽는 것을 권장합니다.

+
+
    +
  • +

    전체 구조 파악

    +
    +

    이 문서 (아래 계속) — 시리즈 구조, 문서 간 관계도

    +
  • +
  • +

    목표 이해

    +
    +

    CSF 2.0 — 6 Functions, 22 Categories, 106 Subcategories

    +
  • +
  • +

    프로세스 이해

    +
    +

    SP 800-37 — RMF 7단계, 47 Tasks

    +
  • +
  • +

    컨트롤 이해

    +
    +

    SP 800-53 — 20 Families, 1,014 Active Controls

    +
  • +
+
+
+

핵심 경로

+

Step 1→4까지 읽으면 NIST 체계의 핵심을 이해한 것입니다. 아래는 실무 적용 시 참고하세요.

+
+ + + + + + + + + + + + + + + + + + + + +
Step읽을 문서이 단계에서 알게 되는 것
5. 기준선 확인LOW · MOD · HIGH"우리 시스템에 어떤 컨트롤이 필요한가" — 영향도별 체크리스트
6. 평가 방법SP 800-53A"제대로 구현했는지 어떻게 검증하는가" — Examine/Interview/Test
+

추가로 특정 주제의 상세 가이드라인이 필요하면: +- SP 800 전체 목록 (209건) — 주제별 분류 + 한국어 요약으로 필요한 문서를 찾을 수 있습니다 +- SP 1800 전체 목록 (37건) — 실제 구현 사례가 필요할 때 +- 도구 및 데이터 소스 — API, MCP 서버, CLI 등 프로그래밍 방식으로 NIST 데이터를 활용하는 도구

+
+

시리즈 구조

+

NIST 사이버보안/프라이버시 출판물은 CSRC(Computer Security Resource Center)를 통해 관리되며, 아래 시리즈로 분류됩니다.

+
%%{init: {'securityLevel': 'loose', 'theme': 'base'}}%%
+flowchart LR
+    CSRC["<span style='color:#fff'><b>NIST CSRC</b><br/>사이버보안/프라이버시<br/>출판물</span>"]
+
+    CSRC --> FIPS["<span style='color:#fff'><b>FIPS</b><br/>연방 정보처리 표준<br/><i>의무 준수</i></span>"]
+    CSRC --> SP800["<span style='color:#fff'><b>SP 800</b><br/>컴퓨터/정보 보안<br/><i>가이드라인 · 권고</i></span>"]
+    CSRC --> SP1800["<span style='color:#fff'><b>SP 1800</b><br/>사이버보안 실무 가이드<br/><i>구현 예시 · How-To</i></span>"]
+    CSRC --> IR["<span style='color:#fff'><b>IR</b><br/>내부/기관 간 보고서<br/><i>연구 · 분석</i></span>"]
+    CSRC --> CSWP["<span style='color:#fff'><b>CSWP</b><br/>사이버보안 백서<br/><i>신규 주제 · 의견</i></span>"]
+    CSRC --> FW["<span style='color:#fff'><b>프레임워크</b></span>"]
+
+    FW --> CSF["<span style='color:#fff'><b>CSF 2.0</b><br/>사이버보안 프레임워크</span>"]
+    FW --> PF["<span style='color:#fff'><b>PF 1.0</b><br/>프라이버시 프레임워크</span>"]
+
+    style CSRC fill:#263238,stroke:#263238
+    style FIPS fill:#37474f,stroke:#263238
+    style SP800 fill:#1a73e8,stroke:#1558b0
+    style SP1800 fill:#1a73e8,stroke:#1558b0
+    style IR fill:#546e7a,stroke:#37474f
+    style CSWP fill:#546e7a,stroke:#37474f
+    style FW fill:#00695c,stroke:#004d40
+    style CSF fill:#00897b,stroke:#00695c
+    style PF fill:#00897b,stroke:#00695c
+

시리즈 간 관계

+

아래 다이어그램은 NIST 사이버보안 체계의 핵심 문서 간 관계를 보여줍니다. 오른쪽의 RMF(SP 800-37)가 전체 프로세스를 운영하는 축이며, 왼쪽이 각 단계에서 참조하는 문서입니다.

+
%%{init: {'securityLevel': 'loose', 'theme': 'base'}}%%
+flowchart TB
+    subgraph L1["프레임워크 — 무엇을 해야 하는가"]
+        CSF["<span style='color:#fff'><b>CSF 2.0</b><br/>Cybersecurity Framework</span>"]
+        PF["<span style='color:#fff'><b>Privacy Framework</b></span>"]
+    end
+
+    subgraph RMF["SP 800-37 · RMF — 보안 운영 프로세스"]
+        R1["<span style='color:#fff'>1. Prepare<br/>준비</span>"]
+        R2["<span style='color:#fff'>2. Categorize<br/>분류</span>"]
+        R3["<span style='color:#fff'>3. Select<br/>선택</span>"]
+        R4["<span style='color:#fff'>4. Implement<br/>구현</span>"]
+        R5["<span style='color:#fff'>5. Assess<br/>평가</span>"]
+        R6["<span style='color:#fff'>6. Authorize<br/>인가</span>"]
+        R7["<span style='color:#fff'>7. Monitor<br/>모니터링</span>"]
+        R1 --> R2 --> R3 --> R4 --> R5 --> R6 --> R7
+        R7 -.-> R1
+    end
+
+    subgraph L2["컨트롤 — 어떤 통제를 적용할 것인가"]
+        CTRL["<span style='color:#fff'><b>SP 800-53</b><br/>컨트롤 카탈로그<br/>20 Families · 1,014 Active</span>"]
+        ASSESS["<span style='color:#333'><b>SP 800-53A</b><br/>평가 절차</span>"]
+        BASE["<span style='color:#333'><b>SP 800-53B</b><br/>기준선 (LOW · MOD · HIGH · PRIVACY)</span>"]
+    end
+
+    subgraph L3["가이드라인 — 주제별 상세 지침"]
+        SP800["<span style='color:#fff'><b>SP 800 시리즈</b><br/>주제별 상세 가이드<br/>CUI · ZTA · 침해대응 · 암호 등</span>"]
+    end
+
+    subgraph L4["실무 구현 — 어떻게 구현할 것인가"]
+        SP1800["<span style='color:#333'><b>SP 1800 시리즈</b><br/>실무 구현 가이드 (How-To)<br/>아키텍처 · 구성 절차 · 사례</span>"]
+    end
+
+    FIPS["<span style='color:#fff'><b>FIPS</b><br/>연방 표준<br/><i>의무 준수</i></span>"]
+
+    CSF -- "목표를 컨트롤로 매핑" --> CTRL
+    PF -- "프라이버시 컨트롤 연계" --> CTRL
+    CTRL --> ASSESS
+    CTRL --> BASE
+
+    R2 -. "FIPS 199로 영향도 분류" .-> FIPS
+    R3 -. "기준선 선택" .-> BASE
+    R4 -. "컨트롤 구현" .-> CTRL
+    R4 -. "상세 지침 참조" .-> SP800
+    R5 -. "평가 절차 적용" .-> ASSESS
+    SP800 -- "구현 예시" --> SP1800
+
+    style L1 fill:none,stroke:#1a73e8,stroke-width:2px
+    style RMF fill:none,stroke:#d32f2f,stroke-width:2px
+    style L2 fill:none,stroke:#e65100,stroke-width:2px
+    style L3 fill:none,stroke:#2e7d32,stroke-width:2px
+    style L4 fill:none,stroke:#558b2f,stroke-width:2px
+    style CSF fill:#1a73e8,stroke:#1558b0
+    style PF fill:#7b1fa2,stroke:#6a1b9a
+    style CTRL fill:#e65100,stroke:#bf360c
+    style ASSESS fill:#fff3e0,stroke:#e65100
+    style BASE fill:#fff3e0,stroke:#e65100
+    style SP800 fill:#2e7d32,stroke:#1b5e20
+    style SP1800 fill:#c8e6c9,stroke:#2e7d32
+    style FIPS fill:#37474f,stroke:#263238
+    style R1 fill:#d32f2f,stroke:#b71c1c
+    style R2 fill:#d32f2f,stroke:#b71c1c
+    style R3 fill:#d32f2f,stroke:#b71c1c
+    style R4 fill:#d32f2f,stroke:#b71c1c
+    style R5 fill:#d32f2f,stroke:#b71c1c
+    style R6 fill:#d32f2f,stroke:#b71c1c
+    style R7 fill:#d32f2f,stroke:#b71c1c
+
+

RMF 7단계가 NIST 체계를 운영하는 중심 프로세스입니다. 각 단계에서 해당 문서를 참조합니다:
+Categorize → FIPS 199 | Select → SP 800-53B | Implement → SP 800-53 + SP 800 시리즈 | Assess → SP 800-53A

+
+
+

상세 안내

+

한눈에 보기

+

아래 표는 위 다이어그램의 위계 순서(프레임워크 → 컨트롤 → 가이드라인 → 실무 구현 → 표준 → 기타)로 정렬되어 있습니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
시리즈성격문서 수핵심 키워드링크
CSF 2.0사이버보안 프레임워크6 Functions, 22 Categories, 106 SubcategoriesCSF
PF 1.0프라이버시 프레임워크5 FunctionsPF
SP 800-53보안/프라이버시 컨트롤3건 (53/53A/53B)20 Families, 1,196 Controls, 4 BaselinesSP 800-53
SP 800-37위험관리 프레임워크 (RMF)1건7단계, 47 Tasks — 보안 운영 프로세스의 중심축SP 800-37
SP 800가이드라인 (권고)209건CUI, ZTA, 침해대응, 암호 등SP 800
SP 1800실무 구현 사례37건랜섬웨어, ZTA 구현, IoT, PQCSP 1800
FIPS연방 표준 (의무)13건AES, SHA, 암호모듈, 보안분류FIPS
IR연구/분석 보고서266건ERM, IoT, 신기술 분석IR
CSWP백서55건신규 주제, CSF/PF 원문CSWP
+
+

아래 각 항목을 클릭하면 상세 내용을 확인할 수 있습니다.

+
+
+

프레임워크 — 무엇을 해야 하는가

+
+Cybersecurity Framework (CSF) 2.0 + + + + + + + + + + + + + + + + + + + + + +
항목내용
발행일2024년 2월 26일
이전 버전CSF 1.1 (2018년)
URLhttps://www.nist.gov/cyberframework
+

CSF는 NIST의 다양한 문서를 하나의 체계로 엮는 최상위 프레임워크입니다. 전체 구조(106 Subcategories 포함)는 CSF 2.0 상세 문서를 참고하세요.

+

구조: 6 Functions → Categories → Subcategories

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Function코드설명Categories
GovernGV조직의 사이버보안 리스크 관리 전략, 기대치, 정책을 수립하고 모니터링. CSF 2.0에서 신설6개
IdentifyID현재의 사이버보안 리스크를 이해 — 자산, 취약점, 위협 식별3개
ProtectPR보안 위험을 관리하기 위한 보호조치 적용 — 접근제어, 교육, 데이터 보안5개
DetectDE사이버보안 공격과 침해를 탐지 — 지속적 모니터링, 이상 분석2개
RespondRS탐지된 사이버보안 사고에 대응 — 사고 관리, 분석, 완화, 보고4개
RecoverRC사이버보안 사고로 영향받은 자산과 운영을 복구2개
+
+

총 22 Categories, 106 Subcategories

+
+
CSF 2.0 계층 구조 예시:
+
+GV (Govern)
+├── GV.OC (Organizational Context)
+│   ├── GV.OC-01: 조직의 미션이 이해되고 사이버보안 리스크 관리에 반영
+│   ├── GV.OC-02: 내부/외부 이해관계자가 파악되고 그들의 요구사항이 이해됨
+│   └── ...
+├── GV.RM (Risk Management Strategy)
+│   ├── GV.RM-01: 리스크 관리 목표가 수립되고 이해관계자의 동의를 받음
+│   └── ...
+├── GV.RR (Roles, Responsibilities, and Authorities)
+├── GV.PO (Policy)
+├── GV.OV (Oversight)
+└── GV.SC (Cybersecurity Supply Chain Risk Management)
+
+

CSF의 활용 방식

+
    +
  1. Current Profile: 현재 사이버보안 상태를 CSF 항목으로 매핑
  2. +
  3. Target Profile: 목표 사이버보안 상태를 정의
  4. +
  5. Gap Analysis: Current vs Target 비교 → 우선순위 도출
  6. +
  7. Implementation Tiers (Tier 1~4): 조직의 리스크 관리 접근 수준 (성숙도 모델이 아님)
  8. +
+
+
+Privacy Framework (PF) 1.0 + + + + + + + + + + + + + + + + + + + + + +
항목내용
발행일2020년 1월 16일
차기 버전PF 1.1 (Initial Public Draft 공개, 최종판 발행 예정)
URLhttps://www.nist.gov/privacy-framework
+

CSF와 유사한 구조로, 프라이버시 리스크 관리를 위한 프레임워크입니다. 전체 구조(100 Subcategories 포함)는 PF 1.0 상세 문서를 참고하세요.

+

구조: 5 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Function설명
Identify-P프라이버시 리스크 관리를 위한 조직적 이해
Govern-P프라이버시 거버넌스 체계
Control-P데이터 처리에 대한 관리 활동
Communicate-P데이터 처리 관행에 대한 이해관계자 소통
Protect-P데이터 보호를 위한 기술적/관리적 조치
+
+
+

컨트롤 — 어떤 통제를 적용할 것인가

+
+SP 800-53 Rev. 5: 보안 컨트롤 체계 +

SP 800-53은 NIST 체계에서 가장 핵심적인 문서입니다. CSF의 추상적 목표를 구체적인 보안 컨트롤로 변환합니다. 전체 컨트롤 목록(300 base controls)은 SP 800-53 상세 문서를 참고하세요. 53 시리즈는 3개 문서로 구성됩니다:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
문서역할핵심 질문
SP 800-53컨트롤 카탈로그"어떤 통제 항목이 존재하는가?" — 20개 패밀리, 1,196 컨트롤 정의
SP 800-53A평가 절차"컨트롤이 제대로 구현되었는지 어떻게 검증하는가?" — 각 컨트롤별 평가 방법과 판단 기준
SP 800-53B기준선"우리 시스템에 어떤 컨트롤을 적용해야 하는가?" — 영향도별(LOW/MOD/HIGH/PRIVACY) 필수 컨트롤 세트
+

20개 컨트롤 패밀리

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
코드패밀리설명
ACAccess Control접근 제어 정책 및 메커니즘
ATAwareness and Training보안 교육 및 인식
AUAudit and Accountability감사 로깅, 검토, 보존
CAAssessment, Authorization, and Monitoring보안 평가 및 인가
CMConfiguration Management구성 기준선 및 변경 통제
CPContingency Planning사업 연속성 및 재해 복구
IAIdentification and Authentication신원 확인 메커니즘
IRIncident Response사고 탐지, 처리, 보고
MAMaintenance시스템 유지보수
MPMedia Protection매체 접근, 표시, 저장, 폐기
PEPhysical and Environmental Protection물리적 접근 및 환경 통제
PLPlanning보안 계획 및 시스템 보안 계획서
PMProgram Management조직 차원의 정보보안 프로그램
PSPersonnel Security인력 심사 및 접근 계약
PTPII Processing and Transparency개인정보 처리 및 투명성
RARisk Assessment위험 식별, 분석, 대응
SASystem and Services Acquisition안전한 개발 및 공급망
SCSystem and Communications Protection암호화 및 통신 보호
SISystem and Information Integrity결함 교정, 모니터링, 악성코드 보호
SRSupply Chain Risk Management공급망 통제 및 출처
+

기준선 (Baselines)

+

SP 800-53B에서 정의하는 기준선은 시스템의 영향도(Impact Level)에 따라 적용할 컨트롤 세트를 지정합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
기준선영향도컨트롤 수적용 상황
LOW제한적 피해149개기밀성/무결성/가용성 손실 시 피해가 제한적
MODERATE심각한 피해287개피해가 심각한 수준
HIGH치명적 피해370개피해가 치명적/재앙적
PRIVACY개인정보~110개PII를 처리하는 시스템
+
+

컨트롤 수는 NIST OSCAL 공식 프로파일 기준입니다. PRIVACY 기준선은 별도 집계로 근사값입니다.

+
+
+
+

가이드라인 — 주제별 상세 지침

+
+SP 800 시리즈 — 가이드라인 및 권고사항 (209건) +

NIST 사이버보안의 핵심 시리즈입니다. 번호는 800-12부터 800-236까지 있으며, 전체 209건의 주제별 분류 목록은 SP 800 전체 문서 목록을 참고하세요. 아래는 주요 문서만 발췌한 것입니다:

+
+

SP 800-53 시리즈(53/53A/53B)는 별도 섹션에서 상세히 다루고 있으므로 여기서는 생략합니다.

+
+

위험 관리 (Risk Management)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
문서제목핵심 내용
SP 800-30Guide for Conducting Risk Assessments위험 평가 수행 가이드
SP 800-37Risk Management Framework (RMF)위험관리 프레임워크 — 준비→분류→선택→구현→평가→인가→모니터링 7단계
SP 800-39Managing Information Security Risk조직 수준의 정보보안 위험 관리
+

CUI 보호 (Controlled Unclassified Information)

+ + + + + + + + + + + + + + + + + + + + +
문서제목핵심 내용
SP 800-171 Rev. 3Protecting CUI in Nonfederal Systems비연방 시스템의 CUI 보호 요구사항. CMMC 2.0의 기반
SP 800-172Enhanced Security Requirements for CUICUI 보호 강화 요구사항
+

인증 및 접근 제어 (Identity & Access)

+ + + + + + + + + + + + + + + + + + + + +
문서제목핵심 내용
SP 800-63-4Digital Identity Guidelines디지털 인증 가이드라인 (IAL/AAL/FAL)
SP 800-207Zero Trust Architecture제로 트러스트 아키텍처 참조 모델
+

침해사고 대응 (Incident Response)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
문서제목핵심 내용
SP 800-61 Rev. 3Incident Response Recommendations침해사고 대응 권고사항 (CSF 2.0 연계)
SP 800-86Guide to Integrating Forensic Techniques포렌식 기법 가이드
SP 800-83Guide to Malware Incident Prevention악성코드 사고 예방/대응
+

보안 테스트 및 평가 (Testing & Assessment)

+ + + + + + + + + + + + + + + + + + + + +
문서제목핵심 내용
SP 800-115Technical Guide to Information Security Testing보안 테스트 기술 가이드
SP 800-137Information Security Continuous Monitoring지속적 모니터링
+

클라우드 및 신기술 (Cloud & Emerging Tech)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서제목핵심 내용
SP 800-210General Access Control Guidance for Cloud Systems클라우드 접근 제어
SP 800-213IoT Device Cybersecurity GuidanceIoT 디바이스 보안
SP 800-218Secure Software Development Framework (SSDF)안전한 소프트웨어 개발 프레임워크
SP 800-228Guidance for Securing AI SystemsAI 시스템 보안 가이드
+

암호 (Cryptography)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
문서제목핵심 내용
SP 800-57Recommendation for Key Management키 관리 권고사항 (Part 1~3)
SP 800-175BGuideline for Using Cryptographic Standards암호 표준 사용 가이드
SP 800-227Recommendations for Key-Encapsulation Mechanisms양자내성 암호 키 캡슐화 권고
+

OT/산업제어 (Operational Technology)

+ + + + + + + + + + + + + + + +
문서제목핵심 내용
SP 800-82 Rev. 3Guide to Operational Technology (OT) SecurityOT/ICS/SCADA 보안 가이드
+
+

위 목록은 SP 800 시리즈의 주요 문서만 발췌한 것입니다. 전체 목록은 NIST SP 800 시리즈 페이지에서 확인할 수 있습니다.

+
+
+
+

실무 구현 — 어떻게 구현할 것인가

+
+SP 1800 시리즈 — 실무 구현 가이드 (37건) +

NCCoE(National Cybersecurity Center of Excellence)에서 발행합니다. SP 800이 주제별 요구사항과 절차를 설명한다면, SP 1800은 실제 제품과 아키텍처를 사용해 어떻게 구현하는지 보여줍니다. 전체 37건의 주제별 분류 목록은 SP 1800 전체 문서 목록을 참고하세요.

+

각 문서는 보통 3개 파트로 구성됩니다: +- Volume A: Executive Summary (경영진 요약) +- Volume B: Approach, Architecture, and Security Characteristics (접근 방법) +- Volume C: How-To Guides (단계별 구현 절차)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
문서주제
SP 1800-25Data Integrity: Identifying and Protecting Assets Against Ransomware
SP 1800-26Data Integrity: Detecting and Responding to Ransomware
SP 1800-35Implementing a Zero Trust Architecture
SP 1800-36Trusted IoT Onboarding
SP 1800-38Migration to Post-Quantum Cryptography
+
+
+

연방 표준 및 기타

+
+FIPS — 연방 정보처리 표준 (13건) +

연방 표준으로, 미국 연방기관은 의무 준수 대상입니다. FISMA에 의해 NIST에 표준 개발 권한이 부여되었습니다.

+
+

FIPS와 SP의 차이: FIPS는 "무엇을 해야 하는가"(의무), SP는 "어떻게 해야 하는가"(권고). 예: FIPS 200이 최소 보안 요구사항을 정의하면, SP 800-53이 그 요구사항을 충족하기 위한 구체적 보안 컨트롤을 제공합니다.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
번호제목내용
FIPS 140-2Security Requirements for Cryptographic Modules암호 모듈 보안 요구사항 (기존 표준, 140-3으로 전환 중이나 기존 인증 유효)
FIPS 140-3Security Requirements for Cryptographic Modules암호 모듈 보안 요구사항 (현행 표준, 신규 인증은 140-3 기준)
FIPS 180-4Secure Hash Standard (SHS)SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 해시 함수 표준
FIPS 186-5Digital Signature Standard (DSS)디지털 서명 알고리즘 표준 (RSA, ECDSA, EdDSA)
FIPS 197Advanced Encryption Standard (AES)AES 암호화 알고리즘 표준
FIPS 198-1The Keyed-Hash Message Authentication Code (HMAC)HMAC 표준
FIPS 199Standards for Security Categorization정보/정보시스템의 보안 분류 기준 (LOW/MODERATE/HIGH)
FIPS 200Minimum Security Requirements연방 정보시스템 최소 보안 요구사항
FIPS 201-3Personal Identity Verification (PIV)연방 직원/계약자 신원확인 표준
FIPS 202SHA-3 StandardSHA-3 해시 함수 표준
FIPS 203ML-KEM (Module-Lattice-Based Key-Encapsulation)양자내성 키 캡슐화 표준
FIPS 204ML-DSA (Module-Lattice-Based Digital Signature)양자내성 디지털 서명 표준
FIPS 205SLH-DSA (Stateless Hash-Based Digital Signature)양자내성 해시 기반 서명 표준
+
+
+NIST IR — 연구/분석 보고서 (266건) +

특정 주제에 대한 연구 결과나 심층 분석을 담습니다. 일부는 이후 SP 시리즈로 발전하기도 합니다.

+ + + + + + + + + + + + + + + + + + + + + +
문서제목
IR 8286Integrating Cybersecurity and Enterprise Risk Management (ERM)
IR 8259Foundational Cybersecurity Activities for IoT Device Manufacturers
IR 8401Satellite Ground Segment: Applying the CSF to Satellite C2
+
+
+CSWP — 사이버보안 백서 (55건) +

신규 주제에 대한 의견 제시나 프레임워크 문서를 포함합니다.

+
+

CSF 2.0과 Privacy Framework도 CSWP로 분류됩니다.
+예: CSWP 29 = CSF 2.0, CSWP 10 = Privacy Framework 1.0

+
+
+
+

부록

+
+문서 상태(Publication Status) + + + + + + + + + + + + + + + + + + + + + + + + + +
상태의미
Final최종 확정본
Public Draft / IPD공개 초안 — 공개 의견 수렴 중
Superseded대체됨 — 새로운 버전이 발행되어 이전 버전을 대체
Withdrawn폐지 — 더 이상 유효하지 않음
+

NIST 문서는 지속적으로 개정됩니다. 버전 표기는 두 가지입니다: +- Rev. N (Revision) — 주요 개정. 예: SP 800-53 Rev. 5 +- Update N — 소규모 업데이트. 예: SP 800-53 Rev. 5, Update 1

+
+
+머신 리더블 데이터(Machine-Readable Data) +

NIST는 문서 내용을 프로그래밍 방식으로 접근할 수 있도록 여러 형식을 제공합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
도구/형식설명URL
OSCALOpen Security Controls Assessment Language (v1.0.6). SP 800-53 컨트롤을 JSON/XML/YAML로 제공https://pages.nist.gov/OSCAL/
CPRTCybersecurity and Privacy Reference Tool. 컨트롤 간 관계를 JSON/XLSX로 제공https://csrc.nist.gov/projects/cprt
NVD APINational Vulnerability Database API. CVE/CPE 데이터를 REST API로 제공https://nvd.nist.gov/developers
Publications XLSX전체 출판물 메타데이터를 엑셀로 다운로드다운로드
RSS/JSON Feed공개 초안 알림 피드https://csrc.nist.gov/CSRC/media/feeds/pubs/drafts-open-for-comment.json
GitHubOSCAL 콘텐츠, 기술 출판물 메타데이터 등https://github.com/usnistgov
+
+
+참고 링크 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
리소스URL
NIST CSRC (메인)https://csrc.nist.gov
SP 800 시리즈https://csrc.nist.gov/publications/sp800
SP 1800 시리즈https://csrc.nist.gov/publications/sp1800
NIST IR 시리즈https://csrc.nist.gov/publications/ir
FIPShttps://csrc.nist.gov/publications/fips
CSF 2.0https://www.nist.gov/cyberframework
Privacy Frameworkhttps://www.nist.gov/privacy-framework
NVDhttps://nvd.nist.gov
OSCALhttps://pages.nist.gov/OSCAL
CPRThttps://csrc.nist.gov/projects/cprt
+
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/NIST/tools.md b/NIST/tools.md deleted file mode 100644 index 86d0b80..0000000 --- a/NIST/tools.md +++ /dev/null @@ -1,115 +0,0 @@ -# NIST 사이버보안 도구 및 데이터 소스 - -NIST 문서를 프로그래밍 방식으로 조회하거나, AI 에이전트와 연동하여 활용할 수 있는 도구들을 정리합니다. - ---- - -## 1. NIST 공식 데이터 소스 - -### API - -| 도구 | 설명 | 인증 | URL | -|------|------|------|-----| -| **NVD API 2.0** | CVE 취약점, CPE 제품 정보를 REST API로 조회 | API Key 권장 (무료). 미사용 시 5req/30초, Key 사용 시 대폭 상향 | https://nvd.nist.gov/developers | -| **CPRT** | 컨트롤 간 관계(CSF↔SP 800-53↔PF) 데이터를 JSON/XLSX로 제공 | 없음 | https://csrc.nist.gov/projects/cprt | - -### 다운로드 - -| 도구 | 설명 | 형식 | URL | -|------|------|------|-----| -| **OSCAL** | SP 800-53 컨트롤 카탈로그, 기준선 프로파일을 기계 판독 가능 형식으로 제공 | JSON, XML, YAML | https://github.com/usnistgov/oscal-content | -| **Publications XLSX** | 전체 NIST 사이버보안 출판물 메타데이터 (제목, 번호, 상태, 날짜) | XLSX | [다운로드](https://csrc.nist.gov/files/pubs/shared/docs/NIST-Cybersecurity-Publications.xlsx) | -| **CSF 2.0 Core** | CSF 2.0 전체 구조 (Functions→Categories→Subcategories) | XLSX, PDF | https://www.nist.gov/cyberframework | -| **PF 1.0 Core** | Privacy Framework 전체 구조 | XLSX | https://www.nist.gov/document/nist-privacy-framework-v10-core | -| **NIST Tech Pubs** | 전체 NIST 기술 출판물 메타데이터 (MODS XML) | XML | https://github.com/usnistgov/NIST-Tech-Pubs | - -### 피드 - -| 도구 | 설명 | 형식 | URL | -|------|------|------|-----| -| **Draft Publications Feed** | 공개 의견 수렴 중인 초안 문서 알림 | JSON | https://csrc.nist.gov/CSRC/media/feeds/pubs/drafts-open-for-comment.json | -| **Draft Publications Feed** | 동일 (RSS 형식) | XML/RSS | https://csrc.nist.gov/CSRC/media/feeds/pubs/drafts-open-for-comment.xml | - -### CLI 도구 - -| 도구 | 설명 | URL | -|------|------|-----| -| **OSCAL CLI** | OSCAL 문서의 변환(XML↔JSON↔YAML), 검증, 비교를 수행하는 Java 기반 CLI | https://github.com/usnistgov/oscal-cli | - ---- - -## 2. MCP 서버 (AI 에이전트 연동) - -MCP(Model Context Protocol) 서버를 사용하면 Claude, Cursor 등 AI 도구에서 NIST 데이터를 직접 조회할 수 있습니다. - -### 종합 (NIST + OWASP 통합) - -| MCP | 커버리지 | 특징 | GitHub | -|-----|---------|------|--------| -| **zer0-kr/security-framework-mcp** | **NIST:** SP 800-53 (1,196 + 53A 평가 + 53B 기준선), CSF 2.0, PF 1.0, SP 800-37 RMF, 613 출판물, CMVP, NICE, 용어사전 **+ OWASP:** Top 10 4종, ASVS, WSTG, MASVS, Cheat Sheets 등 11개 소스 | **OWASP+NIST 통합 유일.** 33개 도구, 3,329 레코드, STRIDE 위협 모델링, 컴플라이언스 매핑(PCI-DSS/ISO27001/800-53), MCP Top 10 보안 평가, 실시간 NVD | [GitHub](https://github.com/zer0-kr/security-framework-mcp) | - -### SP 800-53 컨트롤 특화 - -| MCP | 커버리지 | 특징 | GitHub | -|-----|---------|------|--------| -| **tnicholson/nist-mcp-server** | SP 800-53 (1,196), CSF 2.0, CMMC 2.0, FedRAMP, SP 800-171 | 갭 분석, 리스크 평가, SOC2/ISO27001 매핑 | [GitHub](https://github.com/tnicholson/nist-mcp-server) | -| **Ansvar-Systems/security-controls-mcp** | 1,451 SCF 컨트롤 × 262 프레임워크 | 양방향 프레임워크 매핑. PyPI 배포 | [GitHub](https://github.com/Ansvar-Systems/security-controls-mcp) | -| **MarkAC007/mcp-server-scf** | 1,451 SCF + 354 프레임워크 + 증거 추적 | 39 도구. GRC 플랫폼급 | [GitHub](https://github.com/MarkAC007/mcp-server-scf) | - -### CSF 2.0 평가 특화 - -| MCP | 커버리지 | 특징 | GitHub | -|-----|---------|------|--------| -| **rocklambros/nist-csf-2-mcp-server** | CSF 2.0 전체 (자체 확장 구조 포함) | 740개 평가 질문, 40+ 도구, 대시보드. NIST 공식 커뮤니티 리소스 등재 | [GitHub](https://github.com/rocklambros/nist-csf-2-mcp-server) | - -### NVD 취약점 특화 - -| MCP | 커버리지 | 특징 | GitHub | -|-----|---------|------|--------| -| **HaroldFinchIFT/vuln-nist-mcp-server** | NVD (CVE, CPE, CISA KEV) | Docker Hub 등록. 자동 청킹/병렬 처리 | [GitHub](https://github.com/HaroldFinchIFT/vuln-nist-mcp-server) | -| **Cyreslab-AI/nist-nvd-mcp-server** | NVD (CVE, CVSS v2/v3/v4) | JavaScript. 캐싱/레이트리밋 내장 | [GitHub](https://github.com/Cyreslab-AI/nist-nvd-mcp-server) | - -### OSCAL / GRC 자동화 - -| MCP | 커버리지 | 특징 | GitHub | -|-----|---------|------|--------| -| **awslabs/mcp-server-for-oscal** | NIST OSCAL (SP 800-53, SP 800-171, FedRAMP) | AWS 공식. SSP/SAR/POA&M 자동화 | [GitHub](https://github.com/awslabs/mcp-server-for-oscal) | - -### 기타 보안 프레임워크 - -| MCP | 커버리지 | 특징 | GitHub | -|-----|---------|------|--------| -| **Ansvar-Systems/ot-security-mcp** | IEC 62443, NIST 800-82, NIST 800-53, MITRE ATT&CK ICS | OT/산업제어 보안 전문 | [GitHub](https://github.com/ansvar-systems/ot-security-mcp) | -| **Ansvar-Systems/US_Compliance_MCP** | HIPAA, CCPA, SOX, GLBA + NIST 800-53/CSF 매핑 | 미국 규제법 + NIST 교차 참조 | [GitHub](https://github.com/ansvar-systems/us_compliance_mcp) | -| **ethanolivertroy/fedramp-docs-mcp** | FedRAMP 20x KSI + NIST SP 800-53 매핑 | 20 도구. FRMR JSON 파싱 | [GitHub](https://github.com/ethanolivertroy/fedramp-docs-mcp) | - ---- - -## 3. 용도별 추천 - -| 나는 이런 게 필요하다 | 추천 도구 | -|---------------------|----------| -| NIST + OWASP를 통합해서 AI로 검색하고 싶다 | **zer0-kr/security-framework-mcp** | -| STRIDE 위협 모델링을 자동화하고 싶다 | **zer0-kr/security-framework-mcp** (`threat_model`) | -| SP 800-53 컨트롤을 기준선별로 조회하고 싶다 | **zer0-kr/security-framework-mcp** (`get_nist_control baseline=LOW`) | -| ASVS를 PCI-DSS/ISO 27001/800-53에 매핑하고 싶다 | **zer0-kr/security-framework-mcp** (`compliance_map`) | -| NIST 문서를 검색하고 내용을 조회하고 싶다 | **zer0-kr/security-framework-mcp** (`get_nist_publication`, `search_nist`) | -| SP 800-53 컨트롤을 조회하고 갭 분석하고 싶다 | **tnicholson/nist-mcp-server** | -| CSF 2.0 기반으로 조직 평가를 수행하고 싶다 | **rocklambros/nist-csf-2-mcp-server** | -| CVE 취약점을 조회하고 싶다 | **zer0-kr/security-framework-mcp** (`search_cve`) 또는 **HaroldFinchIFT/vuln-nist-mcp-server** | -| 여러 프레임워크 간 매핑이 필요하다 (ISO 27001, SOC 2 등) | **Ansvar-Systems/security-controls-mcp** | -| OSCAL 기반 GRC 자동화를 하고 싶다 | **awslabs/mcp-server-for-oscal** | -| 코드 없이 데이터만 다운로드하고 싶다 | **NIST Publications XLSX** + **OSCAL Content** | - ---- - -## 4. NIST 공식 GitHub 저장소 - -| 저장소 | 내용 | URL | -|--------|------|-----| -| **usnistgov/OSCAL** | OSCAL 스키마 및 도구 | https://github.com/usnistgov/OSCAL | -| **usnistgov/oscal-content** | SP 800-53, CSF 2.0, FedRAMP 기준선의 OSCAL 데이터 | https://github.com/usnistgov/oscal-content | -| **usnistgov/NIST-Tech-Pubs** | 전체 NIST 기술 출판물 메타데이터 | https://github.com/usnistgov/NIST-Tech-Pubs | -| **usnistgov/SCAP** | 보안 콘텐츠 자동화 프로토콜 사양 | https://github.com/usnistgov/SCAP | -| **usnistgov/800-63-3** | 디지털 신원 가이드라인 (SP 800-63) | https://github.com/usnistgov/800-63-3 | -| **usnistgov/macos_security** | macOS 보안 준수 프로젝트 (mSCP) | https://github.com/usnistgov/macos_security | diff --git a/NIST/tools/index.html b/NIST/tools/index.html new file mode 100644 index 0000000..af28c59 --- /dev/null +++ b/NIST/tools/index.html @@ -0,0 +1,2513 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 도구 및 데이터 소스 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

NIST 사이버보안 도구 및 데이터 소스

+

NIST 문서를 프로그래밍 방식으로 조회하거나, AI 에이전트와 연동하여 활용할 수 있는 도구들을 정리합니다.

+
+

1. NIST 공식 데이터 소스

+

API

+ + + + + + + + + + + + + + + + + + + + + + + +
도구설명인증URL
NVD API 2.0CVE 취약점, CPE 제품 정보를 REST API로 조회API Key 권장 (무료). 미사용 시 5req/30초, Key 사용 시 대폭 상향https://nvd.nist.gov/developers
CPRT컨트롤 간 관계(CSF↔SP 800-53↔PF) 데이터를 JSON/XLSX로 제공없음https://csrc.nist.gov/projects/cprt
+

다운로드

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
도구설명형식URL
OSCALSP 800-53 컨트롤 카탈로그, 기준선 프로파일을 기계 판독 가능 형식으로 제공JSON, XML, YAMLhttps://github.com/usnistgov/oscal-content
Publications XLSX전체 NIST 사이버보안 출판물 메타데이터 (제목, 번호, 상태, 날짜)XLSX다운로드
CSF 2.0 CoreCSF 2.0 전체 구조 (Functions→Categories→Subcategories)XLSX, PDFhttps://www.nist.gov/cyberframework
PF 1.0 CorePrivacy Framework 전체 구조XLSXhttps://www.nist.gov/document/nist-privacy-framework-v10-core
NIST Tech Pubs전체 NIST 기술 출판물 메타데이터 (MODS XML)XMLhttps://github.com/usnistgov/NIST-Tech-Pubs
+

피드

+ + + + + + + + + + + + + + + + + + + + + + + +
도구설명형식URL
Draft Publications Feed공개 의견 수렴 중인 초안 문서 알림JSONhttps://csrc.nist.gov/CSRC/media/feeds/pubs/drafts-open-for-comment.json
Draft Publications Feed동일 (RSS 형식)XML/RSShttps://csrc.nist.gov/CSRC/media/feeds/pubs/drafts-open-for-comment.xml
+

CLI 도구

+ + + + + + + + + + + + + + + +
도구설명URL
OSCAL CLIOSCAL 문서의 변환(XML↔JSON↔YAML), 검증, 비교를 수행하는 Java 기반 CLIhttps://github.com/usnistgov/oscal-cli
+
+

2. MCP 서버 (AI 에이전트 연동)

+

MCP(Model Context Protocol) 서버를 사용하면 Claude, Cursor 등 AI 도구에서 NIST 데이터를 직접 조회할 수 있습니다.

+

종합 (NIST + OWASP 통합)

+ + + + + + + + + + + + + + + + + +
MCP커버리지특징GitHub
zer0-kr/security-framework-mcpNIST: SP 800-53 (1,196 + 53A 평가 + 53B 기준선), CSF 2.0, PF 1.0, SP 800-37 RMF, 613 출판물, CMVP, NICE, 용어사전 + OWASP: Top 10 4종, ASVS, WSTG, MASVS, Cheat Sheets 등 11개 소스OWASP+NIST 통합 유일. 33개 도구, 3,329 레코드, STRIDE 위협 모델링, 컴플라이언스 매핑(PCI-DSS/ISO27001/800-53), MCP Top 10 보안 평가, 실시간 NVDGitHub
+

SP 800-53 컨트롤 특화

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MCP커버리지특징GitHub
tnicholson/nist-mcp-serverSP 800-53 (1,196), CSF 2.0, CMMC 2.0, FedRAMP, SP 800-171갭 분석, 리스크 평가, SOC2/ISO27001 매핑GitHub
Ansvar-Systems/security-controls-mcp1,451 SCF 컨트롤 × 262 프레임워크양방향 프레임워크 매핑. PyPI 배포GitHub
MarkAC007/mcp-server-scf1,451 SCF + 354 프레임워크 + 증거 추적39 도구. GRC 플랫폼급GitHub
+

CSF 2.0 평가 특화

+ + + + + + + + + + + + + + + + + +
MCP커버리지특징GitHub
rocklambros/nist-csf-2-mcp-serverCSF 2.0 전체 (자체 확장 구조 포함)740개 평가 질문, 40+ 도구, 대시보드. NIST 공식 커뮤니티 리소스 등재GitHub
+

NVD 취약점 특화

+ + + + + + + + + + + + + + + + + + + + + + + +
MCP커버리지특징GitHub
HaroldFinchIFT/vuln-nist-mcp-serverNVD (CVE, CPE, CISA KEV)Docker Hub 등록. 자동 청킹/병렬 처리GitHub
Cyreslab-AI/nist-nvd-mcp-serverNVD (CVE, CVSS v2/v3/v4)JavaScript. 캐싱/레이트리밋 내장GitHub
+

OSCAL / GRC 자동화

+ + + + + + + + + + + + + + + + + +
MCP커버리지특징GitHub
awslabs/mcp-server-for-oscalNIST OSCAL (SP 800-53, SP 800-171, FedRAMP)AWS 공식. SSP/SAR/POA&M 자동화GitHub
+

기타 보안 프레임워크

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MCP커버리지특징GitHub
Ansvar-Systems/ot-security-mcpIEC 62443, NIST 800-82, NIST 800-53, MITRE ATT&CK ICSOT/산업제어 보안 전문GitHub
Ansvar-Systems/US_Compliance_MCPHIPAA, CCPA, SOX, GLBA + NIST 800-53/CSF 매핑미국 규제법 + NIST 교차 참조GitHub
ethanolivertroy/fedramp-docs-mcpFedRAMP 20x KSI + NIST SP 800-53 매핑20 도구. FRMR JSON 파싱GitHub
+
+

3. 용도별 추천

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
나는 이런 게 필요하다추천 도구
NIST + OWASP를 통합해서 AI로 검색하고 싶다zer0-kr/security-framework-mcp
STRIDE 위협 모델링을 자동화하고 싶다zer0-kr/security-framework-mcp (threat_model)
SP 800-53 컨트롤을 기준선별로 조회하고 싶다zer0-kr/security-framework-mcp (get_nist_control baseline=LOW)
ASVS를 PCI-DSS/ISO 27001/800-53에 매핑하고 싶다zer0-kr/security-framework-mcp (compliance_map)
NIST 문서를 검색하고 내용을 조회하고 싶다zer0-kr/security-framework-mcp (get_nist_publication, search_nist)
SP 800-53 컨트롤을 조회하고 갭 분석하고 싶다tnicholson/nist-mcp-server
CSF 2.0 기반으로 조직 평가를 수행하고 싶다rocklambros/nist-csf-2-mcp-server
CVE 취약점을 조회하고 싶다zer0-kr/security-framework-mcp (search_cve) 또는 HaroldFinchIFT/vuln-nist-mcp-server
여러 프레임워크 간 매핑이 필요하다 (ISO 27001, SOC 2 등)Ansvar-Systems/security-controls-mcp
OSCAL 기반 GRC 자동화를 하고 싶다awslabs/mcp-server-for-oscal
코드 없이 데이터만 다운로드하고 싶다NIST Publications XLSX + OSCAL Content
+
+

4. NIST 공식 GitHub 저장소

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
저장소내용URL
usnistgov/OSCALOSCAL 스키마 및 도구https://github.com/usnistgov/OSCAL
usnistgov/oscal-contentSP 800-53, CSF 2.0, FedRAMP 기준선의 OSCAL 데이터https://github.com/usnistgov/oscal-content
usnistgov/NIST-Tech-Pubs전체 NIST 기술 출판물 메타데이터https://github.com/usnistgov/NIST-Tech-Pubs
usnistgov/SCAP보안 콘텐츠 자동화 프로토콜 사양https://github.com/usnistgov/SCAP
usnistgov/800-63-3디지털 신원 가이드라인 (SP 800-63)https://github.com/usnistgov/800-63-3
usnistgov/macos_securitymacOS 보안 준수 프로젝트 (mSCP)https://github.com/usnistgov/macos_security
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/OWASP/ASVS/README.md b/OWASP/ASVS/README.md deleted file mode 100644 index 344eafb..0000000 --- a/OWASP/ASVS/README.md +++ /dev/null @@ -1,285 +0,0 @@ -# OWASP ASVS v5.0: 애플리케이션 보안 검증 표준 - -## 개요 - -| 항목 | 내용 | -|------|------| -| **정식 명칭** | Application Security Verification Standard v5.0.0 | -| **발행일** | 2025년 5월 30일 (Global AppSec EU Barcelona) | -| **이전 버전** | v4.0.3 (2021) | -| **라이선스** | CC BY-SA 4.0 | -| **GitHub** | https://github.com/OWASP/ASVS | -| **원문** | https://asvs.owasp.org | - -ASVS는 웹 애플리케이션의 보안 요구사항을 정의하는 **검증 표준**입니다. NIST 체계에서 SP 800-53이 "어떤 컨트롤을 적용하는가"를 정의하듯, ASVS는 애플리케이션 수준에서 "어떤 보안 요구사항을 충족해야 하는가"를 정의합니다. - ---- - -## v5.0의 주요 변경점 (vs v4.0) - -| 변경 사항 | 설명 | -|-----------|------| -| **챕터 전면 재구성** | v4.0의 14 챕터 → v5.0의 17 챕터. 5개 신규 챕터 추가 | -| **요구사항 확대** | 286개 → 345개 | -| **보안 목표 중심** | 특정 메커니즘 지정에서 보안 목표 중심으로 전환 | -| **Level 진입장벽 완화** | L1 비율을 46% → 20%로 축소하여 진입장벽 낮춤 | -| **신규 영역** | Web Frontend, OAuth/OIDC, Self-contained Tokens, WebRTC 등 | - ---- - -## 3단계 검증 레벨 - -| Level | 명칭 | 요구사항 | 대상 | -|-------|------|---------|------| -| **L1** | 초기 방어 | ~70개 (20%) | 초기 스타트업, 제한된 민감 데이터 | -| **L2** | 표준 보안 | ~175개 (50%) | 대부분의 상용 웹 애플리케이션 | -| **L3** | 고급 보증 | ~100개 (30%) | 금융, 의료, 정부 — 최고 수준 | - -> **L1 ⊂ L2 ⊂ L3** — 상위 레벨은 하위를 완전히 포함합니다. SP 800-53의 기준선(LOW ⊂ MOD ⊂ HIGH)과 동일한 구조입니다. - ---- - -## 수치 요약 - -| 구분 | 수량 | -|------|------| -| 챕터 | 17개 | -| 총 요구사항 | 345개 | -| 검증 레벨 | 3단계 (L1/L2/L3) | - ---- - -## 17개 챕터 전체 구조 - -### 한눈에 보기 - -| 챕터 | 명칭 | 한국어 | 요구사항 | -|------|------|--------|---------| -| V1 | Encoding and Sanitization | 인코딩 및 새니타이제이션 | 30개 | -| V2 | Validation and Business Logic | 검증 및 비즈니스 로직 | 13개 | -| V3 | Web Frontend Security | 웹 프론트엔드 보안 | 31개 | -| V4 | API and Web Service | API 및 웹 서비스 | 16개 | -| V5 | File Handling | 파일 처리 | 13개 | -| V6 | Authentication | 인증 | 47개 | -| V7 | Session Management | 세션 관리 | 19개 | -| V8 | Authorization | 인가 | 13개 | -| V9 | Self-contained Tokens | 자체 포함 토큰 | 7개 | -| V10 | OAuth and OIDC | OAuth 및 OIDC | 36개 | -| V11 | Cryptography | 암호화 | 24개 | -| V12 | Secure Communication | 안전한 통신 | 12개 | -| V13 | Configuration | 설정 | 21개 | -| V14 | Data Protection | 데이터 보호 | 13개 | -| V15 | Secure Coding and Architecture | 안전한 코딩 및 아키텍처 | 21개 | -| V16 | Security Logging and Error Handling | 보안 로깅 및 오류 처리 | 17개 | -| V17 | WebRTC | WebRTC | 12개 | -| | | **합계** | **345개** | - -> 아래 각 챕터를 클릭하면 섹션 구조를 확인할 수 있습니다. - ---- - -
-V1 — Encoding and Sanitization (30개) - -- V1.1 Encoding and Sanitization Architecture -- V1.2 Injection Prevention -- V1.3 Sanitization -- V1.4 Memory, String, and Unmanaged Code -- V1.5 Safe Deserialization - -
- -
-V2 — Validation and Business Logic (13개) - -- V2.1 Validation and Business Logic Documentation -- V2.2 Input Validation -- V2.3 Business Logic Security -- V2.4 Anti-automation - -
- -
-V3 — Web Frontend Security (31개) - -- V3.1 Web Frontend Security Documentation -- V3.2 Unintended Content Interpretation -- V3.3 Cookie Setup -- V3.4 Browser Security Mechanism Headers -- V3.5 Browser Origin Separation -- V3.6 External Resource Integrity -- V3.7 Other Browser Security Considerations - -
- -
-V4 — API and Web Service (16개) - -- V4.1 Generic Web Service Security -- V4.2 HTTP Message Structure Validation -- V4.3 GraphQL -- V4.4 WebSocket - -
- -
-V5 — File Handling (13개) - -- V5.1 File Handling Documentation -- V5.2 File Upload and Content -- V5.3 File Storage -- V5.4 File Download - -
- -
-V6 — Authentication (47개) — 가장 큰 챕터 - -- V6.1 Authentication Documentation -- V6.2 Password Security -- V6.3 General Authentication Security -- V6.4 Authentication Factor Lifecycle and Recovery -- V6.5 General Multi-factor Authentication Requirements -- V6.6 Out-of-Band Authentication Mechanisms -- V6.7 Cryptographic Authentication Mechanism -- V6.8 Authentication with an Identity Provider - -
- -
-V7 — Session Management (19개) - -- V7.1 Session Management Documentation -- V7.2 Fundamental Session Management Security -- V7.3 Session Timeout -- V7.4 Session Termination -- V7.5 Defenses Against Session Abuse -- V7.6 Federated Re-authentication - -
- -
-V8 — Authorization (13개) - -- V8.1 Authorization Documentation -- V8.2 General Authorization Design -- V8.3 Operation Level Authorization -- V8.4 Other Authorization Considerations - -
- -
-V9 — Self-contained Tokens (7개) - -- V9.1 Token Source and Integrity -- V9.2 Token Content - -
- -
-V10 — OAuth and OIDC (36개) - -- V10.1 Generic OAuth and OIDC Security -- V10.2 OAuth Client -- V10.3 OAuth Resource Server -- V10.4 OAuth Authorization Server -- V10.5 OIDC Client -- V10.6 OpenID Provider -- V10.7 Consent Management - -
- -
-V11 — Cryptography (24개) - -- V11.1 Cryptographic Inventory and Documentation -- V11.2 Secure Cryptography Implementation -- V11.3 Encryption Algorithms -- V11.4 Hashing and Hash-based Functions -- V11.5 Random Values -- V11.6 Public Key Cryptography -- V11.7 In-Use Data Cryptography - -
- -
-V12 — Secure Communication (12개) - -- V12.1 General TLS Security Guidance -- V12.2 HTTPS Communication with External Facing Services -- V12.3 General Service to Service Communication Security - -
- -
-V13 — Configuration (21개) - -- V13.1 Configuration Documentation -- V13.2 Backend Communication Configuration -- V13.3 Secret Management -- V13.4 Unintended Information Leakage - -
- -
-V14 — Data Protection (13개) - -- V14.1 Data Protection Documentation -- V14.2 General Data Protection -- V14.3 Client-side Data Protection - -
- -
-V15 — Secure Coding and Architecture (21개) - -- V15.1 Secure Coding and Architecture Documentation -- V15.2 Security Architecture and Dependencies -- V15.3 Defensive Coding -- V15.4 Safe Concurrency - -
- -
-V16 — Security Logging and Error Handling (17개) - -- V16.1 Security Logging Documentation -- V16.2 General Logging -- V16.3 Security Events -- V16.4 Log Protection -- V16.5 Error Handling - -
- -
-V17 — WebRTC (12개) - -- V17.1 TURN Server -- V17.2 Media -- V17.3 Signaling - -
- ---- - -## 요구사항 ID 형식 - -``` -<챕터>.<섹션>.<요구사항> -``` - -예시: `1.2.4` = V1(Encoding) → V1.2(Injection Prevention) → 4번째 요구사항 - -버전 포함 형식: `v5.0.0-1.2.4` - ---- - -## 참고 자료 - -| 리소스 | URL | -|--------|-----| -| ASVS v5.0 원문 | https://asvs.owasp.org | -| GitHub | https://github.com/OWASP/ASVS | -| OWASP Top 10 | [Top 10 2025 상세](../Top10-2025/README.md) | -| OWASP WSTG | [WSTG v4.2 상세](../WSTG/README.md) | -| v4.0→v5.0 매핑 | https://github.com/OWASP/ASVS/tree/master/5.0/mappings | diff --git a/OWASP/ASVS/index.html b/OWASP/ASVS/index.html new file mode 100644 index 0000000..8a10b7f --- /dev/null +++ b/OWASP/ASVS/index.html @@ -0,0 +1,2467 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ASVS v5.0 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

OWASP ASVS v5.0: 애플리케이션 보안 검증 표준

+

개요

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
정식 명칭Application Security Verification Standard v5.0.0
발행일2025년 5월 30일 (Global AppSec EU Barcelona)
이전 버전v4.0.3 (2021)
라이선스CC BY-SA 4.0
GitHubhttps://github.com/OWASP/ASVS
원문https://asvs.owasp.org
+

ASVS는 웹 애플리케이션의 보안 요구사항을 정의하는 검증 표준입니다. NIST 체계에서 SP 800-53이 "어떤 컨트롤을 적용하는가"를 정의하듯, ASVS는 애플리케이션 수준에서 "어떤 보안 요구사항을 충족해야 하는가"를 정의합니다.

+
+

v5.0의 주요 변경점 (vs v4.0)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
변경 사항설명
챕터 전면 재구성v4.0의 14 챕터 → v5.0의 17 챕터. 5개 신규 챕터 추가
요구사항 확대286개 → 345개
보안 목표 중심특정 메커니즘 지정에서 보안 목표 중심으로 전환
Level 진입장벽 완화L1 비율을 46% → 20%로 축소하여 진입장벽 낮춤
신규 영역Web Frontend, OAuth/OIDC, Self-contained Tokens, WebRTC 등
+
+

3단계 검증 레벨

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Level명칭요구사항대상
L1초기 방어~70개 (20%)초기 스타트업, 제한된 민감 데이터
L2표준 보안~175개 (50%)대부분의 상용 웹 애플리케이션
L3고급 보증~100개 (30%)금융, 의료, 정부 — 최고 수준
+
+

L1 ⊂ L2 ⊂ L3 — 상위 레벨은 하위를 완전히 포함합니다. SP 800-53의 기준선(LOW ⊂ MOD ⊂ HIGH)과 동일한 구조입니다.

+
+
+

수치 요약

+ + + + + + + + + + + + + + + + + + + + + +
구분수량
챕터17개
총 요구사항345개
검증 레벨3단계 (L1/L2/L3)
+
+

17개 챕터 전체 구조

+

한눈에 보기

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
챕터명칭한국어요구사항
V1Encoding and Sanitization인코딩 및 새니타이제이션30개
V2Validation and Business Logic검증 및 비즈니스 로직13개
V3Web Frontend Security웹 프론트엔드 보안31개
V4API and Web ServiceAPI 및 웹 서비스16개
V5File Handling파일 처리13개
V6Authentication인증47개
V7Session Management세션 관리19개
V8Authorization인가13개
V9Self-contained Tokens자체 포함 토큰7개
V10OAuth and OIDCOAuth 및 OIDC36개
V11Cryptography암호화24개
V12Secure Communication안전한 통신12개
V13Configuration설정21개
V14Data Protection데이터 보호13개
V15Secure Coding and Architecture안전한 코딩 및 아키텍처21개
V16Security Logging and Error Handling보안 로깅 및 오류 처리17개
V17WebRTCWebRTC12개
합계345개
+
+

아래 각 챕터를 클릭하면 섹션 구조를 확인할 수 있습니다.

+
+
+
+V1 — Encoding and Sanitization (30개) +
    +
  • V1.1 Encoding and Sanitization Architecture
  • +
  • V1.2 Injection Prevention
  • +
  • V1.3 Sanitization
  • +
  • V1.4 Memory, String, and Unmanaged Code
  • +
  • V1.5 Safe Deserialization
  • +
+
+
+V2 — Validation and Business Logic (13개) +
    +
  • V2.1 Validation and Business Logic Documentation
  • +
  • V2.2 Input Validation
  • +
  • V2.3 Business Logic Security
  • +
  • V2.4 Anti-automation
  • +
+
+
+V3 — Web Frontend Security (31개) +
    +
  • V3.1 Web Frontend Security Documentation
  • +
  • V3.2 Unintended Content Interpretation
  • +
  • V3.3 Cookie Setup
  • +
  • V3.4 Browser Security Mechanism Headers
  • +
  • V3.5 Browser Origin Separation
  • +
  • V3.6 External Resource Integrity
  • +
  • V3.7 Other Browser Security Considerations
  • +
+
+
+V4 — API and Web Service (16개) +
    +
  • V4.1 Generic Web Service Security
  • +
  • V4.2 HTTP Message Structure Validation
  • +
  • V4.3 GraphQL
  • +
  • V4.4 WebSocket
  • +
+
+
+V5 — File Handling (13개) +
    +
  • V5.1 File Handling Documentation
  • +
  • V5.2 File Upload and Content
  • +
  • V5.3 File Storage
  • +
  • V5.4 File Download
  • +
+
+
+V6 — Authentication (47개) — 가장 큰 챕터 +
    +
  • V6.1 Authentication Documentation
  • +
  • V6.2 Password Security
  • +
  • V6.3 General Authentication Security
  • +
  • V6.4 Authentication Factor Lifecycle and Recovery
  • +
  • V6.5 General Multi-factor Authentication Requirements
  • +
  • V6.6 Out-of-Band Authentication Mechanisms
  • +
  • V6.7 Cryptographic Authentication Mechanism
  • +
  • V6.8 Authentication with an Identity Provider
  • +
+
+
+V7 — Session Management (19개) +
    +
  • V7.1 Session Management Documentation
  • +
  • V7.2 Fundamental Session Management Security
  • +
  • V7.3 Session Timeout
  • +
  • V7.4 Session Termination
  • +
  • V7.5 Defenses Against Session Abuse
  • +
  • V7.6 Federated Re-authentication
  • +
+
+
+V8 — Authorization (13개) +
    +
  • V8.1 Authorization Documentation
  • +
  • V8.2 General Authorization Design
  • +
  • V8.3 Operation Level Authorization
  • +
  • V8.4 Other Authorization Considerations
  • +
+
+
+V9 — Self-contained Tokens (7개) +
    +
  • V9.1 Token Source and Integrity
  • +
  • V9.2 Token Content
  • +
+
+
+V10 — OAuth and OIDC (36개) +
    +
  • V10.1 Generic OAuth and OIDC Security
  • +
  • V10.2 OAuth Client
  • +
  • V10.3 OAuth Resource Server
  • +
  • V10.4 OAuth Authorization Server
  • +
  • V10.5 OIDC Client
  • +
  • V10.6 OpenID Provider
  • +
  • V10.7 Consent Management
  • +
+
+
+V11 — Cryptography (24개) +
    +
  • V11.1 Cryptographic Inventory and Documentation
  • +
  • V11.2 Secure Cryptography Implementation
  • +
  • V11.3 Encryption Algorithms
  • +
  • V11.4 Hashing and Hash-based Functions
  • +
  • V11.5 Random Values
  • +
  • V11.6 Public Key Cryptography
  • +
  • V11.7 In-Use Data Cryptography
  • +
+
+
+V12 — Secure Communication (12개) +
    +
  • V12.1 General TLS Security Guidance
  • +
  • V12.2 HTTPS Communication with External Facing Services
  • +
  • V12.3 General Service to Service Communication Security
  • +
+
+
+V13 — Configuration (21개) +
    +
  • V13.1 Configuration Documentation
  • +
  • V13.2 Backend Communication Configuration
  • +
  • V13.3 Secret Management
  • +
  • V13.4 Unintended Information Leakage
  • +
+
+
+V14 — Data Protection (13개) +
    +
  • V14.1 Data Protection Documentation
  • +
  • V14.2 General Data Protection
  • +
  • V14.3 Client-side Data Protection
  • +
+
+
+V15 — Secure Coding and Architecture (21개) +
    +
  • V15.1 Secure Coding and Architecture Documentation
  • +
  • V15.2 Security Architecture and Dependencies
  • +
  • V15.3 Defensive Coding
  • +
  • V15.4 Safe Concurrency
  • +
+
+
+V16 — Security Logging and Error Handling (17개) +
    +
  • V16.1 Security Logging Documentation
  • +
  • V16.2 General Logging
  • +
  • V16.3 Security Events
  • +
  • V16.4 Log Protection
  • +
  • V16.5 Error Handling
  • +
+
+
+V17 — WebRTC (12개) +
    +
  • V17.1 TURN Server
  • +
  • V17.2 Media
  • +
  • V17.3 Signaling
  • +
+
+
+

요구사항 ID 형식

+
<챕터>.<섹션>.<요구사항>
+
+

예시: 1.2.4 = V1(Encoding) → V1.2(Injection Prevention) → 4번째 요구사항

+

버전 포함 형식: v5.0.0-1.2.4

+
+

참고 자료

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
리소스URL
ASVS v5.0 원문https://asvs.owasp.org
GitHubhttps://github.com/OWASP/ASVS
OWASP Top 10Top 10 2025 상세
OWASP WSTGWSTG v4.2 상세
v4.0→v5.0 매핑https://github.com/OWASP/ASVS/tree/master/5.0/mappings
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/OWASP/README.md b/OWASP/README.md deleted file mode 100644 index b315a0f..0000000 --- a/OWASP/README.md +++ /dev/null @@ -1,194 +0,0 @@ -# OWASP 보안 프로젝트 체계 - -## 개요 - -OWASP(Open Worldwide Application Security Project)는 소프트웨어 보안 향상을 목표로 하는 비영리 재단입니다. 보안 위험 목록, 검증 표준, 테스트 가이드, 오픈소스 도구 등을 커뮤니티 기반으로 개발·공개합니다. - -| 항목 | 내용 | -|------|------| -| **설립** | 2001년 | -| **성격** | 비영리 재단 (501(c)(3)) | -| **라이선스** | CC BY-SA 4.0 (모든 문서 프로젝트) | -| **프로젝트 수** | 418개+ | -| **GitHub** | https://github.com/OWASP | -| **공식 사이트** | https://owasp.org | -| **한국 챕터** | [OWASP Seoul Chapter](https://owasp.org/www-chapter-seoul/) (5기 운영 중, 월간 세미나 활동) | - -> OWASP의 모든 문서 프로젝트는 **CC BY-SA 4.0** 라이선스로 자유롭게 활용할 수 있습니다. - ---- - -## 학습 경로 - -OWASP를 처음 접한다면 아래 순서로 읽는 것을 권장합니다. - -
- -- :material-numeric-1-circle:{ .lg .middle } **위험 식별** - - --- - - [Top 10 2025](./Top10-2025/README.md) — 웹 10대 보안 위험 - -- :material-numeric-2-circle:{ .lg .middle } **검증 표준** - - --- - - [ASVS v5.0](./ASVS/README.md) — 보안 검증 요구사항, 3 Level - -- :material-numeric-3-circle:{ .lg .middle } **테스트 방법** - - --- - - [WSTG v4.2](./WSTG/README.md) — 카테고리별 테스트 기법 - -- :material-numeric-4-circle:{ .lg .middle } **구현 가이드** - - --- - - [Cheat Sheet Series](https://cheatsheetseries.owasp.org) — 91개 구현 가이드 - -
- -!!! tip "핵심 경로" - **Step 1→2까지 읽으면** OWASP 체계의 핵심을 이해한 것입니다. Step 3→4는 실무 적용 시 참고하세요. - -추가로: -- [OWASP 주요 프로젝트 목록](./projects.md) — Flagship/Production/Lab/Incubator 프로젝트 -- [Top 10 프로젝트 전체 목록](./top10-catalog.md) — 26개 도메인별 Top 10 모음 - ---- - -## 프로젝트 분류 체계 - -OWASP 프로젝트는 **성숙도**에 따라 분류됩니다: - -| 분류 | 설명 | 프로젝트 수 | -|------|------|-----------| -| **Flagship** | OWASP의 전략적 가치를 입증한 핵심 프로젝트. 글로벌 보드 승인 필요 | 15개 | -| **Production** | 프로덕션 준비 완료. 정기적 릴리스와 활발한 유지보수 | 11개 | -| **Lab** | OWASP 검토 완료. 가치 입증 단계 | 33개 | -| **Incubator** | 실험/개발 단계의 신규 프로젝트 | 200개+ | - ---- - -## 핵심 프로젝트 간 관계 - -```mermaid -%%{init: {'securityLevel': 'loose', 'theme': 'base'}}%% -flowchart TB - subgraph L1["위험 식별 — 무엇이 위험한가"] - TOP10["Top 10 2025
웹 10대 보안 위험
"] - API10["API Security Top 10
API 10대 보안 위험
"] - LLM10["LLM Top 10
LLM/AI 10대 보안 위험
"] - end - - subgraph L2["방어 전략 — 어떻게 방어할 것인가"] - PC["Proactive Controls
개발자 10대 보안 통제
"] - end - - subgraph L3["검증 표준 — 무엇을 검증할 것인가"] - ASVS["ASVS v5.0
웹 앱 보안 검증 표준
3 Level
"] - MASVS["MASVS
모바일 앱 보안 검증 표준
"] - end - - subgraph L4["테스트 및 구현 — 어떻게 검증하고 구현하는가"] - WSTG["WSTG
웹 보안 테스트 가이드
"] - MASTG["MASTG
모바일 보안 테스트 가이드
"] - CS["Cheat Sheets
91개 구현 가이드
"] - end - - subgraph L5["성숙도 — 조직 보안 수준 평가"] - SAMM["SAMM
소프트웨어 보증 성숙도 모델
"] - end - - TOP10 -- "위험 → 방어" --> PC - API10 -- "위험 → 방어" --> PC - PC -- "방어 → 검증 기준" --> ASVS - ASVS -- "검증 → 테스트" --> WSTG - ASVS -- "검증 → 구현" --> CS - MASVS -- "검증 → 테스트" --> MASTG - SAMM -. "조직 수준 평가" .-> ASVS - - style L1 fill:none,stroke:#d32f2f,stroke-width:2px - style L2 fill:none,stroke:#e65100,stroke-width:2px - style L3 fill:none,stroke:#1a73e8,stroke-width:2px - style L4 fill:none,stroke:#2e7d32,stroke-width:2px - style L5 fill:none,stroke:#7b1fa2,stroke-width:2px - style TOP10 fill:#d32f2f,stroke:#b71c1c - style API10 fill:#d32f2f,stroke:#b71c1c - style LLM10 fill:#d32f2f,stroke:#b71c1c - style PC fill:#e65100,stroke:#bf360c - style ASVS fill:#1a73e8,stroke:#1558b0 - style MASVS fill:#1a73e8,stroke:#1558b0 - style WSTG fill:#2e7d32,stroke:#1b5e20 - style MASTG fill:#2e7d32,stroke:#1b5e20 - style CS fill:#c8e6c9,stroke:#2e7d32 - style SAMM fill:#7b1fa2,stroke:#6a1b9a -``` - ---- - -## NIST와의 비교 - -| 구분 | NIST | OWASP | -|------|------|-------| -| **성격** | 미국 연방기관 (정부 표준) | 비영리 커뮤니티 (자발적 가이드) | -| **대상** | 조직의 정보시스템 전반 | 애플리케이션 보안 (웹/모바일/API) | -| **강제성** | 연방기관은 의무 준수 | 자발적 채택 (업계 사실상 표준) | -| **구조** | 위계적 (CSF → RMF → 800-53) | 독립적 프로젝트 모음 | -| **대응 관계** | CSF = 목표, 800-53 = 컨트롤, 800-53A = 평가 | Top 10 = 위험, ASVS = 검증, WSTG = 테스트 | -| **라이선스** | 퍼블릭 도메인 | CC BY-SA 4.0 | - ---- - -## Flagship 프로젝트 한눈에 보기 - -### 문서/표준 (7개) - -| 프로젝트 | 설명 | 최신 버전 | -|---------|------|----------| -| **Top 10** | 웹 애플리케이션 10대 보안 위험 | 2025 | -| **ASVS** | 애플리케이션 보안 검증 표준 | v5.0.0 (2025.5) | -| **WSTG** | 웹 보안 테스트 가이드 | v4.2 | -| **MAS** (MASVS/MASTG) | 모바일 앱 보안 표준 및 테스트 가이드 | 지속 업데이트 | -| **SAMM** | 소프트웨어 보증 성숙도 모델 | 지속 업데이트 | -| **Cheat Sheet Series** | 91개 보안 구현 가이드 | 지속 업데이트 | -| **CycloneDX** | BOM(Bill of Materials) 표준 (ECMA-424) | ECMA 표준 인증 | - -### 도구/코드 (8개) - -| 프로젝트 | 설명 | -|---------|------| -| **Juice Shop** | 의도적으로 취약한 웹 앱 (학습용) | -| **Dependency-Check** | SCA(소프트웨어 구성 분석) 도구 | -| **Dependency-Track** | 컴포넌트 분석 및 공급망 위험 관리 | -| **DefectDojo** | 애플리케이션 취약점 관리 플랫폼 | -| **ModSecurity CRS** | WAF(웹 방화벽) Core Rule Set | -| **Amass** | 네트워크 매핑 및 외부 자산 발견 | -| **OWTF** | 공격적 웹 테스트 프레임워크 | -| **Security Shepherd** | 웹/모바일 보안 교육 플랫폼 | - ---- - -## 자동화 도구 - -OWASP 데이터를 프로그래밍 방식으로 조회하거나 AI 에이전트와 연동할 수 있는 도구들은 [자동화 도구](./tools.md) 페이지를 참고하세요. - -| 도구 | 설명 | -|------|------| -| **[owasp-mcp](https://github.com/zer0-kr/security-framework-mcp)** | OWASP 전체 통합 MCP 서버 — 24개 도구, 1099+ 데이터, NVD 실시간 연동, STRIDE 위협 모델링, 컴플라이언스 매핑 | - ---- - -## 참고 링크 - -| 리소스 | URL | -|--------|-----| -| OWASP 공식 사이트 | https://owasp.org | -| 프로젝트 목록 | https://owasp.org/projects/ | -| GitHub | https://github.com/OWASP | -| Cheat Sheet Series | https://cheatsheetseries.owasp.org | -| OWASP MCP 서버 | https://github.com/zer0-kr/security-framework-mcp | -| OWASP Seoul Chapter | https://owasp.org/www-chapter-seoul/ | -| OWASP Slack | https://owasp.org/slack/invite | diff --git a/OWASP/Top10-2025/README.md b/OWASP/Top10-2025/README.md deleted file mode 100644 index 9035185..0000000 --- a/OWASP/Top10-2025/README.md +++ /dev/null @@ -1,90 +0,0 @@ -# OWASP Top 10: 2025 - -## 개요 - -| 항목 | 내용 | -|------|------| -| **정식 명칭** | OWASP Top 10 Web Application Security Risks — 2025 | -| **발행** | 2025년 | -| **이전 버전** | 2021, 2017 | -| **데이터 기반** | 13개 조직, 280만+ 애플리케이션 테스트 데이터 | -| **CWE 매핑** | 248개 CWE (평균 25개/카테고리) | -| **라이선스** | CC BY-SA 4.0 | -| **원문** | https://owasp.org/Top10/2025/ | - -OWASP Top 10은 웹 애플리케이션에서 가장 심각한 **10대 보안 위험**을 식별한 목록입니다. 실제 취약점 데이터와 커뮤니티 설문을 기반으로 약 3~4년 주기로 갱신됩니다. - ---- - -## 2025 Top 10 전체 항목 - -| 순위 | 코드 | 위험 | 설명 | -|------|------|------|------| -| 1 | A01:2025 | **Broken Access Control** | 사용자가 의도된 권한을 벗어나 행동할 수 있는 취약점. URL/상태 변조, IDOR, CORS 오설정, JWT 조작 등 | -| 2 | A02:2025 | **Security Misconfiguration** | 애플리케이션 스택 전반의 보안 설정 미흡. 기본 계정, 불필요 기능, 에러 메시지 노출 등 | -| 3 | A03:2025 | **Software Supply Chain Failures** | 소프트웨어 공급망의 취약점이나 악의적 변경. 취약한 컴포넌트, 미검증 소스, 무결성 미확인 **(신규)** | -| 4 | A04:2025 | **Cryptographic Failures** | 암호화 관련 실패. 평문 전송, 약한 알고리즘(MD5/SHA1), 키 관리 부실, 초기화 벡터 재사용 등 | -| 5 | A05:2025 | **Injection** | 신뢰할 수 없는 입력이 인터프리터에 전달되어 명령으로 실행. SQL, NoSQL, OS 명령, LDAP, ORM 인젝션 | -| 6 | A06:2025 | **Insecure Design** | 설계 단계에서의 보안 통제 부재. 위협 모델링 미수행, 보안 설계 패턴 미적용, 비즈니스 리스크 프로파일링 부재 | -| 7 | A07:2025 | **Authentication Failures** | 인증 메커니즘의 약점. 크리덴셜 스터핑, 약한 비밀번호 허용, MFA 미적용, 세션 ID 노출 | -| 8 | A08:2025 | **Software or Data Integrity Failures** | 코드/인프라의 무결성 미보호. 비신뢰 소스의 플러그인, 안전하지 않은 CI/CD, 자동 업데이트 무결성 미검증 | -| 9 | A09:2025 | **Security Logging and Alerting Failures** | 로깅·모니터링·알림 부족. 감사 이벤트 미기록, 로그 무결성 미보호, 실시간 탐지/알림 부재 **(명칭 변경)** | -| 10 | A10:2025 | **Mishandling of Exceptional Conditions** | 예외 상황의 부적절한 처리. 입력 검증 미비, 메모리/권한/네트워크 이상 상태 대응 실패, 예외 미처리 **(신규)** | - ---- - -## 2021 대비 변경 사항 - -### 신규 항목 (2개) - -| 항목 | 설명 | -|------|------| -| **A03:2025 Software Supply Chain Failures** | 2021의 A06 "Vulnerable and Outdated Components"를 확장. 전체 소프트웨어 공급망 범위로 확대 | -| **A10:2025 Mishandling of Exceptional Conditions** | 부적절한 오류 처리, 논리적 에러, fail-open, 비정상 조건 처리 포커스. 24개 CWE 포함 | - -### 순위 변동 - -| 위험 | 2021 | 2025 | 변동 | -|------|------|------|------| -| Broken Access Control | #1 | #1 | — | -| Security Misconfiguration | #5 | #2 | ↑3 | -| Cryptographic Failures | #2 | #4 | ↓2 | -| Injection | #3 | #5 | ↓2 | -| Insecure Design | #4 | #6 | ↓2 | -| Authentication Failures | #7 | #7 | — | - -### 명칭 변경 - -| 2021 | 2025 | 변경 이유 | -|------|------|----------| -| Identification and Authentication Failures | **Authentication Failures** | 더 정확한 범위 | -| Security Logging and Monitoring Failures | **Security Logging and Alerting Failures** | 알림(alerting)의 중요성 강조 | - -### 제거된 항목 - -| 항목 | 처리 | -|------|------| -| A10:2021 Server-Side Request Forgery (SSRF) | A01:2025 Broken Access Control에 통합 | - ---- - -## ASVS/WSTG와의 관계 - -Top 10은 **위험 식별** 도구입니다. 이를 기반으로 보안을 구현·검증하려면: - -| 단계 | 문서 | 역할 | -|------|------|------| -| 위험 인식 | **Top 10** (이 문서) | "무엇이 위험한가?" | -| 검증 기준 수립 | [ASVS v5.0](../ASVS/README.md) | "보안 요구사항을 충족하는가?" | -| 테스트 실행 | [WSTG v4.2](../WSTG/README.md) | "어떻게 테스트하는가?" | - ---- - -## 참고 자료 - -| 리소스 | URL | -|--------|-----| -| Top 10 2025 원문 | https://owasp.org/Top10/2025/ | -| GitHub | https://github.com/OWASP/Top10 | -| OWASP ASVS | [ASVS v5.0 상세](../ASVS/README.md) | -| OWASP WSTG | [WSTG v4.2 상세](../WSTG/README.md) | diff --git a/OWASP/Top10-2025/index.html b/OWASP/Top10-2025/index.html new file mode 100644 index 0000000..4675d2c --- /dev/null +++ b/OWASP/Top10-2025/index.html @@ -0,0 +1,2310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Top 10 (2025) - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

OWASP Top 10: 2025

+

개요

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
정식 명칭OWASP Top 10 Web Application Security Risks — 2025
발행2025년
이전 버전2021, 2017
데이터 기반13개 조직, 280만+ 애플리케이션 테스트 데이터
CWE 매핑248개 CWE (평균 25개/카테고리)
라이선스CC BY-SA 4.0
원문https://owasp.org/Top10/2025/
+

OWASP Top 10은 웹 애플리케이션에서 가장 심각한 10대 보안 위험을 식별한 목록입니다. 실제 취약점 데이터와 커뮤니티 설문을 기반으로 약 3~4년 주기로 갱신됩니다.

+
+

2025 Top 10 전체 항목

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
순위코드위험설명
1A01:2025Broken Access Control사용자가 의도된 권한을 벗어나 행동할 수 있는 취약점. URL/상태 변조, IDOR, CORS 오설정, JWT 조작 등
2A02:2025Security Misconfiguration애플리케이션 스택 전반의 보안 설정 미흡. 기본 계정, 불필요 기능, 에러 메시지 노출 등
3A03:2025Software Supply Chain Failures소프트웨어 공급망의 취약점이나 악의적 변경. 취약한 컴포넌트, 미검증 소스, 무결성 미확인 (신규)
4A04:2025Cryptographic Failures암호화 관련 실패. 평문 전송, 약한 알고리즘(MD5/SHA1), 키 관리 부실, 초기화 벡터 재사용 등
5A05:2025Injection신뢰할 수 없는 입력이 인터프리터에 전달되어 명령으로 실행. SQL, NoSQL, OS 명령, LDAP, ORM 인젝션
6A06:2025Insecure Design설계 단계에서의 보안 통제 부재. 위협 모델링 미수행, 보안 설계 패턴 미적용, 비즈니스 리스크 프로파일링 부재
7A07:2025Authentication Failures인증 메커니즘의 약점. 크리덴셜 스터핑, 약한 비밀번호 허용, MFA 미적용, 세션 ID 노출
8A08:2025Software or Data Integrity Failures코드/인프라의 무결성 미보호. 비신뢰 소스의 플러그인, 안전하지 않은 CI/CD, 자동 업데이트 무결성 미검증
9A09:2025Security Logging and Alerting Failures로깅·모니터링·알림 부족. 감사 이벤트 미기록, 로그 무결성 미보호, 실시간 탐지/알림 부재 (명칭 변경)
10A10:2025Mishandling of Exceptional Conditions예외 상황의 부적절한 처리. 입력 검증 미비, 메모리/권한/네트워크 이상 상태 대응 실패, 예외 미처리 (신규)
+
+

2021 대비 변경 사항

+

신규 항목 (2개)

+ + + + + + + + + + + + + + + + + +
항목설명
A03:2025 Software Supply Chain Failures2021의 A06 "Vulnerable and Outdated Components"를 확장. 전체 소프트웨어 공급망 범위로 확대
A10:2025 Mishandling of Exceptional Conditions부적절한 오류 처리, 논리적 에러, fail-open, 비정상 조건 처리 포커스. 24개 CWE 포함
+

순위 변동

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
위험20212025변동
Broken Access Control#1#1
Security Misconfiguration#5#2↑3
Cryptographic Failures#2#4↓2
Injection#3#5↓2
Insecure Design#4#6↓2
Authentication Failures#7#7
+

명칭 변경

+ + + + + + + + + + + + + + + + + + + + +
20212025변경 이유
Identification and Authentication FailuresAuthentication Failures더 정확한 범위
Security Logging and Monitoring FailuresSecurity Logging and Alerting Failures알림(alerting)의 중요성 강조
+

제거된 항목

+ + + + + + + + + + + + + +
항목처리
A10:2021 Server-Side Request Forgery (SSRF)A01:2025 Broken Access Control에 통합
+
+

ASVS/WSTG와의 관계

+

Top 10은 위험 식별 도구입니다. 이를 기반으로 보안을 구현·검증하려면:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
단계문서역할
위험 인식Top 10 (이 문서)"무엇이 위험한가?"
검증 기준 수립ASVS v5.0"보안 요구사항을 충족하는가?"
테스트 실행WSTG v4.2"어떻게 테스트하는가?"
+
+

참고 자료

+ + + + + + + + + + + + + + + + + + + + + + + + + +
리소스URL
Top 10 2025 원문https://owasp.org/Top10/2025/
GitHubhttps://github.com/OWASP/Top10
OWASP ASVSASVS v5.0 상세
OWASP WSTGWSTG v4.2 상세
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/OWASP/WSTG/README.md b/OWASP/WSTG/README.md deleted file mode 100644 index 31b27a6..0000000 --- a/OWASP/WSTG/README.md +++ /dev/null @@ -1,299 +0,0 @@ -# OWASP WSTG v4.2: 웹 보안 테스트 가이드 - -## 개요 - -| 항목 | 내용 | -|------|------| -| **정식 명칭** | Web Security Testing Guide v4.2 | -| **발행일** | 2020년 12월 3일 | -| **개발 버전** | v5.0 (진행 중) | -| **라이선스** | CC BY-SA 4.0 | -| **GitHub** | https://github.com/OWASP/wstg | -| **원문** | https://owasp.org/www-project-web-security-testing-guide/v42/ | - -WSTG는 웹 애플리케이션 보안 테스트를 **어떻게 수행하는지** 구체적 방법론을 제공합니다. ASVS가 "무엇을 검증해야 하는가"를 정의한다면, WSTG는 "어떻게 테스트하는가"를 설명합니다. - -> NIST 체계와 비교하면: ASVS = SP 800-53 (컨트롤), WSTG = SP 800-53A (평가 절차) - ---- - -## 수치 요약 - -| 구분 | 수량 | -|------|------| -| 테스트 카테고리 | 12개 | -| 총 테스트 케이스 | 128개 | - ---- - -## 테스트 ID 형식 - -``` -WSTG-<카테고리>-<번호> -``` - -예시: `WSTG-INPV-05` = Input Validation Testing의 5번째 테스트 (SQL Injection) - -버전 포함: `WSTG-v42-INPV-05` - ---- - -## 12개 테스트 카테고리 전체 구조 - -### 한눈에 보기 - -| 코드 | 카테고리 | 한국어 | 테스트 수 | -|------|---------|--------|----------| -| INFO | Information Gathering | 정보 수집 | 10개 | -| CONF | Configuration and Deployment Management | 설정 및 배포 관리 | 14개 | -| IDNT | Identity Management | 신원 관리 | 5개 | -| ATHN | Authentication | 인증 | 11개 | -| ATHZ | Authorization | 인가 | 7개 | -| SESS | Session Management | 세션 관리 | 11개 | -| INPV | Input Validation | 입력 검증 | 31개 | -| ERRH | Error Handling | 오류 처리 | 2개 | -| CRYP | Weak Cryptography | 암호화 | 4개 | -| BUSL | Business Logic | 비즈니스 로직 | 11개 | -| CLNT | Client-side | 클라이언트 측 | 16개 | -| APIT | API Testing | API 테스트 | 6개 | -| | | **합계** | **128개** | - -> 아래 각 카테고리를 클릭하면 테스트 목록을 확인할 수 있습니다. - ---- - -
-INFO — 정보 수집 (10개) - -| ID | 테스트 | -|----|--------| -| WSTG-INFO-01 | Conduct Search Engine Discovery Reconnaissance for Information Leakage | -| WSTG-INFO-02 | Fingerprint Web Server | -| WSTG-INFO-03 | Review Webserver Metafiles for Information Leakage | -| WSTG-INFO-04 | Enumerate Applications on Webserver | -| WSTG-INFO-05 | Review Webpage Content for Information Leakage | -| WSTG-INFO-06 | Identify Application Entry Points | -| WSTG-INFO-07 | Map Execution Paths Through Application | -| WSTG-INFO-08 | Fingerprint Web Application Framework | -| WSTG-INFO-09 | Fingerprint Web Application | -| WSTG-INFO-10 | Map Application Architecture | - -
- -
-CONF — 설정 및 배포 관리 (14개) - -| ID | 테스트 | -|----|--------| -| WSTG-CONF-01 | Test Network Infrastructure Configuration | -| WSTG-CONF-02 | Test Application Platform Configuration | -| WSTG-CONF-03 | Test File Extensions Handling for Sensitive Information | -| WSTG-CONF-04 | Review Old Backup and Unreferenced Files for Sensitive Information | -| WSTG-CONF-05 | Enumerate Infrastructure and Application Admin Interfaces | -| WSTG-CONF-06 | Test HTTP Methods | -| WSTG-CONF-07 | Test HTTP Strict Transport Security | -| WSTG-CONF-08 | Test RIA Cross Domain Policy | -| WSTG-CONF-09 | Test File Permission | -| WSTG-CONF-10 | Test for Subdomain Takeover | -| WSTG-CONF-11 | Test Cloud Storage | -| WSTG-CONF-12 | Test for Content Security Policy | -| WSTG-CONF-13 | Test for Path Confusion | -| WSTG-CONF-14 | Test for Verb Tampering | - -
- -
-IDNT — 신원 관리 (5개) - -| ID | 테스트 | -|----|--------| -| WSTG-IDNT-01 | Test Role Definitions | -| WSTG-IDNT-02 | Test User Registration Process | -| WSTG-IDNT-03 | Test Account Provisioning Process | -| WSTG-IDNT-04 | Testing for Account Enumeration and Guessable User Account | -| WSTG-IDNT-05 | Testing for Weak or Unenforced Username Policy | - -
- -
-ATHN — 인증 (11개) - -| ID | 테스트 | -|----|--------| -| WSTG-ATHN-01 | Testing for Credentials Transported over an Encrypted Channel | -| WSTG-ATHN-02 | Testing for Default Credentials | -| WSTG-ATHN-03 | Testing for Weak Lock Out Mechanism | -| WSTG-ATHN-04 | Testing for Bypassing Authentication Schema | -| WSTG-ATHN-05 | Testing for Vulnerable Remember Password | -| WSTG-ATHN-06 | Testing for Browser Cache Weaknesses | -| WSTG-ATHN-07 | Testing for Weak Password Policy | -| WSTG-ATHN-08 | Testing for Weak Security Question Answer | -| WSTG-ATHN-09 | Testing for Weak Password Change or Reset Functionalities | -| WSTG-ATHN-10 | Testing for Weaker Authentication in Alternative Channel | -| WSTG-ATHN-11 | Testing Multi-Factor Authentication | - -
- -
-ATHZ — 인가 (7개) - -| ID | 테스트 | -|----|--------| -| WSTG-ATHZ-01 | Testing Directory Traversal File Include | -| WSTG-ATHZ-02 | Testing for Bypassing Authorization Schema | -| WSTG-ATHZ-03 | Testing for Privilege Escalation | -| WSTG-ATHZ-04 | Testing for Insecure Direct Object References | -| WSTG-ATHZ-05 | Testing for OAuth Weaknesses | -| WSTG-ATHZ-06 | Testing for Broken Access Control | -| WSTG-ATHZ-07 | Testing for Missing Function Level Access Control | - -
- -
-SESS — 세션 관리 (11개) - -| ID | 테스트 | -|----|--------| -| WSTG-SESS-01 | Testing for Session Management Schema | -| WSTG-SESS-02 | Testing for Cookies Attributes | -| WSTG-SESS-03 | Testing for Session Fixation | -| WSTG-SESS-04 | Testing for Exposed Session Variables | -| WSTG-SESS-05 | Testing for Cross Site Request Forgery | -| WSTG-SESS-06 | Testing for Logout Functionality | -| WSTG-SESS-07 | Testing Session Timeout | -| WSTG-SESS-08 | Testing for Session Puzzling | -| WSTG-SESS-09 | Testing for Session Hijacking | -| WSTG-SESS-10 | Testing JSON Web Tokens | -| WSTG-SESS-11 | Testing for Concurrent Sessions | - -
- -
-INPV — 입력 검증 (31개) - -| ID | 테스트 | -|----|--------| -| WSTG-INPV-01 | Testing for Reflected Cross Site Scripting | -| WSTG-INPV-02 | Testing for Stored Cross Site Scripting | -| WSTG-INPV-03 | Testing for HTTP Verb Tampering | -| WSTG-INPV-04 | Testing for HTTP Parameter Pollution | -| WSTG-INPV-05 | Testing for SQL Injection | -| WSTG-INPV-06 | Testing for LDAP Injection | -| WSTG-INPV-07 | Testing for XML Injection | -| WSTG-INPV-08 | Testing for SSI Injection | -| WSTG-INPV-09 | Testing for XPath Injection | -| WSTG-INPV-10 | Testing for IMAP SMTP Injection | -| WSTG-INPV-11 | Testing for Code Injection | -| WSTG-INPV-12 | Testing for Command Injection | -| WSTG-INPV-13 | Testing for Format String Injection | -| WSTG-INPV-14 | Testing for Incubated Vulnerability | -| WSTG-INPV-15 | Testing for HTTP Splitting Smuggling | -| WSTG-INPV-16 | Testing for HTTP Incoming Requests | -| WSTG-INPV-17 | Testing for Host Header Injection | -| WSTG-INPV-18 | Testing for Server-side Template Injection | -| WSTG-INPV-19 | Testing for Server-Side Request Forgery | -| WSTG-INPV-20 | Testing for Mass Assignment | -| WSTG-INPV-21 | Testing for WebSocket Security | -| WSTG-INPV-22 | Testing for ORM Injection | -| WSTG-INPV-23 | Testing for Client-side | -| WSTG-INPV-24 | Testing for NoSQL Injection | -| WSTG-INPV-25 | Testing for GraphQL | -| WSTG-INPV-26 | Testing for CRLF Injection | -| WSTG-INPV-27 | Testing for Open Redirect | -| WSTG-INPV-28 | Testing for Local File Inclusion | -| WSTG-INPV-29 | Testing for Remote File Inclusion | -| WSTG-INPV-30 | Testing for CSV Injection | -| WSTG-INPV-31 | Testing for DOM-Based Cross Site Scripting | - -
- -
-ERRH — 오류 처리 (2개) - -| ID | 테스트 | -|----|--------| -| WSTG-ERRH-01 | Testing for Improper Error Handling | -| WSTG-ERRH-02 | Testing for Stack Traces | - -
- -
-CRYP — 암호화 (4개) - -| ID | 테스트 | -|----|--------| -| WSTG-CRYP-01 | Testing for Weak Transport Layer Security | -| WSTG-CRYP-02 | Testing for Padding Oracle | -| WSTG-CRYP-03 | Testing for Sensitive Information Sent via Unencrypted Channels | -| WSTG-CRYP-04 | Testing for Weak Encryption | - -
- -
-BUSL — 비즈니스 로직 (11개) - -| ID | 테스트 | -|----|--------| -| WSTG-BUSL-01 | Test Business Logic Data Validation | -| WSTG-BUSL-02 | Test Ability to Forge Requests | -| WSTG-BUSL-03 | Test Integrity Checks | -| WSTG-BUSL-04 | Test for Process Timing | -| WSTG-BUSL-05 | Test Number of Times a Function Can Be Used Limits | -| WSTG-BUSL-06 | Testing for the Circumvention of Work Flows | -| WSTG-BUSL-07 | Test Defenses Against Application Misuse | -| WSTG-BUSL-08 | Test Upload of Unexpected File Types | -| WSTG-BUSL-09 | Test Upload of Malicious Files | -| WSTG-BUSL-10 | Test Payment Functionality | -| WSTG-BUSL-11 | Test for Lack of Non-Repudiation | - -
- -
-CLNT — 클라이언트 측 (16개) - -| ID | 테스트 | -|----|--------| -| WSTG-CLNT-01 | Testing for DOM-Based Cross Site Scripting | -| WSTG-CLNT-02 | Testing for JavaScript Execution | -| WSTG-CLNT-03 | Testing for HTML Injection | -| WSTG-CLNT-04 | Testing for Client-side URL Redirect | -| WSTG-CLNT-05 | Testing for CSS Injection | -| WSTG-CLNT-06 | Testing for Client-side Resource Manipulation | -| WSTG-CLNT-07 | Testing Cross Origin Resource Sharing | -| WSTG-CLNT-08 | Testing for Cross Site Flashing | -| WSTG-CLNT-09 | Testing for Clickjacking | -| WSTG-CLNT-10 | Testing WebSockets | -| WSTG-CLNT-11 | Testing Web Messaging | -| WSTG-CLNT-12 | Testing Browser Storage | -| WSTG-CLNT-13 | Testing for Cross Site Script Inclusion | -| WSTG-CLNT-14 | Testing for Reverse Tabnabbing | -| WSTG-CLNT-15 | Testing for Broken Link Hijacking | -| WSTG-CLNT-16 | Testing for Content Security Policy | - -
- -
-APIT — API 테스트 (6개) - -| ID | 테스트 | -|----|--------| -| WSTG-APIT-01 | Testing GraphQL | -| WSTG-APIT-02 | Testing for Content Type Mishandling | -| WSTG-APIT-03 | Testing for Mass Assignment | -| WSTG-APIT-04 | Testing for API Rate Limiting | -| WSTG-APIT-05 | Testing for Broken Object Level Authorization | -| WSTG-APIT-06 | Testing for Broken Function Level Authorization | - -
- ---- - -## 참고 자료 - -| 리소스 | URL | -|--------|-----| -| WSTG v4.2 원문 | https://owasp.org/www-project-web-security-testing-guide/v42/ | -| WSTG v4.2 PDF | https://github.com/OWASP/wstg/releases/download/v4.2/wstg-v4.2.pdf | -| GitHub | https://github.com/OWASP/wstg | -| OWASP Top 10 | [Top 10 2025 상세](../Top10-2025/README.md) | -| OWASP ASVS | [ASVS v5.0 상세](../ASVS/README.md) | diff --git a/OWASP/WSTG/index.html b/OWASP/WSTG/index.html new file mode 100644 index 0000000..7ca9cbe --- /dev/null +++ b/OWASP/WSTG/index.html @@ -0,0 +1,2828 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WSTG v4.2 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

OWASP WSTG v4.2: 웹 보안 테스트 가이드

+

개요

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
정식 명칭Web Security Testing Guide v4.2
발행일2020년 12월 3일
개발 버전v5.0 (진행 중)
라이선스CC BY-SA 4.0
GitHubhttps://github.com/OWASP/wstg
원문https://owasp.org/www-project-web-security-testing-guide/v42/
+

WSTG는 웹 애플리케이션 보안 테스트를 어떻게 수행하는지 구체적 방법론을 제공합니다. ASVS가 "무엇을 검증해야 하는가"를 정의한다면, WSTG는 "어떻게 테스트하는가"를 설명합니다.

+
+

NIST 체계와 비교하면: ASVS = SP 800-53 (컨트롤), WSTG = SP 800-53A (평가 절차)

+
+
+

수치 요약

+ + + + + + + + + + + + + + + + + +
구분수량
테스트 카테고리12개
총 테스트 케이스128개
+
+

테스트 ID 형식

+
WSTG-<카테고리>-<번호>
+
+

예시: WSTG-INPV-05 = Input Validation Testing의 5번째 테스트 (SQL Injection)

+

버전 포함: WSTG-v42-INPV-05

+
+

12개 테스트 카테고리 전체 구조

+

한눈에 보기

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
코드카테고리한국어테스트 수
INFOInformation Gathering정보 수집10개
CONFConfiguration and Deployment Management설정 및 배포 관리14개
IDNTIdentity Management신원 관리5개
ATHNAuthentication인증11개
ATHZAuthorization인가7개
SESSSession Management세션 관리11개
INPVInput Validation입력 검증31개
ERRHError Handling오류 처리2개
CRYPWeak Cryptography암호화4개
BUSLBusiness Logic비즈니스 로직11개
CLNTClient-side클라이언트 측16개
APITAPI TestingAPI 테스트6개
합계128개
+
+

아래 각 카테고리를 클릭하면 테스트 목록을 확인할 수 있습니다.

+
+
+
+INFO — 정보 수집 (10개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-INFO-01Conduct Search Engine Discovery Reconnaissance for Information Leakage
WSTG-INFO-02Fingerprint Web Server
WSTG-INFO-03Review Webserver Metafiles for Information Leakage
WSTG-INFO-04Enumerate Applications on Webserver
WSTG-INFO-05Review Webpage Content for Information Leakage
WSTG-INFO-06Identify Application Entry Points
WSTG-INFO-07Map Execution Paths Through Application
WSTG-INFO-08Fingerprint Web Application Framework
WSTG-INFO-09Fingerprint Web Application
WSTG-INFO-10Map Application Architecture
+
+
+CONF — 설정 및 배포 관리 (14개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-CONF-01Test Network Infrastructure Configuration
WSTG-CONF-02Test Application Platform Configuration
WSTG-CONF-03Test File Extensions Handling for Sensitive Information
WSTG-CONF-04Review Old Backup and Unreferenced Files for Sensitive Information
WSTG-CONF-05Enumerate Infrastructure and Application Admin Interfaces
WSTG-CONF-06Test HTTP Methods
WSTG-CONF-07Test HTTP Strict Transport Security
WSTG-CONF-08Test RIA Cross Domain Policy
WSTG-CONF-09Test File Permission
WSTG-CONF-10Test for Subdomain Takeover
WSTG-CONF-11Test Cloud Storage
WSTG-CONF-12Test for Content Security Policy
WSTG-CONF-13Test for Path Confusion
WSTG-CONF-14Test for Verb Tampering
+
+
+IDNT — 신원 관리 (5개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-IDNT-01Test Role Definitions
WSTG-IDNT-02Test User Registration Process
WSTG-IDNT-03Test Account Provisioning Process
WSTG-IDNT-04Testing for Account Enumeration and Guessable User Account
WSTG-IDNT-05Testing for Weak or Unenforced Username Policy
+
+
+ATHN — 인증 (11개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-ATHN-01Testing for Credentials Transported over an Encrypted Channel
WSTG-ATHN-02Testing for Default Credentials
WSTG-ATHN-03Testing for Weak Lock Out Mechanism
WSTG-ATHN-04Testing for Bypassing Authentication Schema
WSTG-ATHN-05Testing for Vulnerable Remember Password
WSTG-ATHN-06Testing for Browser Cache Weaknesses
WSTG-ATHN-07Testing for Weak Password Policy
WSTG-ATHN-08Testing for Weak Security Question Answer
WSTG-ATHN-09Testing for Weak Password Change or Reset Functionalities
WSTG-ATHN-10Testing for Weaker Authentication in Alternative Channel
WSTG-ATHN-11Testing Multi-Factor Authentication
+
+
+ATHZ — 인가 (7개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-ATHZ-01Testing Directory Traversal File Include
WSTG-ATHZ-02Testing for Bypassing Authorization Schema
WSTG-ATHZ-03Testing for Privilege Escalation
WSTG-ATHZ-04Testing for Insecure Direct Object References
WSTG-ATHZ-05Testing for OAuth Weaknesses
WSTG-ATHZ-06Testing for Broken Access Control
WSTG-ATHZ-07Testing for Missing Function Level Access Control
+
+
+SESS — 세션 관리 (11개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-SESS-01Testing for Session Management Schema
WSTG-SESS-02Testing for Cookies Attributes
WSTG-SESS-03Testing for Session Fixation
WSTG-SESS-04Testing for Exposed Session Variables
WSTG-SESS-05Testing for Cross Site Request Forgery
WSTG-SESS-06Testing for Logout Functionality
WSTG-SESS-07Testing Session Timeout
WSTG-SESS-08Testing for Session Puzzling
WSTG-SESS-09Testing for Session Hijacking
WSTG-SESS-10Testing JSON Web Tokens
WSTG-SESS-11Testing for Concurrent Sessions
+
+
+INPV — 입력 검증 (31개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-INPV-01Testing for Reflected Cross Site Scripting
WSTG-INPV-02Testing for Stored Cross Site Scripting
WSTG-INPV-03Testing for HTTP Verb Tampering
WSTG-INPV-04Testing for HTTP Parameter Pollution
WSTG-INPV-05Testing for SQL Injection
WSTG-INPV-06Testing for LDAP Injection
WSTG-INPV-07Testing for XML Injection
WSTG-INPV-08Testing for SSI Injection
WSTG-INPV-09Testing for XPath Injection
WSTG-INPV-10Testing for IMAP SMTP Injection
WSTG-INPV-11Testing for Code Injection
WSTG-INPV-12Testing for Command Injection
WSTG-INPV-13Testing for Format String Injection
WSTG-INPV-14Testing for Incubated Vulnerability
WSTG-INPV-15Testing for HTTP Splitting Smuggling
WSTG-INPV-16Testing for HTTP Incoming Requests
WSTG-INPV-17Testing for Host Header Injection
WSTG-INPV-18Testing for Server-side Template Injection
WSTG-INPV-19Testing for Server-Side Request Forgery
WSTG-INPV-20Testing for Mass Assignment
WSTG-INPV-21Testing for WebSocket Security
WSTG-INPV-22Testing for ORM Injection
WSTG-INPV-23Testing for Client-side
WSTG-INPV-24Testing for NoSQL Injection
WSTG-INPV-25Testing for GraphQL
WSTG-INPV-26Testing for CRLF Injection
WSTG-INPV-27Testing for Open Redirect
WSTG-INPV-28Testing for Local File Inclusion
WSTG-INPV-29Testing for Remote File Inclusion
WSTG-INPV-30Testing for CSV Injection
WSTG-INPV-31Testing for DOM-Based Cross Site Scripting
+
+
+ERRH — 오류 처리 (2개) + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-ERRH-01Testing for Improper Error Handling
WSTG-ERRH-02Testing for Stack Traces
+
+
+CRYP — 암호화 (4개) + + + + + + + + + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-CRYP-01Testing for Weak Transport Layer Security
WSTG-CRYP-02Testing for Padding Oracle
WSTG-CRYP-03Testing for Sensitive Information Sent via Unencrypted Channels
WSTG-CRYP-04Testing for Weak Encryption
+
+
+BUSL — 비즈니스 로직 (11개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-BUSL-01Test Business Logic Data Validation
WSTG-BUSL-02Test Ability to Forge Requests
WSTG-BUSL-03Test Integrity Checks
WSTG-BUSL-04Test for Process Timing
WSTG-BUSL-05Test Number of Times a Function Can Be Used Limits
WSTG-BUSL-06Testing for the Circumvention of Work Flows
WSTG-BUSL-07Test Defenses Against Application Misuse
WSTG-BUSL-08Test Upload of Unexpected File Types
WSTG-BUSL-09Test Upload of Malicious Files
WSTG-BUSL-10Test Payment Functionality
WSTG-BUSL-11Test for Lack of Non-Repudiation
+
+
+CLNT — 클라이언트 측 (16개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-CLNT-01Testing for DOM-Based Cross Site Scripting
WSTG-CLNT-02Testing for JavaScript Execution
WSTG-CLNT-03Testing for HTML Injection
WSTG-CLNT-04Testing for Client-side URL Redirect
WSTG-CLNT-05Testing for CSS Injection
WSTG-CLNT-06Testing for Client-side Resource Manipulation
WSTG-CLNT-07Testing Cross Origin Resource Sharing
WSTG-CLNT-08Testing for Cross Site Flashing
WSTG-CLNT-09Testing for Clickjacking
WSTG-CLNT-10Testing WebSockets
WSTG-CLNT-11Testing Web Messaging
WSTG-CLNT-12Testing Browser Storage
WSTG-CLNT-13Testing for Cross Site Script Inclusion
WSTG-CLNT-14Testing for Reverse Tabnabbing
WSTG-CLNT-15Testing for Broken Link Hijacking
WSTG-CLNT-16Testing for Content Security Policy
+
+
+APIT — API 테스트 (6개) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID테스트
WSTG-APIT-01Testing GraphQL
WSTG-APIT-02Testing for Content Type Mishandling
WSTG-APIT-03Testing for Mass Assignment
WSTG-APIT-04Testing for API Rate Limiting
WSTG-APIT-05Testing for Broken Object Level Authorization
WSTG-APIT-06Testing for Broken Function Level Authorization
+
+
+

참고 자료

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
리소스URL
WSTG v4.2 원문https://owasp.org/www-project-web-security-testing-guide/v42/
WSTG v4.2 PDFhttps://github.com/OWASP/wstg/releases/download/v4.2/wstg-v4.2.pdf
GitHubhttps://github.com/OWASP/wstg
OWASP Top 10Top 10 2025 상세
OWASP ASVSASVS v5.0 상세
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/OWASP/index.html b/OWASP/index.html new file mode 100644 index 0000000..227880f --- /dev/null +++ b/OWASP/index.html @@ -0,0 +1,2391 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 개요 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

OWASP 보안 프로젝트 체계

+

개요

+

OWASP(Open Worldwide Application Security Project)는 소프트웨어 보안 향상을 목표로 하는 비영리 재단입니다. 보안 위험 목록, 검증 표준, 테스트 가이드, 오픈소스 도구 등을 커뮤니티 기반으로 개발·공개합니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목내용
설립2001년
성격비영리 재단 (501(c)(3))
라이선스CC BY-SA 4.0 (모든 문서 프로젝트)
프로젝트 수418개+
GitHubhttps://github.com/OWASP
공식 사이트https://owasp.org
한국 챕터OWASP Seoul Chapter (5기 운영 중, 월간 세미나 활동)
+
+

OWASP의 모든 문서 프로젝트는 CC BY-SA 4.0 라이선스로 자유롭게 활용할 수 있습니다.

+
+
+

학습 경로

+

OWASP를 처음 접한다면 아래 순서로 읽는 것을 권장합니다.

+
+
    +
  • +

    위험 식별

    +
    +

    Top 10 2025 — 웹 10대 보안 위험

    +
  • +
  • +

    검증 표준

    +
    +

    ASVS v5.0 — 보안 검증 요구사항, 3 Level

    +
  • +
  • +

    테스트 방법

    +
    +

    WSTG v4.2 — 카테고리별 테스트 기법

    +
  • +
  • +

    구현 가이드

    +
    +

    Cheat Sheet Series — 91개 구현 가이드

    +
  • +
+
+
+

핵심 경로

+

Step 1→2까지 읽으면 OWASP 체계의 핵심을 이해한 것입니다. Step 3→4는 실무 적용 시 참고하세요.

+
+

추가로: +- OWASP 주요 프로젝트 목록 — Flagship/Production/Lab/Incubator 프로젝트 +- Top 10 프로젝트 전체 목록 — 26개 도메인별 Top 10 모음

+
+

프로젝트 분류 체계

+

OWASP 프로젝트는 성숙도에 따라 분류됩니다:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
분류설명프로젝트 수
FlagshipOWASP의 전략적 가치를 입증한 핵심 프로젝트. 글로벌 보드 승인 필요15개
Production프로덕션 준비 완료. 정기적 릴리스와 활발한 유지보수11개
LabOWASP 검토 완료. 가치 입증 단계33개
Incubator실험/개발 단계의 신규 프로젝트200개+
+
+

핵심 프로젝트 간 관계

+
%%{init: {'securityLevel': 'loose', 'theme': 'base'}}%%
+flowchart TB
+    subgraph L1["위험 식별 — 무엇이 위험한가"]
+        TOP10["<span style='color:#fff'><b>Top 10 2025</b><br/>웹 10대 보안 위험</span>"]
+        API10["<span style='color:#fff'><b>API Security Top 10</b><br/>API 10대 보안 위험</span>"]
+        LLM10["<span style='color:#fff'><b>LLM Top 10</b><br/>LLM/AI 10대 보안 위험</span>"]
+    end
+
+    subgraph L2["방어 전략 — 어떻게 방어할 것인가"]
+        PC["<span style='color:#fff'><b>Proactive Controls</b><br/>개발자 10대 보안 통제</span>"]
+    end
+
+    subgraph L3["검증 표준 — 무엇을 검증할 것인가"]
+        ASVS["<span style='color:#fff'><b>ASVS v5.0</b><br/>웹 앱 보안 검증 표준<br/>3 Level</span>"]
+        MASVS["<span style='color:#fff'><b>MASVS</b><br/>모바일 앱 보안 검증 표준</span>"]
+    end
+
+    subgraph L4["테스트 및 구현 — 어떻게 검증하고 구현하는가"]
+        WSTG["<span style='color:#fff'><b>WSTG</b><br/>웹 보안 테스트 가이드</span>"]
+        MASTG["<span style='color:#fff'><b>MASTG</b><br/>모바일 보안 테스트 가이드</span>"]
+        CS["<span style='color:#333'><b>Cheat Sheets</b><br/>91개 구현 가이드</span>"]
+    end
+
+    subgraph L5["성숙도 — 조직 보안 수준 평가"]
+        SAMM["<span style='color:#fff'><b>SAMM</b><br/>소프트웨어 보증 성숙도 모델</span>"]
+    end
+
+    TOP10 -- "위험 → 방어" --> PC
+    API10 -- "위험 → 방어" --> PC
+    PC -- "방어 → 검증 기준" --> ASVS
+    ASVS -- "검증 → 테스트" --> WSTG
+    ASVS -- "검증 → 구현" --> CS
+    MASVS -- "검증 → 테스트" --> MASTG
+    SAMM -. "조직 수준 평가" .-> ASVS
+
+    style L1 fill:none,stroke:#d32f2f,stroke-width:2px
+    style L2 fill:none,stroke:#e65100,stroke-width:2px
+    style L3 fill:none,stroke:#1a73e8,stroke-width:2px
+    style L4 fill:none,stroke:#2e7d32,stroke-width:2px
+    style L5 fill:none,stroke:#7b1fa2,stroke-width:2px
+    style TOP10 fill:#d32f2f,stroke:#b71c1c
+    style API10 fill:#d32f2f,stroke:#b71c1c
+    style LLM10 fill:#d32f2f,stroke:#b71c1c
+    style PC fill:#e65100,stroke:#bf360c
+    style ASVS fill:#1a73e8,stroke:#1558b0
+    style MASVS fill:#1a73e8,stroke:#1558b0
+    style WSTG fill:#2e7d32,stroke:#1b5e20
+    style MASTG fill:#2e7d32,stroke:#1b5e20
+    style CS fill:#c8e6c9,stroke:#2e7d32
+    style SAMM fill:#7b1fa2,stroke:#6a1b9a
+
+

NIST와의 비교

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분NISTOWASP
성격미국 연방기관 (정부 표준)비영리 커뮤니티 (자발적 가이드)
대상조직의 정보시스템 전반애플리케이션 보안 (웹/모바일/API)
강제성연방기관은 의무 준수자발적 채택 (업계 사실상 표준)
구조위계적 (CSF → RMF → 800-53)독립적 프로젝트 모음
대응 관계CSF = 목표, 800-53 = 컨트롤, 800-53A = 평가Top 10 = 위험, ASVS = 검증, WSTG = 테스트
라이선스퍼블릭 도메인CC BY-SA 4.0
+
+

Flagship 프로젝트 한눈에 보기

+

문서/표준 (7개)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트설명최신 버전
Top 10웹 애플리케이션 10대 보안 위험2025
ASVS애플리케이션 보안 검증 표준v5.0.0 (2025.5)
WSTG웹 보안 테스트 가이드v4.2
MAS (MASVS/MASTG)모바일 앱 보안 표준 및 테스트 가이드지속 업데이트
SAMM소프트웨어 보증 성숙도 모델지속 업데이트
Cheat Sheet Series91개 보안 구현 가이드지속 업데이트
CycloneDXBOM(Bill of Materials) 표준 (ECMA-424)ECMA 표준 인증
+

도구/코드 (8개)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트설명
Juice Shop의도적으로 취약한 웹 앱 (학습용)
Dependency-CheckSCA(소프트웨어 구성 분석) 도구
Dependency-Track컴포넌트 분석 및 공급망 위험 관리
DefectDojo애플리케이션 취약점 관리 플랫폼
ModSecurity CRSWAF(웹 방화벽) Core Rule Set
Amass네트워크 매핑 및 외부 자산 발견
OWTF공격적 웹 테스트 프레임워크
Security Shepherd웹/모바일 보안 교육 플랫폼
+
+

자동화 도구

+

OWASP 데이터를 프로그래밍 방식으로 조회하거나 AI 에이전트와 연동할 수 있는 도구들은 자동화 도구 페이지를 참고하세요.

+ + + + + + + + + + + + + +
도구설명
owasp-mcpOWASP 전체 통합 MCP 서버 — 24개 도구, 1099+ 데이터, NVD 실시간 연동, STRIDE 위협 모델링, 컴플라이언스 매핑
+
+

참고 링크

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
리소스URL
OWASP 공식 사이트https://owasp.org
프로젝트 목록https://owasp.org/projects/
GitHubhttps://github.com/OWASP
Cheat Sheet Serieshttps://cheatsheetseries.owasp.org
OWASP MCP 서버https://github.com/zer0-kr/security-framework-mcp
OWASP Seoul Chapterhttps://owasp.org/www-chapter-seoul/
OWASP Slackhttps://owasp.org/slack/invite
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/OWASP/projects.md b/OWASP/projects.md deleted file mode 100644 index 26f5faf..0000000 --- a/OWASP/projects.md +++ /dev/null @@ -1,127 +0,0 @@ -# OWASP 주요 프로젝트 목록 - -## Flagship 프로젝트 (15개) - -OWASP의 전략적 가치를 입증한 핵심 프로젝트입니다. 글로벌 보드 승인이 필요합니다. - -### 문서 및 표준 - -| 프로젝트 | 설명 | 최신 버전 | GitHub | -|---------|------|----------|--------| -| **Top 10** | 웹 애플리케이션 10대 보안 위험 | 2025 | [GitHub](https://github.com/OWASP/Top10) | -| **ASVS** | 애플리케이션 보안 검증 표준 | v5.0.0 | [GitHub](https://github.com/OWASP/ASVS) | -| **WSTG** | 웹 보안 테스트 가이드 | v4.2 | [GitHub](https://github.com/OWASP/wstg) | -| **MAS** (MASVS/MASTG) | 모바일 앱 보안 표준 및 테스트 가이드 | 지속 업데이트 | [GitHub](https://github.com/OWASP/mastg) | -| **SAMM** | 소프트웨어 보증 성숙도 모델 | 지속 업데이트 | [GitHub](https://github.com/OWASP/samm) | -| **Cheat Sheet Series** | 보안 구현 가이드 모음 | 91개+ 체크시트 | [GitHub](https://github.com/OWASP/CheatSheetSeries) | -| **CycloneDX** | BOM(Bill of Materials) 표준 | ECMA-424 | [GitHub](https://github.com/CycloneDX/specification) | - -### 도구 및 코드 - -| 프로젝트 | 설명 | GitHub | -|---------|------|--------| -| **Juice Shop** | 의도적으로 취약한 웹 앱 (보안 교육용) | [GitHub](https://github.com/juice-shop/juice-shop) | -| **Dependency-Check** | SCA(소프트웨어 구성 분석) — 알려진 취약 라이브러리 탐지 | [GitHub](https://github.com/jeremylong/DependencyCheck) | -| **Dependency-Track** | 컴포넌트 분석 및 공급망 위험 관리 플랫폼 | [GitHub](https://github.com/DependencyTrack/dependency-track) | -| **DefectDojo** | 애플리케이션 취약점 관리 플랫폼 | [GitHub](https://github.com/DefectDojo/django-DefectDojo) | -| **ModSecurity CRS** | WAF(웹 방화벽) Core Rule Set | [GitHub](https://github.com/coreruleset/coreruleset) | -| **Amass** | 네트워크 매핑 및 외부 자산 발견 | [GitHub](https://github.com/OWASP/Amass) | -| **OWTF** | 공격적 웹 테스트 프레임워크 | [GitHub](https://github.com/owtf/owtf) | -| **Security Shepherd** | 웹/모바일 보안 교육 플랫폼 | [GitHub](https://github.com/OWASP/SecurityShepherd) | - ---- - -## Production 프로젝트 (11개) - -프로덕션 준비 완료된 프로젝트입니다. - -| 프로젝트 | 설명 | -|---------|------| -| **API Security Project** | API 보안 Top 10 및 전략 | -| **BLT (Bug Logging Tool)** | 버그 리포팅 및 보상 플랫폼 | -| **Coraza WAF** | Go 기반 엔터프라이즈 WAF | -| **Cornucopia** | 위협 모델링 카드 게임 | -| **CSRFGuard** | CSRF 공격 방어 라이브러리 | -| **ModSecurity** | 오픈소스 WAF 엔진 | -| **Nest** | OWASP 진입점 플랫폼 | -| **pytm** | 위협 모델링 Python 프레임워크 | -| **SamuraiWTF** | 웹 앱 테스트 플랫폼 | -| **Secure Headers Project** | HTTP 보안 헤더 정보 | -| **WrongSecrets** | 시크릿 관리 안티패턴 예제 | - ---- - -## Lab 프로젝트 (주요 항목) - -OWASP 검토를 완료하고 가치를 입증한 프로젝트입니다. Flagship/Production 승격 후보입니다. - -> Lab 단계의 Top 10 프로젝트는 [Top 10 카탈로그](./top10-catalog.md)에서 확인하세요. - -### 문서/표준 - -| 프로젝트 | 설명 | -|---------|------| -| **DevSecOps Guideline** | DevSecOps 파이프라인 구축 가이드 | -| **Developer Guide** | 개발자를 위한 보안 가이드 | -| **Code Review Guide** | 코드 리뷰 보안 가이드 | -| **Go Secure Coding Practices** | Go 언어 안전한 코딩 가이드 | -| **Secure Coding Practices Quick Reference** | 안전한 코딩 관행 빠른 참조 가이드 | -| **IoT Security Testing Guide** | IoT 보안 테스트 가이드 | -| **AISVS** | AI 보안 검증 표준 | -| **LLM Security Verification Standard** | LLM 보안 검증 표준 | -| **Threat Modeling Playbook** | 위협 모델링 플레이북 | -| **Infrastructure Security Testing Guide** | 인프라 보안 테스트 가이드 | -| **Payment Security Testing Guide** | 결제 보안 테스트 가이드 | - -### 도구/코드 - -| 프로젝트 | 설명 | -|---------|------| -| **WebGoat** | 의도적 취약 웹앱 (교육용, Juice Shop과 유사) | -| **crAPI** | 의도적 취약 API 애플리케이션 | -| **Nettacker** | 자동화된 네트워크 취약점 스캐너 | -| **Find Security Bugs** | Java 정적 분석 보안 버그 탐지 (SpotBugs 플러그인) | -| **secureCodeBox** | 자동화된 보안 스캐닝 오케스트레이션 | -| **Threat Dragon** | 위협 모델링 도구 | -| **cdxgen** | CycloneDX BOM 생성기 | -| **dep-scan** | 종속성 취약점 스캔 도구 | -| **Noir** | 소스코드 기반 공격 표면 탐지 | -| **Maryam** | OSINT 프레임워크 | -| **Benchmark** | 보안 도구 정확도 벤치마킹 | -| **Enterprise Security API (ESAPI)** | 엔터프라이즈 보안 API 라이브러리 | - ---- - -## Incubator 프로젝트 (주요 항목) - -실험/개발 단계의 신규 프로젝트입니다 (200개+). 성숙해지면 Lab → Production → Flagship으로 승격됩니다. - -> Incubator 프로젝트는 변동이 잦으므로 전체 목록은 [OWASP 공식 프로젝트 페이지](https://owasp.org/projects/)에서 확인하세요. -> Top 10 계열 Incubator 프로젝트는 [Top 10 프로젝트 전체 목록](./top10-catalog.md)에 포함되어 있습니다. - -주목할 만한 Incubator 프로젝트 (Top 10 제외): - -| 프로젝트 | 설명 | -|---------|------| -| **APTS** | AI 자율 침투 테스트 표준 (173개 요구사항, 8 도메인) | -| **AI Exchange** | AI 보안 지식 교환 플랫폼 | -| **AI Testing Guide** | AI 시스템 보안 테스트 가이드 | -| **AI Maturity Assessment** | AI 보안 성숙도 평가 | -| **Blockchain AppSec Standard** | 블록체인 앱 보안 표준 | -| **Web3 Wallet Security** | Web3 지갑 보안 | -| **SASE Security** | Secure Access Service Edge 보안 | -| **Secure by Design Framework** | 설계 단계부터의 보안 프레임워크 | -| **Wi-Fi Security Testing Guide** | Wi-Fi 보안 테스트 가이드 | - ---- - -## Top 10 프로젝트 - -OWASP에는 웹 Top 10 외에도 **26개**의 도메인별 Top 10 프로젝트가 있습니다. 전체 목록은 [Top 10 프로젝트 전체 목록](./top10-catalog.md)을 참고하세요. - ---- - -## 참고 - -- 전체 프로젝트 인벤토리 (418개+): https://owasp.org/projects/ -- 프로젝트 성숙도 기준: https://owasp.org/www-committee-project/#maturity-levels diff --git a/OWASP/projects/index.html b/OWASP/projects/index.html new file mode 100644 index 0000000..341e88e --- /dev/null +++ b/OWASP/projects/index.html @@ -0,0 +1,2415 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 목록 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

OWASP 주요 프로젝트 목록

+

Flagship 프로젝트 (15개)

+

OWASP의 전략적 가치를 입증한 핵심 프로젝트입니다. 글로벌 보드 승인이 필요합니다.

+

문서 및 표준

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트설명최신 버전GitHub
Top 10웹 애플리케이션 10대 보안 위험2025GitHub
ASVS애플리케이션 보안 검증 표준v5.0.0GitHub
WSTG웹 보안 테스트 가이드v4.2GitHub
MAS (MASVS/MASTG)모바일 앱 보안 표준 및 테스트 가이드지속 업데이트GitHub
SAMM소프트웨어 보증 성숙도 모델지속 업데이트GitHub
Cheat Sheet Series보안 구현 가이드 모음91개+ 체크시트GitHub
CycloneDXBOM(Bill of Materials) 표준ECMA-424GitHub
+

도구 및 코드

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트설명GitHub
Juice Shop의도적으로 취약한 웹 앱 (보안 교육용)GitHub
Dependency-CheckSCA(소프트웨어 구성 분석) — 알려진 취약 라이브러리 탐지GitHub
Dependency-Track컴포넌트 분석 및 공급망 위험 관리 플랫폼GitHub
DefectDojo애플리케이션 취약점 관리 플랫폼GitHub
ModSecurity CRSWAF(웹 방화벽) Core Rule SetGitHub
Amass네트워크 매핑 및 외부 자산 발견GitHub
OWTF공격적 웹 테스트 프레임워크GitHub
Security Shepherd웹/모바일 보안 교육 플랫폼GitHub
+
+

Production 프로젝트 (11개)

+

프로덕션 준비 완료된 프로젝트입니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트설명
API Security ProjectAPI 보안 Top 10 및 전략
BLT (Bug Logging Tool)버그 리포팅 및 보상 플랫폼
Coraza WAFGo 기반 엔터프라이즈 WAF
Cornucopia위협 모델링 카드 게임
CSRFGuardCSRF 공격 방어 라이브러리
ModSecurity오픈소스 WAF 엔진
NestOWASP 진입점 플랫폼
pytm위협 모델링 Python 프레임워크
SamuraiWTF웹 앱 테스트 플랫폼
Secure Headers ProjectHTTP 보안 헤더 정보
WrongSecrets시크릿 관리 안티패턴 예제
+
+

Lab 프로젝트 (주요 항목)

+

OWASP 검토를 완료하고 가치를 입증한 프로젝트입니다. Flagship/Production 승격 후보입니다.

+
+

Lab 단계의 Top 10 프로젝트는 Top 10 카탈로그에서 확인하세요.

+
+

문서/표준

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트설명
DevSecOps GuidelineDevSecOps 파이프라인 구축 가이드
Developer Guide개발자를 위한 보안 가이드
Code Review Guide코드 리뷰 보안 가이드
Go Secure Coding PracticesGo 언어 안전한 코딩 가이드
Secure Coding Practices Quick Reference안전한 코딩 관행 빠른 참조 가이드
IoT Security Testing GuideIoT 보안 테스트 가이드
AISVSAI 보안 검증 표준
LLM Security Verification StandardLLM 보안 검증 표준
Threat Modeling Playbook위협 모델링 플레이북
Infrastructure Security Testing Guide인프라 보안 테스트 가이드
Payment Security Testing Guide결제 보안 테스트 가이드
+

도구/코드

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트설명
WebGoat의도적 취약 웹앱 (교육용, Juice Shop과 유사)
crAPI의도적 취약 API 애플리케이션
Nettacker자동화된 네트워크 취약점 스캐너
Find Security BugsJava 정적 분석 보안 버그 탐지 (SpotBugs 플러그인)
secureCodeBox자동화된 보안 스캐닝 오케스트레이션
Threat Dragon위협 모델링 도구
cdxgenCycloneDX BOM 생성기
dep-scan종속성 취약점 스캔 도구
Noir소스코드 기반 공격 표면 탐지
MaryamOSINT 프레임워크
Benchmark보안 도구 정확도 벤치마킹
Enterprise Security API (ESAPI)엔터프라이즈 보안 API 라이브러리
+
+

Incubator 프로젝트 (주요 항목)

+

실험/개발 단계의 신규 프로젝트입니다 (200개+). 성숙해지면 Lab → Production → Flagship으로 승격됩니다.

+
+

Incubator 프로젝트는 변동이 잦으므로 전체 목록은 OWASP 공식 프로젝트 페이지에서 확인하세요.
+Top 10 계열 Incubator 프로젝트는 Top 10 프로젝트 전체 목록에 포함되어 있습니다.

+
+

주목할 만한 Incubator 프로젝트 (Top 10 제외):

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트설명
APTSAI 자율 침투 테스트 표준 (173개 요구사항, 8 도메인)
AI ExchangeAI 보안 지식 교환 플랫폼
AI Testing GuideAI 시스템 보안 테스트 가이드
AI Maturity AssessmentAI 보안 성숙도 평가
Blockchain AppSec Standard블록체인 앱 보안 표준
Web3 Wallet SecurityWeb3 지갑 보안
SASE SecuritySecure Access Service Edge 보안
Secure by Design Framework설계 단계부터의 보안 프레임워크
Wi-Fi Security Testing GuideWi-Fi 보안 테스트 가이드
+
+

Top 10 프로젝트

+

OWASP에는 웹 Top 10 외에도 26개의 도메인별 Top 10 프로젝트가 있습니다. 전체 목록은 Top 10 프로젝트 전체 목록을 참고하세요.

+
+

참고

+
    +
  • 전체 프로젝트 인벤토리 (418개+): https://owasp.org/projects/
  • +
  • 프로젝트 성숙도 기준: https://owasp.org/www-committee-project/#maturity-levels
  • +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/OWASP/tools.md b/OWASP/tools.md deleted file mode 100644 index 25cc8b0..0000000 --- a/OWASP/tools.md +++ /dev/null @@ -1,150 +0,0 @@ -# OWASP 보안 도구 및 데이터 소스 - -OWASP 문서를 프로그래밍 방식으로 조회하거나, AI 에이전트와 연동하여 활용할 수 있는 도구들을 정리합니다. - ---- - -## 1. OWASP 공식 데이터 소스 - -### 구조화 데이터 - -| 데이터 | 설명 | 형식 | URL | -|--------|------|------|-----| -| **projects.json** | 418개+ 전체 프로젝트 메타데이터 (이름, 레벨, 타입, URL) | JSON | [다운로드](https://raw.githubusercontent.com/OWASP/owasp.github.io/main/_data/projects.json) | -| **ASVS 5.0 Flat** | 345개 보안 검증 요구사항 (챕터별, 레벨별) | JSON | [다운로드](https://raw.githubusercontent.com/OWASP/ASVS/master/5.0/docs_en/OWASP_Application_Security_Verification_Standard_5.0.0_en.flat.json) | -| **WSTG Checklist** | 111개 웹 보안 테스트 케이스 (카테고리별, 목표 포함) | JSON | [다운로드](https://raw.githubusercontent.com/OWASP/wstg/master/checklists/checklist.json) | - -### 문서 저장소 - -| 프로젝트 | 설명 | GitHub | -|---------|------|--------| -| **Top 10 2021** | 웹 10대 보안 위험 + CWE 매핑 | [OWASP/Top10](https://github.com/OWASP/Top10) | -| **API Security** | API 10대 보안 위험 (2023 에디션) | [OWASP/API-Security](https://github.com/OWASP/API-Security) | -| **LLM Top 10** | LLM/AI 10대 보안 위험 (2025 v2.0) | [OWASP GenAI](https://genai.owasp.org/llm-top-10/) | -| **MCP Top 10** | MCP 서버 10대 보안 위험 (2025 Beta) | [OWASP MCP Top 10](https://owasp.org/www-project-mcp-top-10/) | -| **Proactive Controls** | 개발자 10대 보안 통제 (2024) | [OWASP Proactive Controls](https://owasp.org/www-project-proactive-controls/) | -| **MASVS** | 모바일 앱 보안 검증 표준 (8 카테고리, 23 통제) | [OWASP/owasp-masvs](https://github.com/OWASP/owasp-masvs) | -| **Cheat Sheet Series** | 113개+ 보안 구현 가이드 (Markdown) | [OWASP/CheatSheetSeries](https://github.com/OWASP/CheatSheetSeries) | - ---- - -## 2. MCP 서버 (AI 에이전트 연동) - -MCP(Model Context Protocol) 서버를 사용하면 Claude, Cursor 등 AI 도구에서 OWASP 데이터를 직접 조회할 수 있습니다. - -### 종합 (OWASP 전체 통합 조회) - -| MCP | 커버리지 | 특징 | GitHub | -|-----|---------|------|--------| -| **zer0-kr/security-framework-mcp** | 418+ 프로젝트, ASVS 5.0, WSTG, Top 10 2021, API Top 10 2023, LLM Top 10 2025, MCP Top 10 2025, Proactive Controls 2024, MASVS, CWE 39종, Cheat Sheets 113+, NVD CVE 실시간 | **가장 넓은 커버리지.** 24개 도구, 4개 프롬프트 템플릿, 6개 리소스. SQLite FTS5 전문 검색. STRIDE 위협 모델링, MCP 보안 자체 평가, 컴플라이언스 매핑(PCI-DSS/ISO27001/NIST 800-53), 기술 스택 보안 진단, 체크리스트 생성 | [GitHub](https://github.com/zer0-kr/security-framework-mcp) | - -**설치 및 설정:** - -```bash -pip install git+https://github.com/zer0-kr/security-framework-mcp.git -``` - -Claude Desktop (`claude_desktop_config.json`): - -```json -{ - "mcpServers": { - "owasp": { - "command": "security-framework-mcp" - } - } -} -``` - -??? note "owasp-mcp 상세 도구 목록 (24개)" - - **프로젝트 탐색** - - | 도구 | 설명 | - |------|------| - | `list_projects` | 전체 프로젝트 목록. level(flagship/production/lab/incubator), type(code/documentation/tool) 필터 | - | `search_projects` | 프로젝트 전문 검색 (이름, 제목, 설명) | - | `get_project` | 특정 프로젝트 상세 조회 (URL, 코드 저장소, 설명, 날짜) | - - **표준 & 가이드라인** - - | 도구 | 설명 | - |------|------| - | `get_asvs` | ASVS 5.0 요구사항 조회. chapter(V1-V14), level(1/2/3), query 필터 | - | `get_wstg` | WSTG 테스트 케이스 조회. category(WSTG-INFO 등), query 필터 | - | `get_top10` | Top 10 2021 항목 + CWE 매핑 | - | `get_api_top10` | API Security Top 10 2023 항목 + CWE 매핑 | - | `get_llm_top10` | LLM Top 10 2025 항목 — AI/LLM 보안 위험 | - | `get_mcp_top10` | MCP Top 10 2025 — MCP 서버 배포 보안 위험 | - | `get_proactive_controls` | Proactive Controls 2024 — 개발자 방어 조치 | - | `get_masvs` | MASVS 모바일 보안 통제. category, query 필터 | - | `get_cheatsheet` | Cheat Sheet 조회 또는 전체 목록 | - - **취약점 & CWE 조회** - - | 도구 | 설명 | - |------|------| - | `get_cwe` | CWE ID로 상세 조회 — 설명, MITRE 링크, OWASP 교차 참조 자동 생성 | - | `search_cve` | **실시간 NVD** CVE 검색 (키워드, CWE, CVSS 심각도) | - | `get_cve_detail` | CVE 상세 조회 — CVSS 점수, 설명, 약점, 참조 | - - **교차 참조 & 분석** - - | 도구 | 설명 | - |------|------| - | `search_owasp` | **11개 데이터 소스** 통합 검색 | - | `cross_reference` | CWE → Top 10/ASVS/WSTG 교차 참조 | - | `compliance_map` | ASVS 챕터를 **PCI-DSS 4.0**, **ISO 27001:2022**, **NIST 800-53 Rev.5**에 매핑 | - | `assess_stack` | 기술 스택 입력 → 맞춤형 보안 권장사항 | - | `generate_checklist` | 프로젝트 유형(web/api/mobile/llm/full) × 깊이(basic/standard/comprehensive) 체크리스트 생성 | - | `assess_mcp_security` | MCP 서버 배포를 MCP Top 10 기준으로 자동 평가 | - | `threat_model` | **STRIDE 기반** 위협 모델 자동 생성 + OWASP 대응책 매핑 | - - **데이터베이스 관리** - - | 도구 | 설명 | - |------|------| - | `update_database` | 로컬 인덱스를 OWASP 소스에서 재빌드 | - | `database_status` | 데이터베이스 가용성, 빌드 시간, 크기 표시 | - -### Cheat Sheets 특화 - -| MCP | 커버리지 | 특징 | GitHub | -|-----|---------|------|--------| -| **santosomar/owasp-cheatsheets-mcp** | Cheat Sheet Series (113+) | Cheat Sheet 전문 검색 및 내용 조회 | [GitHub](https://github.com/santosomar/owasp-cheatsheets-mcp) | - -### ASVS 특화 - -| MCP | 커버리지 | 특징 | GitHub | -|-----|---------|------|--------| -| **clintcan/asvs-mcp** | ASVS (검증 표준) | ASVS 요구사항 검색 및 필터링 | [GitHub](https://github.com/clintcan/asvs-mcp) | - ---- - -## 3. 용도별 추천 - -| 나는 이런 게 필요하다 | 추천 도구 | -|---------------------|----------| -| OWASP 전체 데이터를 AI로 검색하고 싶다 | **zer0-kr/security-framework-mcp** | -| 기술 스택에 맞는 보안 가이드가 필요하다 | **zer0-kr/security-framework-mcp** (`assess_stack`) | -| STRIDE 위협 모델링을 자동화하고 싶다 | **zer0-kr/security-framework-mcp** (`threat_model`) | -| MCP 서버의 보안을 점검하고 싶다 | **zer0-kr/security-framework-mcp** (`assess_mcp_security`) | -| ASVS를 PCI-DSS/ISO 27001에 매핑하고 싶다 | **zer0-kr/security-framework-mcp** (`compliance_map`) | -| Cheat Sheet만 빠르게 조회하고 싶다 | **santosomar/owasp-cheatsheets-mcp** | -| 코드 없이 데이터만 다운로드하고 싶다 | **OWASP projects.json** + **ASVS Flat JSON** | - ---- - -## 4. OWASP 공식 GitHub 저장소 - -| 저장소 | 내용 | URL | -|--------|------|-----| -| **OWASP/Top10** | 웹 10대 보안 위험 | https://github.com/OWASP/Top10 | -| **OWASP/API-Security** | API 보안 Top 10 | https://github.com/OWASP/API-Security | -| **OWASP/ASVS** | 애플리케이션 보안 검증 표준 | https://github.com/OWASP/ASVS | -| **OWASP/wstg** | 웹 보안 테스트 가이드 | https://github.com/OWASP/wstg | -| **OWASP/CheatSheetSeries** | 보안 구현 가이드 113개+ | https://github.com/OWASP/CheatSheetSeries | -| **OWASP/owasp-masvs** | 모바일 앱 보안 검증 표준 | https://github.com/OWASP/owasp-masvs | -| **OWASP/owasp.github.io** | OWASP 웹사이트 + projects.json | https://github.com/OWASP/owasp.github.io | -| **OWASP/www-project-mcp-top-10** | MCP 서버 Top 10 보안 위험 | https://github.com/OWASP/www-project-mcp-top-10 | -| **OWASP/www-project-proactive-controls** | 개발자 10대 보안 통제 | https://github.com/OWASP/www-project-proactive-controls | diff --git a/OWASP/tools/index.html b/OWASP/tools/index.html new file mode 100644 index 0000000..e18f729 --- /dev/null +++ b/OWASP/tools/index.html @@ -0,0 +1,2431 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 도구 및 MCP 서버 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

OWASP 보안 도구 및 데이터 소스

+

OWASP 문서를 프로그래밍 방식으로 조회하거나, AI 에이전트와 연동하여 활용할 수 있는 도구들을 정리합니다.

+
+

1. OWASP 공식 데이터 소스

+

구조화 데이터

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
데이터설명형식URL
projects.json418개+ 전체 프로젝트 메타데이터 (이름, 레벨, 타입, URL)JSON다운로드
ASVS 5.0 Flat345개 보안 검증 요구사항 (챕터별, 레벨별)JSON다운로드
WSTG Checklist111개 웹 보안 테스트 케이스 (카테고리별, 목표 포함)JSON다운로드
+

문서 저장소

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트설명GitHub
Top 10 2021웹 10대 보안 위험 + CWE 매핑OWASP/Top10
API SecurityAPI 10대 보안 위험 (2023 에디션)OWASP/API-Security
LLM Top 10LLM/AI 10대 보안 위험 (2025 v2.0)OWASP GenAI
MCP Top 10MCP 서버 10대 보안 위험 (2025 Beta)OWASP MCP Top 10
Proactive Controls개발자 10대 보안 통제 (2024)OWASP Proactive Controls
MASVS모바일 앱 보안 검증 표준 (8 카테고리, 23 통제)OWASP/owasp-masvs
Cheat Sheet Series113개+ 보안 구현 가이드 (Markdown)OWASP/CheatSheetSeries
+
+

2. MCP 서버 (AI 에이전트 연동)

+

MCP(Model Context Protocol) 서버를 사용하면 Claude, Cursor 등 AI 도구에서 OWASP 데이터를 직접 조회할 수 있습니다.

+

종합 (OWASP 전체 통합 조회)

+ + + + + + + + + + + + + + + + + +
MCP커버리지특징GitHub
zer0-kr/security-framework-mcp418+ 프로젝트, ASVS 5.0, WSTG, Top 10 2021, API Top 10 2023, LLM Top 10 2025, MCP Top 10 2025, Proactive Controls 2024, MASVS, CWE 39종, Cheat Sheets 113+, NVD CVE 실시간가장 넓은 커버리지. 24개 도구, 4개 프롬프트 템플릿, 6개 리소스. SQLite FTS5 전문 검색. STRIDE 위협 모델링, MCP 보안 자체 평가, 컴플라이언스 매핑(PCI-DSS/ISO27001/NIST 800-53), 기술 스택 보안 진단, 체크리스트 생성GitHub
+

설치 및 설정:

+
pip install git+https://github.com/zer0-kr/security-framework-mcp.git
+
+

Claude Desktop (claude_desktop_config.json):

+
{
+  "mcpServers": {
+    "owasp": {
+      "command": "security-framework-mcp"
+    }
+  }
+}
+
+
+owasp-mcp 상세 도구 목록 (24개) +

프로젝트 탐색

+ + + + + + + + + + + + + + + + + + + + + +
도구설명
list_projects전체 프로젝트 목록. level(flagship/production/lab/incubator), type(code/documentation/tool) 필터
search_projects프로젝트 전문 검색 (이름, 제목, 설명)
get_project특정 프로젝트 상세 조회 (URL, 코드 저장소, 설명, 날짜)
+

표준 & 가이드라인

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
도구설명
get_asvsASVS 5.0 요구사항 조회. chapter(V1-V14), level(1/2/3), query 필터
get_wstgWSTG 테스트 케이스 조회. category(WSTG-INFO 등), query 필터
get_top10Top 10 2021 항목 + CWE 매핑
get_api_top10API Security Top 10 2023 항목 + CWE 매핑
get_llm_top10LLM Top 10 2025 항목 — AI/LLM 보안 위험
get_mcp_top10MCP Top 10 2025 — MCP 서버 배포 보안 위험
get_proactive_controlsProactive Controls 2024 — 개발자 방어 조치
get_masvsMASVS 모바일 보안 통제. category, query 필터
get_cheatsheetCheat Sheet 조회 또는 전체 목록
+

취약점 & CWE 조회

+ + + + + + + + + + + + + + + + + + + + + +
도구설명
get_cweCWE ID로 상세 조회 — 설명, MITRE 링크, OWASP 교차 참조 자동 생성
search_cve실시간 NVD CVE 검색 (키워드, CWE, CVSS 심각도)
get_cve_detailCVE 상세 조회 — CVSS 점수, 설명, 약점, 참조
+

교차 참조 & 분석

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
도구설명
search_owasp11개 데이터 소스 통합 검색
cross_referenceCWE → Top 10/ASVS/WSTG 교차 참조
compliance_mapASVS 챕터를 PCI-DSS 4.0, ISO 27001:2022, NIST 800-53 Rev.5에 매핑
assess_stack기술 스택 입력 → 맞춤형 보안 권장사항
generate_checklist프로젝트 유형(web/api/mobile/llm/full) × 깊이(basic/standard/comprehensive) 체크리스트 생성
assess_mcp_securityMCP 서버 배포를 MCP Top 10 기준으로 자동 평가
threat_modelSTRIDE 기반 위협 모델 자동 생성 + OWASP 대응책 매핑
+

데이터베이스 관리

+ + + + + + + + + + + + + + + + + +
도구설명
update_database로컬 인덱스를 OWASP 소스에서 재빌드
database_status데이터베이스 가용성, 빌드 시간, 크기 표시
+
+

Cheat Sheets 특화

+ + + + + + + + + + + + + + + + + +
MCP커버리지특징GitHub
santosomar/owasp-cheatsheets-mcpCheat Sheet Series (113+)Cheat Sheet 전문 검색 및 내용 조회GitHub
+

ASVS 특화

+ + + + + + + + + + + + + + + + + +
MCP커버리지특징GitHub
clintcan/asvs-mcpASVS (검증 표준)ASVS 요구사항 검색 및 필터링GitHub
+
+

3. 용도별 추천

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
나는 이런 게 필요하다추천 도구
OWASP 전체 데이터를 AI로 검색하고 싶다zer0-kr/security-framework-mcp
기술 스택에 맞는 보안 가이드가 필요하다zer0-kr/security-framework-mcp (assess_stack)
STRIDE 위협 모델링을 자동화하고 싶다zer0-kr/security-framework-mcp (threat_model)
MCP 서버의 보안을 점검하고 싶다zer0-kr/security-framework-mcp (assess_mcp_security)
ASVS를 PCI-DSS/ISO 27001에 매핑하고 싶다zer0-kr/security-framework-mcp (compliance_map)
Cheat Sheet만 빠르게 조회하고 싶다santosomar/owasp-cheatsheets-mcp
코드 없이 데이터만 다운로드하고 싶다OWASP projects.json + ASVS Flat JSON
+
+

4. OWASP 공식 GitHub 저장소

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
저장소내용URL
OWASP/Top10웹 10대 보안 위험https://github.com/OWASP/Top10
OWASP/API-SecurityAPI 보안 Top 10https://github.com/OWASP/API-Security
OWASP/ASVS애플리케이션 보안 검증 표준https://github.com/OWASP/ASVS
OWASP/wstg웹 보안 테스트 가이드https://github.com/OWASP/wstg
OWASP/CheatSheetSeries보안 구현 가이드 113개+https://github.com/OWASP/CheatSheetSeries
OWASP/owasp-masvs모바일 앱 보안 검증 표준https://github.com/OWASP/owasp-masvs
OWASP/owasp.github.ioOWASP 웹사이트 + projects.jsonhttps://github.com/OWASP/owasp.github.io
OWASP/www-project-mcp-top-10MCP 서버 Top 10 보안 위험https://github.com/OWASP/www-project-mcp-top-10
OWASP/www-project-proactive-controls개발자 10대 보안 통제https://github.com/OWASP/www-project-proactive-controls
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/OWASP/top10-catalog.md b/OWASP/top10-catalog.md deleted file mode 100644 index ad8d465..0000000 --- a/OWASP/top10-catalog.md +++ /dev/null @@ -1,96 +0,0 @@ -# OWASP Top 10 프로젝트 전체 목록 - -OWASP는 웹 애플리케이션 Top 10 외에도 다양한 도메인에 특화된 Top 10 목록을 발행합니다. 현재 **26개**의 Top 10 프로젝트가 존재합니다. - ---- - -## 한눈에 보기 - -| 분류 | 프로젝트 수 | -|------|-----------| -| 애플리케이션 보안 | 6개 | -| 인프라·클라우드·DevOps | 5개 | -| AI·ML·LLM | 5개 | -| 신기술·특수 도메인 | 6개 | -| 데이터·프라이버시·거버넌스 | 4개 | - ---- - -## 애플리케이션 보안 - -| 프로젝트 | 대상 | 최신 버전 | 성숙도 | -|---------|------|----------|--------| -| **[Top 10 Web](https://owasp.org/Top10/)** | 웹 애플리케이션 | 2025 | Flagship | -| **[API Security Top 10](https://owasp.org/www-project-api-security/)** | API | 2023 | Production | -| **[Mobile Top 10](https://owasp.org/www-project-mobile-top-10/)** | 모바일 앱 | 지속 업데이트 | Lab | -| **[Top 10 Client-Side Security Risks](https://owasp.org/www-project-top-10-client-side-security-risks/)** | 클라이언트 측 (브라우저) | — | Lab | -| **[Top 10 for Business Logic Abuse](https://owasp.org/www-project-top-10-for-business-logic-abuse/)** | 비즈니스 로직 악용 | — | Lab | -| **[Desktop App Security Top 10](https://owasp.org/www-project-desktop-app-security-top-10/)** | 데스크톱 앱 | — | Incubator | - -## 인프라·클라우드·DevOps - -| 프로젝트 | 대상 | 최신 버전 | 성숙도 | -|---------|------|----------|--------| -| **[Docker Top 10](https://owasp.org/www-project-docker-top-10/)** | Docker 컨테이너 | — | Lab | -| **[Kubernetes Top 10](https://owasp.org/www-project-kubernetes-top-ten/)** | 쿠버네티스 | — | Lab | -| **[Serverless Top 10](https://owasp.org/www-project-serverless-top-10/)** | 서버리스 환경 | — | Lab | -| **[Top 10 CI/CD Security Risks](https://owasp.org/www-project-top-10-ci-cd-security-risks/)** | CI/CD 파이프라인 | — | Lab | -| **[DevSecOps Top 10](https://owasp.org/www-project-devsecops-top-10/)** | DevSecOps | — | Lab | - -## AI·ML·LLM - -| 프로젝트 | 대상 | 최신 버전 | 성숙도 | -|---------|------|----------|--------| -| **[Top 10 for LLM Applications](https://genai.owasp.org/llm-top-10/)** | LLM/생성형 AI | v1.1 (GenAI Security로 확대) | Flagship | -| **[Machine Learning Security Top 10](https://owasp.org/www-project-machine-learning-security-top-ten/)** | 머신러닝 모델 | — | Incubator | -| **[MCP Top 10](https://owasp.org/www-project-mcp-top-10/)** | Model Context Protocol | — | Lab | -| **[Agentic Skills Top 10](https://owasp.org/www-project-agentic-skills-top-10/)** | AI 에이전트 스킬 | — | Incubator | -| **[Non-Human Identities Top 10](https://owasp.org/www-project-non-human-identities-top-10/)** | 비인간 ID (서비스 계정, API 키 등) | — | Lab | - -## 신기술·특수 도메인 - -| 프로젝트 | 대상 | 최신 버전 | 성숙도 | -|---------|------|----------|--------| -| **[Smart Contract Top 10](https://owasp.org/www-project-smart-contract-top-10/)** | 스마트 컨트랙트 | — | Lab | -| **[Operational Technology Top 10](https://owasp.org/www-project-operational-technology-top-10/)** | OT/산업제어 | — | Lab | -| **[Top 10 for Maritime Security](https://owasp.org/www-project-top-10-for-maritime-security/)** | 해양 보안 | — | Incubator | -| **[Top 10 in XR](https://owasp.org/www-project-top-10-in-xr/)** | XR (VR/AR/MR) | — | Incubator | -| **[Top 10 Drone Security Risks](https://owasp.org/www-project-top-10-drone-security-risks/)** | 드론 | — | Incubator | -| **[Top 10 Risks for Open Source Software](https://owasp.org/www-project-top-10-risks-for-open-source-software/)** | 오픈소스 소프트웨어 | — | Lab | - -## 데이터·프라이버시·거버넌스 - -| 프로젝트 | 대상 | 최신 버전 | 성숙도 | -|---------|------|----------|--------| -| **[Data Security Top 10](https://owasp.org/www-project-data-security-top-10/)** | 데이터 보안 | — | Incubator | -| **[Top 10 Privacy Risks](https://owasp.org/www-project-top-10-privacy-risks/)** | 프라이버시 | — | Lab | -| **[Citizen Development Top 10](https://owasp.org/www-project-citizen-development-top-10/)** | 시민 개발 (No-Code/Low-Code) | — | Incubator | -| **[Attack Surface Management Top 10](https://owasp.org/www-project-attack-surface-management-top-10/)** | 공격 표면 관리 | — | Lab | - ---- - -## 성숙도별 분포 - -| 성숙도 | 프로젝트 수 | 비고 | -|--------|-----------|------| -| Flagship | 2개 | Web Top 10, LLM Top 10 | -| Production | 1개 | API Security Top 10 | -| Lab | 15개 | 대부분의 도메인 특화 Top 10 | -| Incubator | 8개 | 신규/실험 단계 | - ---- - -## Proactive Controls - -Top 10 "위험" 목록과 반대로, 개발자가 구현해야 할 Top 10 "방어" 목록도 있습니다: - -| 프로젝트 | 설명 | 최신 버전 | -|---------|------|----------| -| **[Proactive Controls](https://owasp.org/www-project-proactive-controls/)** | 개발자가 구현해야 할 10대 보안 통제 | 2024 | - ---- - -## 참고 - -- 전체 프로젝트 목록: https://owasp.org/projects/ -- Top 10 Web 상세: [Top 10 2025 문서](./Top10-2025/README.md) diff --git a/OWASP/top10-catalog/index.html b/OWASP/top10-catalog/index.html new file mode 100644 index 0000000..a33d3e1 --- /dev/null +++ b/OWASP/top10-catalog/index.html @@ -0,0 +1,2333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Top 10 전체 목록 - Security Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 콘텐츠로 이동 + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + +
+
+
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + +

OWASP Top 10 프로젝트 전체 목록

+

OWASP는 웹 애플리케이션 Top 10 외에도 다양한 도메인에 특화된 Top 10 목록을 발행합니다. 현재 26개의 Top 10 프로젝트가 존재합니다.

+
+

한눈에 보기

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
분류프로젝트 수
애플리케이션 보안6개
인프라·클라우드·DevOps5개
AI·ML·LLM5개
신기술·특수 도메인6개
데이터·프라이버시·거버넌스4개
+
+

애플리케이션 보안

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트대상최신 버전성숙도
Top 10 Web웹 애플리케이션2025Flagship
API Security Top 10API2023Production
Mobile Top 10모바일 앱지속 업데이트Lab
Top 10 Client-Side Security Risks클라이언트 측 (브라우저)Lab
Top 10 for Business Logic Abuse비즈니스 로직 악용Lab
Desktop App Security Top 10데스크톱 앱Incubator
+

인프라·클라우드·DevOps

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트대상최신 버전성숙도
Docker Top 10Docker 컨테이너Lab
Kubernetes Top 10쿠버네티스Lab
Serverless Top 10서버리스 환경Lab
Top 10 CI/CD Security RisksCI/CD 파이프라인Lab
DevSecOps Top 10DevSecOpsLab
+

AI·ML·LLM

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트대상최신 버전성숙도
Top 10 for LLM ApplicationsLLM/생성형 AIv1.1 (GenAI Security로 확대)Flagship
Machine Learning Security Top 10머신러닝 모델Incubator
MCP Top 10Model Context ProtocolLab
Agentic Skills Top 10AI 에이전트 스킬Incubator
Non-Human Identities Top 10비인간 ID (서비스 계정, API 키 등)Lab
+

신기술·특수 도메인

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트대상최신 버전성숙도
Smart Contract Top 10스마트 컨트랙트Lab
Operational Technology Top 10OT/산업제어Lab
Top 10 for Maritime Security해양 보안Incubator
Top 10 in XRXR (VR/AR/MR)Incubator
Top 10 Drone Security Risks드론Incubator
Top 10 Risks for Open Source Software오픈소스 소프트웨어Lab
+

데이터·프라이버시·거버넌스

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
프로젝트대상최신 버전성숙도
Data Security Top 10데이터 보안Incubator
Top 10 Privacy Risks프라이버시Lab
Citizen Development Top 10시민 개발 (No-Code/Low-Code)Incubator
Attack Surface Management Top 10공격 표면 관리Lab
+
+

성숙도별 분포

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
성숙도프로젝트 수비고
Flagship2개Web Top 10, LLM Top 10
Production1개API Security Top 10
Lab15개대부분의 도메인 특화 Top 10
Incubator8개신규/실험 단계
+
+

Proactive Controls

+

Top 10 "위험" 목록과 반대로, 개발자가 구현해야 할 Top 10 "방어" 목록도 있습니다:

+ + + + + + + + + + + + + + + +
프로젝트설명최신 버전
Proactive Controls개발자가 구현해야 할 10대 보안 통제2024
+
+

참고

+
    +
  • 전체 프로젝트 목록: https://owasp.org/projects/
  • +
  • Top 10 Web 상세: Top 10 2025 문서
  • +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 9763ad9..0000000 --- a/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# Security Framework - -[![GitHub Pages](https://img.shields.io/badge/📖_Live_Site-GitHub_Pages-blue)](https://zer0-kr.github.io/security-framework/) -[![License: CC BY-NC-SA 4.0](https://img.shields.io/badge/License-CC_BY--NC--SA_4.0-lightgrey.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) - -> ⚠️ 이 프로젝트는 NIST/OWASP 공식 자료가 아닌 **비공식 학습 자료**입니다. 정확한 내용은 반드시 [NIST 원문](https://csrc.nist.gov) 및 [OWASP 원문](https://owasp.org)을 확인하세요. - -글로벌 정보보호 프레임워크의 문서 체계를 정리하고, 핵심 내용을 한국어로 요약하여 제공하는 프로젝트입니다. 보안 실무자가 필요할 때 허들 없이 참고할 수 있는 레퍼런스를 목표합니다. - -**📖 [https://zer0-kr.github.io/security-framework/](https://zer0-kr.github.io/security-framework/)** - -## NIST - -NIST(미국 국립표준기술연구소)의 사이버보안/프라이버시 출판물을 체계적으로 정리합니다. - -**[📖 NIST 문서 체계 가이드](./NIST/README.md)** — 시리즈 구조, 문서 간 관계도, 전체 개요 - -| 문서 | 내용 | 링크 | -|------|------|------| -| **CSF 2.0** | 사이버보안 프레임워크 — 6 Functions, 22 Categories, 106 Subcategories | [상세](./NIST/CSF-2.0/README.md) | -| **PF 1.0** | 프라이버시 프레임워크 — 5 Functions, 18 Categories, 100 Subcategories | [상세](./NIST/PF-1.0/README.md) | -| **SP 800-37** | 위험관리 프레임워크 (RMF) — 7단계, 47 Tasks | [상세](./NIST/SP800-37/README.md) | -| **SP 800-53** | 보안/프라이버시 컨트롤 — 20 Families, 1,014 Active Controls | [상세](./NIST/SP800-53/README.md) | -| **SP 800-53A** | 컨트롤 평가 절차 — Examine/Interview/Test | [상세](./NIST/SP800-53/assessment.md) | -| **SP 800-53B** | LOW (149) · MODERATE (287) · HIGH (370) 체크리스트 | [LOW](./NIST/SP800-53/low.md) · [MOD](./NIST/SP800-53/moderate.md) · [HIGH](./NIST/SP800-53/high.md) | -| **SP 800 시리즈** | 209건 주제별 분류 + 한국어 요약 | [상세](./NIST/SP800/README.md) | -| **SP 1800 시리즈** | 37건 실무 구현 가이드 + 한국어 요약 | [상세](./NIST/SP1800/README.md) | -| **도구 및 데이터 소스** | NIST API, MCP 서버, CLI — 프로그래밍 방식 활용 | [상세](./NIST/tools.md) | - -## OWASP - -OWASP(Open Worldwide Application Security Project)의 애플리케이션 보안 프로젝트를 체계적으로 정리합니다. - -**[📖 OWASP 프로젝트 체계 가이드](./OWASP/README.md)** — 프로젝트 분류, 관계도, 학습 경로 - -| 문서 | 내용 | 링크 | -|------|------|------| -| **Top 10 (2025)** | 웹 10대 보안 위험 — 2025년 공식 릴리스 | [상세](./OWASP/Top10-2025/README.md) | -| **ASVS v5.0** | 애플리케이션 보안 검증 표준 — 17 챕터, 345 요구사항, 3 Level | [상세](./OWASP/ASVS/README.md) | -| **WSTG v4.2** | 웹 보안 테스트 가이드 — 12 카테고리, 128 테스트 케이스 | [상세](./OWASP/WSTG/README.md) | -| **프로젝트 목록** | Flagship 15 + Production 11 + Lab + Incubator | [상세](./OWASP/projects.md) | -| **Top 10 전체 목록** | 26개 도메인별 Top 10 프로젝트 모음 | [상세](./OWASP/top10-catalog.md) | - -## 기여 - -오류 발견, 내용 보강, 번역 개선 등은 [CONTRIBUTING.md](./CONTRIBUTING.md)를 참고하여 Issue 또는 PR로 알려주세요. - -## 라이선스 - -이 프로젝트의 콘텐츠는 [CC BY-NC-SA 4.0](./LICENSE) 라이선스로 제공됩니다. NIST 원문은 미국 정부 저작물로서 퍼블릭 도메인이며, OWASP 원문은 CC BY-SA 4.0입니다. diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000..1cf13b9 Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/javascripts/bundle.79ae519e.min.js b/assets/javascripts/bundle.79ae519e.min.js new file mode 100644 index 0000000..3df3e5e --- /dev/null +++ b/assets/javascripts/bundle.79ae519e.min.js @@ -0,0 +1,16 @@ +"use strict";(()=>{var Zi=Object.create;var _r=Object.defineProperty;var ea=Object.getOwnPropertyDescriptor;var ta=Object.getOwnPropertyNames,Bt=Object.getOwnPropertySymbols,ra=Object.getPrototypeOf,Ar=Object.prototype.hasOwnProperty,bo=Object.prototype.propertyIsEnumerable;var ho=(e,t,r)=>t in e?_r(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))Ar.call(t,r)&&ho(e,r,t[r]);if(Bt)for(var r of Bt(t))bo.call(t,r)&&ho(e,r,t[r]);return e};var vo=(e,t)=>{var r={};for(var o in e)Ar.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&Bt)for(var o of Bt(e))t.indexOf(o)<0&&bo.call(e,o)&&(r[o]=e[o]);return r};var Cr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var oa=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ta(t))!Ar.call(e,n)&&n!==r&&_r(e,n,{get:()=>t[n],enumerable:!(o=ea(t,n))||o.enumerable});return e};var $t=(e,t,r)=>(r=e!=null?Zi(ra(e)):{},oa(t||!e||!e.__esModule?_r(r,"default",{value:e,enumerable:!0}):r,e));var go=(e,t,r)=>new Promise((o,n)=>{var i=c=>{try{a(r.next(c))}catch(p){n(p)}},s=c=>{try{a(r.throw(c))}catch(p){n(p)}},a=c=>c.done?o(c.value):Promise.resolve(c.value).then(i,s);a((r=r.apply(e,t)).next())});var xo=Cr((kr,yo)=>{(function(e,t){typeof kr=="object"&&typeof yo!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(kr,(function(){"use strict";function e(r){var o=!0,n=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(k){return!!(k&&k!==document&&k.nodeName!=="HTML"&&k.nodeName!=="BODY"&&"classList"in k&&"contains"in k.classList)}function c(k){var ut=k.type,je=k.tagName;return!!(je==="INPUT"&&s[ut]&&!k.readOnly||je==="TEXTAREA"&&!k.readOnly||k.isContentEditable)}function p(k){k.classList.contains("focus-visible")||(k.classList.add("focus-visible"),k.setAttribute("data-focus-visible-added",""))}function l(k){k.hasAttribute("data-focus-visible-added")&&(k.classList.remove("focus-visible"),k.removeAttribute("data-focus-visible-added"))}function f(k){k.metaKey||k.altKey||k.ctrlKey||(a(r.activeElement)&&p(r.activeElement),o=!0)}function u(k){o=!1}function d(k){a(k.target)&&(o||c(k.target))&&p(k.target)}function v(k){a(k.target)&&(k.target.classList.contains("focus-visible")||k.target.hasAttribute("data-focus-visible-added"))&&(n=!0,window.clearTimeout(i),i=window.setTimeout(function(){n=!1},100),l(k.target))}function S(k){document.visibilityState==="hidden"&&(n&&(o=!0),X())}function X(){document.addEventListener("mousemove",ee),document.addEventListener("mousedown",ee),document.addEventListener("mouseup",ee),document.addEventListener("pointermove",ee),document.addEventListener("pointerdown",ee),document.addEventListener("pointerup",ee),document.addEventListener("touchmove",ee),document.addEventListener("touchstart",ee),document.addEventListener("touchend",ee)}function re(){document.removeEventListener("mousemove",ee),document.removeEventListener("mousedown",ee),document.removeEventListener("mouseup",ee),document.removeEventListener("pointermove",ee),document.removeEventListener("pointerdown",ee),document.removeEventListener("pointerup",ee),document.removeEventListener("touchmove",ee),document.removeEventListener("touchstart",ee),document.removeEventListener("touchend",ee)}function ee(k){k.target.nodeName&&k.target.nodeName.toLowerCase()==="html"||(o=!1,re())}document.addEventListener("keydown",f,!0),document.addEventListener("mousedown",u,!0),document.addEventListener("pointerdown",u,!0),document.addEventListener("touchstart",u,!0),document.addEventListener("visibilitychange",S,!0),X(),r.addEventListener("focus",d,!0),r.addEventListener("blur",v,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)}))});var ro=Cr((jy,Rn)=>{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var qa=/["'&<>]/;Rn.exports=Ka;function Ka(e){var t=""+e,r=qa.exec(t);if(!r)return t;var o,n="",i=0,s=0;for(i=r.index;i{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Nt=="object"&&typeof io=="object"?io.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Nt=="object"?Nt.ClipboardJS=r():t.ClipboardJS=r()})(Nt,function(){return(function(){var e={686:(function(o,n,i){"use strict";i.d(n,{default:function(){return Xi}});var s=i(279),a=i.n(s),c=i(370),p=i.n(c),l=i(817),f=i.n(l);function u(q){try{return document.execCommand(q)}catch(C){return!1}}var d=function(C){var _=f()(C);return u("cut"),_},v=d;function S(q){var C=document.documentElement.getAttribute("dir")==="rtl",_=document.createElement("textarea");_.style.fontSize="12pt",_.style.border="0",_.style.padding="0",_.style.margin="0",_.style.position="absolute",_.style[C?"right":"left"]="-9999px";var D=window.pageYOffset||document.documentElement.scrollTop;return _.style.top="".concat(D,"px"),_.setAttribute("readonly",""),_.value=q,_}var X=function(C,_){var D=S(C);_.container.appendChild(D);var N=f()(D);return u("copy"),D.remove(),N},re=function(C){var _=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},D="";return typeof C=="string"?D=X(C,_):C instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(C==null?void 0:C.type)?D=X(C.value,_):(D=f()(C),u("copy")),D},ee=re;function k(q){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?k=function(_){return typeof _}:k=function(_){return _&&typeof Symbol=="function"&&_.constructor===Symbol&&_!==Symbol.prototype?"symbol":typeof _},k(q)}var ut=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},_=C.action,D=_===void 0?"copy":_,N=C.container,G=C.target,We=C.text;if(D!=="copy"&&D!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(G!==void 0)if(G&&k(G)==="object"&&G.nodeType===1){if(D==="copy"&&G.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(D==="cut"&&(G.hasAttribute("readonly")||G.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(We)return ee(We,{container:N});if(G)return D==="cut"?v(G):ee(G,{container:N})},je=ut;function R(q){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?R=function(_){return typeof _}:R=function(_){return _&&typeof Symbol=="function"&&_.constructor===Symbol&&_!==Symbol.prototype?"symbol":typeof _},R(q)}function se(q,C){if(!(q instanceof C))throw new TypeError("Cannot call a class as a function")}function ce(q,C){for(var _=0;_0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof N.action=="function"?N.action:this.defaultAction,this.target=typeof N.target=="function"?N.target:this.defaultTarget,this.text=typeof N.text=="function"?N.text:this.defaultText,this.container=R(N.container)==="object"?N.container:document.body}},{key:"listenClick",value:function(N){var G=this;this.listener=p()(N,"click",function(We){return G.onClick(We)})}},{key:"onClick",value:function(N){var G=N.delegateTarget||N.currentTarget,We=this.action(G)||"copy",Yt=je({action:We,container:this.container,target:this.target(G),text:this.text(G)});this.emit(Yt?"success":"error",{action:We,text:Yt,trigger:G,clearSelection:function(){G&&G.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(N){return Mr("action",N)}},{key:"defaultTarget",value:function(N){var G=Mr("target",N);if(G)return document.querySelector(G)}},{key:"defaultText",value:function(N){return Mr("text",N)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(N){var G=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return ee(N,G)}},{key:"cut",value:function(N){return v(N)}},{key:"isSupported",value:function(){var N=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],G=typeof N=="string"?[N]:N,We=!!document.queryCommandSupported;return G.forEach(function(Yt){We=We&&!!document.queryCommandSupported(Yt)}),We}}]),_})(a()),Xi=Ji}),828:(function(o){var n=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,c){for(;a&&a.nodeType!==n;){if(typeof a.matches=="function"&&a.matches(c))return a;a=a.parentNode}}o.exports=s}),438:(function(o,n,i){var s=i(828);function a(l,f,u,d,v){var S=p.apply(this,arguments);return l.addEventListener(u,S,v),{destroy:function(){l.removeEventListener(u,S,v)}}}function c(l,f,u,d,v){return typeof l.addEventListener=="function"?a.apply(null,arguments):typeof u=="function"?a.bind(null,document).apply(null,arguments):(typeof l=="string"&&(l=document.querySelectorAll(l)),Array.prototype.map.call(l,function(S){return a(S,f,u,d,v)}))}function p(l,f,u,d){return function(v){v.delegateTarget=s(v.target,f),v.delegateTarget&&d.call(l,v)}}o.exports=c}),879:(function(o,n){n.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},n.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||n.node(i[0]))},n.string=function(i){return typeof i=="string"||i instanceof String},n.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}}),370:(function(o,n,i){var s=i(879),a=i(438);function c(u,d,v){if(!u&&!d&&!v)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(v))throw new TypeError("Third argument must be a Function");if(s.node(u))return p(u,d,v);if(s.nodeList(u))return l(u,d,v);if(s.string(u))return f(u,d,v);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function p(u,d,v){return u.addEventListener(d,v),{destroy:function(){u.removeEventListener(d,v)}}}function l(u,d,v){return Array.prototype.forEach.call(u,function(S){S.addEventListener(d,v)}),{destroy:function(){Array.prototype.forEach.call(u,function(S){S.removeEventListener(d,v)})}}}function f(u,d,v){return a(document.body,u,d,v)}o.exports=c}),817:(function(o){function n(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),p=document.createRange();p.selectNodeContents(i),c.removeAllRanges(),c.addRange(p),s=c.toString()}return s}o.exports=n}),279:(function(o){function n(){}n.prototype={on:function(i,s,a){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var c=this;function p(){c.off(i,p),s.apply(a,arguments)}return p._=s,this.on(i,p,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),c=0,p=a.length;for(c;c0&&i[i.length-1])&&(p[0]===6||p[0]===2)){r=0;continue}if(p[0]===3&&(!i||p[1]>i[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function K(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var o=r.call(e),n,i=[],s;try{for(;(t===void 0||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(a){s={error:a}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(s)throw s.error}}return i}function B(e,t,r){if(r||arguments.length===2)for(var o=0,n=t.length,i;o1||c(d,S)})},v&&(n[d]=v(n[d])))}function c(d,v){try{p(o[d](v))}catch(S){u(i[0][3],S)}}function p(d){d.value instanceof dt?Promise.resolve(d.value.v).then(l,f):u(i[0][2],d)}function l(d){c("next",d)}function f(d){c("throw",d)}function u(d,v){d(v),i.shift(),i.length&&c(i[0][0],i[0][1])}}function To(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Oe=="function"?Oe(e):e[Symbol.iterator](),r={},o("next"),o("throw"),o("return"),r[Symbol.asyncIterator]=function(){return this},r);function o(i){r[i]=e[i]&&function(s){return new Promise(function(a,c){s=e[i](s),n(a,c,s.done,s.value)})}}function n(i,s,a,c){Promise.resolve(c).then(function(p){i({value:p,done:a})},s)}}function I(e){return typeof e=="function"}function yt(e){var t=function(o){Error.call(o),o.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var Jt=yt(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(o,n){return n+1+") "+o.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ze(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var qe=(function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,o,n,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=Oe(s),c=a.next();!c.done;c=a.next()){var p=c.value;p.remove(this)}}catch(S){t={error:S}}finally{try{c&&!c.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var l=this.initialTeardown;if(I(l))try{l()}catch(S){i=S instanceof Jt?S.errors:[S]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var u=Oe(f),d=u.next();!d.done;d=u.next()){var v=d.value;try{So(v)}catch(S){i=i!=null?i:[],S instanceof Jt?i=B(B([],K(i)),K(S.errors)):i.push(S)}}}catch(S){o={error:S}}finally{try{d&&!d.done&&(n=u.return)&&n.call(u)}finally{if(o)throw o.error}}}if(i)throw new Jt(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)So(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ze(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ze(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e})();var $r=qe.EMPTY;function Xt(e){return e instanceof qe||e&&"closed"in e&&I(e.remove)&&I(e.add)&&I(e.unsubscribe)}function So(e){I(e)?e():e.unsubscribe()}var De={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var xt={setTimeout:function(e,t){for(var r=[],o=2;o0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var o=this,n=this,i=n.hasError,s=n.isStopped,a=n.observers;return i||s?$r:(this.currentObservers=null,a.push(r),new qe(function(){o.currentObservers=null,Ze(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var o=this,n=o.hasError,i=o.thrownError,s=o.isStopped;n?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,o){return new Ho(r,o)},t})(F);var Ho=(function(e){ie(t,e);function t(r,o){var n=e.call(this)||this;return n.destination=r,n.source=o,n}return t.prototype.next=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.next)===null||n===void 0||n.call(o,r)},t.prototype.error=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.error)===null||n===void 0||n.call(o,r)},t.prototype.complete=function(){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||o===void 0||o.call(r)},t.prototype._subscribe=function(r){var o,n;return(n=(o=this.source)===null||o===void 0?void 0:o.subscribe(r))!==null&&n!==void 0?n:$r},t})(T);var jr=(function(e){ie(t,e);function t(r){var o=e.call(this)||this;return o._value=r,o}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(r){var o=e.prototype._subscribe.call(this,r);return!o.closed&&r.next(this._value),o},t.prototype.getValue=function(){var r=this,o=r.hasError,n=r.thrownError,i=r._value;if(o)throw n;return this._throwIfClosed(),i},t.prototype.next=function(r){e.prototype.next.call(this,this._value=r)},t})(T);var Rt={now:function(){return(Rt.delegate||Date).now()},delegate:void 0};var It=(function(e){ie(t,e);function t(r,o,n){r===void 0&&(r=1/0),o===void 0&&(o=1/0),n===void 0&&(n=Rt);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=o,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=o===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,o),i}return t.prototype.next=function(r){var o=this,n=o.isStopped,i=o._buffer,s=o._infiniteTimeWindow,a=o._timestampProvider,c=o._windowTime;n||(i.push(r),!s&&i.push(a.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var o=this._innerSubscribe(r),n=this,i=n._infiniteTimeWindow,s=n._buffer,a=s.slice(),c=0;c0?e.prototype.schedule.call(this,r,o):(this.delay=o,this.state=r,this.scheduler.flush(this),this)},t.prototype.execute=function(r,o){return o>0||this.closed?e.prototype.execute.call(this,r,o):this._execute(r,o)},t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!=null&&n>0||n==null&&this.delay>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.flush(this),0)},t})(St);var Ro=(function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t})(Ot);var Dr=new Ro(Po);var Io=(function(e){ie(t,e);function t(r,o){var n=e.call(this,r,o)||this;return n.scheduler=r,n.work=o,n}return t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!==null&&n>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.actions.push(this),r._scheduled||(r._scheduled=Tt.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,o,n){var i;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,o,n);var s=r.actions;o!=null&&o===r._scheduled&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==o&&(Tt.cancelAnimationFrame(o),r._scheduled=void 0)},t})(St);var Fo=(function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var o;r?o=r.id:(o=this._scheduled,this._scheduled=void 0);var n=this.actions,i;r=r||n.shift();do if(i=r.execute(r.state,r.delay))break;while((r=n[0])&&r.id===o&&n.shift());if(this._active=!1,i){for(;(r=n[0])&&r.id===o&&n.shift();)r.unsubscribe();throw i}},t})(Ot);var ye=new Fo(Io);var y=new F(function(e){return e.complete()});function tr(e){return e&&I(e.schedule)}function Vr(e){return e[e.length-1]}function pt(e){return I(Vr(e))?e.pop():void 0}function Fe(e){return tr(Vr(e))?e.pop():void 0}function rr(e,t){return typeof Vr(e)=="number"?e.pop():t}var Lt=(function(e){return e&&typeof e.length=="number"&&typeof e!="function"});function or(e){return I(e==null?void 0:e.then)}function nr(e){return I(e[wt])}function ir(e){return Symbol.asyncIterator&&I(e==null?void 0:e[Symbol.asyncIterator])}function ar(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function fa(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var sr=fa();function cr(e){return I(e==null?void 0:e[sr])}function pr(e){return wo(this,arguments,function(){var r,o,n,i;return Gt(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,dt(r.read())];case 3:return o=s.sent(),n=o.value,i=o.done,i?[4,dt(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,dt(n)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function lr(e){return I(e==null?void 0:e.getReader)}function U(e){if(e instanceof F)return e;if(e!=null){if(nr(e))return ua(e);if(Lt(e))return da(e);if(or(e))return ha(e);if(ir(e))return jo(e);if(cr(e))return ba(e);if(lr(e))return va(e)}throw ar(e)}function ua(e){return new F(function(t){var r=e[wt]();if(I(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function da(e){return new F(function(t){for(var r=0;r=2;return function(o){return o.pipe(e?g(function(n,i){return e(n,i,o)}):be,Ee(1),r?Qe(t):tn(function(){return new fr}))}}function Yr(e){return e<=0?function(){return y}:E(function(t,r){var o=[];t.subscribe(w(r,function(n){o.push(n),e=2,!0))}function le(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new T}:t,o=e.resetOnError,n=o===void 0?!0:o,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,c=a===void 0?!0:a;return function(p){var l,f,u,d=0,v=!1,S=!1,X=function(){f==null||f.unsubscribe(),f=void 0},re=function(){X(),l=u=void 0,v=S=!1},ee=function(){var k=l;re(),k==null||k.unsubscribe()};return E(function(k,ut){d++,!S&&!v&&X();var je=u=u!=null?u:r();ut.add(function(){d--,d===0&&!S&&!v&&(f=Br(ee,c))}),je.subscribe(ut),!l&&d>0&&(l=new bt({next:function(R){return je.next(R)},error:function(R){S=!0,X(),f=Br(re,n,R),je.error(R)},complete:function(){v=!0,X(),f=Br(re,s),je.complete()}}),U(k).subscribe(l))})(p)}}function Br(e,t){for(var r=[],o=2;oe.next(document)),e}function M(e,t=document){return Array.from(t.querySelectorAll(e))}function j(e,t=document){let r=ue(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ue(e,t=document){return t.querySelector(e)||void 0}function Ne(){var e,t,r,o;return(o=(r=(t=(e=document.activeElement)==null?void 0:e.shadowRoot)==null?void 0:t.activeElement)!=null?r:document.activeElement)!=null?o:void 0}var Ra=L(h(document.body,"focusin"),h(document.body,"focusout")).pipe(Ae(1),Q(void 0),m(()=>Ne()||document.body),Z(1));function Ye(e){return Ra.pipe(m(t=>e.contains(t)),Y())}function it(e,t){return H(()=>L(h(e,"mouseenter").pipe(m(()=>!0)),h(e,"mouseleave").pipe(m(()=>!1))).pipe(t?jt(r=>He(+!r*t)):be,Q(e.matches(":hover"))))}function sn(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)sn(e,r)}function x(e,t,...r){let o=document.createElement(e);if(t)for(let n of Object.keys(t))typeof t[n]!="undefined"&&(typeof t[n]!="boolean"?o.setAttribute(n,t[n]):o.setAttribute(n,""));for(let n of r)sn(o,n);return o}function br(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function _t(e){let t=x("script",{src:e});return H(()=>(document.head.appendChild(t),L(h(t,"load"),h(t,"error").pipe(b(()=>Nr(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),A(()=>document.head.removeChild(t)),Ee(1))))}var cn=new T,Ia=H(()=>typeof ResizeObserver=="undefined"?_t("https://unpkg.com/resize-observer-polyfill"):$(void 0)).pipe(m(()=>new ResizeObserver(e=>e.forEach(t=>cn.next(t)))),b(e=>L(tt,$(e)).pipe(A(()=>e.disconnect()))),Z(1));function de(e){return{width:e.offsetWidth,height:e.offsetHeight}}function Le(e){let t=e;for(;t.clientWidth===0&&t.parentElement;)t=t.parentElement;return Ia.pipe(O(r=>r.observe(t)),b(r=>cn.pipe(g(o=>o.target===t),A(()=>r.unobserve(t)))),m(()=>de(e)),Q(de(e)))}function At(e){return{width:e.scrollWidth,height:e.scrollHeight}}function vr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}function pn(e){let t=[],r=e.parentElement;for(;r;)(e.clientWidth>r.clientWidth||e.clientHeight>r.clientHeight)&&t.push(r),r=(e=r).parentElement;return t.length===0&&t.push(document.documentElement),t}function Be(e){return{x:e.offsetLeft,y:e.offsetTop}}function ln(e){let t=e.getBoundingClientRect();return{x:t.x+window.scrollX,y:t.y+window.scrollY}}function mn(e){return L(h(window,"load"),h(window,"resize")).pipe($e(0,ye),m(()=>Be(e)),Q(Be(e)))}function gr(e){return{x:e.scrollLeft,y:e.scrollTop}}function Ge(e){return L(h(e,"scroll"),h(window,"scroll"),h(window,"resize")).pipe($e(0,ye),m(()=>gr(e)),Q(gr(e)))}var fn=new T,Fa=H(()=>$(new IntersectionObserver(e=>{for(let t of e)fn.next(t)},{threshold:0}))).pipe(b(e=>L(tt,$(e)).pipe(A(()=>e.disconnect()))),Z(1));function mt(e){return Fa.pipe(O(t=>t.observe(e)),b(t=>fn.pipe(g(({target:r})=>r===e),A(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function un(e,t=16){return Ge(e).pipe(m(({y:r})=>{let o=de(e),n=At(e);return r>=n.height-o.height-t}),Y())}var yr={drawer:j("[data-md-toggle=drawer]"),search:j("[data-md-toggle=search]")};function dn(e){return yr[e].checked}function at(e,t){yr[e].checked!==t&&yr[e].click()}function Je(e){let t=yr[e];return h(t,"change").pipe(m(()=>t.checked),Q(t.checked))}function ja(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ua(){return L(h(window,"compositionstart").pipe(m(()=>!0)),h(window,"compositionend").pipe(m(()=>!1))).pipe(Q(!1))}function hn(){let e=h(window,"keydown").pipe(g(t=>!(t.metaKey||t.ctrlKey)),m(t=>({mode:dn("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),g(({mode:t,type:r})=>{if(t==="global"){let o=Ne();if(typeof o!="undefined")return!ja(o,r)}return!0}),le());return Ua().pipe(b(t=>t?y:e))}function we(){return new URL(location.href)}function st(e,t=!1){if(V("navigation.instant")&&!t){let r=x("a",{href:e.href});document.body.appendChild(r),r.click(),r.remove()}else location.href=e.href}function bn(){return new T}function vn(){return location.hash.slice(1)}function gn(e){let t=x("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Zr(e){return L(h(window,"hashchange"),e).pipe(m(vn),Q(vn()),g(t=>t.length>0),Z(1))}function yn(e){return Zr(e).pipe(m(t=>ue(`[id="${t}"]`)),g(t=>typeof t!="undefined"))}function Wt(e){let t=matchMedia(e);return ur(r=>t.addListener(()=>r(t.matches))).pipe(Q(t.matches))}function xn(){let e=matchMedia("print");return L(h(window,"beforeprint").pipe(m(()=>!0)),h(window,"afterprint").pipe(m(()=>!1))).pipe(Q(e.matches))}function eo(e,t){return e.pipe(b(r=>r?t():y))}function to(e,t){return new F(r=>{let o=new XMLHttpRequest;return o.open("GET",`${e}`),o.responseType="blob",o.addEventListener("load",()=>{o.status>=200&&o.status<300?(r.next(o.response),r.complete()):r.error(new Error(o.statusText))}),o.addEventListener("error",()=>{r.error(new Error("Network error"))}),o.addEventListener("abort",()=>{r.complete()}),typeof(t==null?void 0:t.progress$)!="undefined"&&(o.addEventListener("progress",n=>{var i;if(n.lengthComputable)t.progress$.next(n.loaded/n.total*100);else{let s=(i=o.getResponseHeader("Content-Length"))!=null?i:0;t.progress$.next(n.loaded/+s*100)}}),t.progress$.next(5)),o.send(),()=>o.abort()})}function ze(e,t){return to(e,t).pipe(b(r=>r.text()),m(r=>JSON.parse(r)),Z(1))}function xr(e,t){let r=new DOMParser;return to(e,t).pipe(b(o=>o.text()),m(o=>r.parseFromString(o,"text/html")),Z(1))}function En(e,t){let r=new DOMParser;return to(e,t).pipe(b(o=>o.text()),m(o=>r.parseFromString(o,"text/xml")),Z(1))}function wn(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function Tn(){return L(h(window,"scroll",{passive:!0}),h(window,"resize",{passive:!0})).pipe(m(wn),Q(wn()))}function Sn(){return{width:innerWidth,height:innerHeight}}function On(){return h(window,"resize",{passive:!0}).pipe(m(Sn),Q(Sn()))}function Ln(){return z([Tn(),On()]).pipe(m(([e,t])=>({offset:e,size:t})),Z(1))}function Er(e,{viewport$:t,header$:r}){let o=t.pipe(ne("size")),n=z([o,r]).pipe(m(()=>Be(e)));return z([r,t,n]).pipe(m(([{height:i},{offset:s,size:a},{x:c,y:p}])=>({offset:{x:s.x-c,y:s.y-p+i},size:a})))}function Wa(e){return h(e,"message",t=>t.data)}function Da(e){let t=new T;return t.subscribe(r=>e.postMessage(r)),t}function Mn(e,t=new Worker(e)){let r=Wa(t),o=Da(t),n=new T;n.subscribe(o);let i=o.pipe(oe(),ae(!0));return n.pipe(oe(),Ve(r.pipe(W(i))),le())}var Va=j("#__config"),Ct=JSON.parse(Va.textContent);Ct.base=`${new URL(Ct.base,we())}`;function Te(){return Ct}function V(e){return Ct.features.includes(e)}function Me(e,t){return typeof t!="undefined"?Ct.translations[e].replace("#",t.toString()):Ct.translations[e]}function Ce(e,t=document){return j(`[data-md-component=${e}]`,t)}function me(e,t=document){return M(`[data-md-component=${e}]`,t)}function Na(e){let t=j(".md-typeset > :first-child",e);return h(t,"click",{once:!0}).pipe(m(()=>j(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function _n(e){if(!V("announce.dismiss")||!e.childElementCount)return y;if(!e.hidden){let t=j(".md-typeset",e);__md_hash(t.innerHTML)===__md_get("__announce")&&(e.hidden=!0)}return H(()=>{let t=new T;return t.subscribe(({hash:r})=>{e.hidden=!0,__md_set("__announce",r)}),Na(e).pipe(O(r=>t.next(r)),A(()=>t.complete()),m(r=>P({ref:e},r)))})}function za(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function An(e,t){let r=new T;return r.subscribe(({hidden:o})=>{e.hidden=o}),za(e,t).pipe(O(o=>r.next(o)),A(()=>r.complete()),m(o=>P({ref:e},o)))}function Dt(e,t){return t==="inline"?x("div",{class:"md-tooltip md-tooltip--inline",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"})):x("div",{class:"md-tooltip",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"}))}function wr(...e){return x("div",{class:"md-tooltip2",role:"dialog"},x("div",{class:"md-tooltip2__inner md-typeset"},e))}function Cn(...e){return x("div",{class:"md-tooltip2",role:"tooltip"},x("div",{class:"md-tooltip2__inner md-typeset"},e))}function kn(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return x("aside",{class:"md-annotation",tabIndex:0},Dt(t),x("a",{href:r,class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}else return x("aside",{class:"md-annotation",tabIndex:0},Dt(t),x("span",{class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}function Hn(e){return x("button",{class:"md-code__button",title:Me("clipboard.copy"),"data-clipboard-target":`#${e} > code`,"data-md-type":"copy"})}function $n(){return x("button",{class:"md-code__button",title:"Toggle line selection","data-md-type":"select"})}function Pn(){return x("nav",{class:"md-code__nav"})}var In=$t(ro());function oo(e,t){let r=t&2,o=t&1,n=Object.keys(e.terms).filter(c=>!e.terms[c]).reduce((c,p)=>[...c,x("del",null,(0,In.default)(p))," "],[]).slice(0,-1),i=Te(),s=new URL(e.location,i.base);V("search.highlight")&&s.searchParams.set("h",Object.entries(e.terms).filter(([,c])=>c).reduce((c,[p])=>`${c} ${p}`.trim(),""));let{tags:a}=Te();return x("a",{href:`${s}`,class:"md-search-result__link",tabIndex:-1},x("article",{class:"md-search-result__article md-typeset","data-md-score":e.score.toFixed(2)},r>0&&x("div",{class:"md-search-result__icon md-icon"}),r>0&&x("h1",null,e.title),r<=0&&x("h2",null,e.title),o>0&&e.text.length>0&&e.text,e.tags&&x("nav",{class:"md-tags"},e.tags.map(c=>{let p=a?c in a?`md-tag-icon md-tag--${a[c]}`:"md-tag-icon":"";return x("span",{class:`md-tag ${p}`},c)})),o>0&&n.length>0&&x("p",{class:"md-search-result__terms"},Me("search.result.term.missing"),": ",...n)))}function Fn(e){let t=e[0].score,r=[...e],o=Te(),n=r.findIndex(l=>!`${new URL(l.location,o.base)}`.includes("#")),[i]=r.splice(n,1),s=r.findIndex(l=>l.scoreoo(l,1)),...c.length?[x("details",{class:"md-search-result__more"},x("summary",{tabIndex:-1},x("div",null,c.length>0&&c.length===1?Me("search.result.more.one"):Me("search.result.more.other",c.length))),...c.map(l=>oo(l,1)))]:[]];return x("li",{class:"md-search-result__item"},p)}function jn(e){return x("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>x("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?br(r):r)))}function no(e){let t=`tabbed-control tabbed-control--${e}`;return x("div",{class:t,hidden:!0},x("button",{class:"tabbed-button",tabIndex:-1,"aria-hidden":"true"}))}function Un(e){return x("div",{class:"md-typeset__scrollwrap"},x("div",{class:"md-typeset__table"},e))}function Qa(e){var o;let t=Te(),r=new URL(`../${e.version}/`,t.base);return x("li",{class:"md-version__item"},x("a",{href:`${r}`,class:"md-version__link"},e.title,((o=t.version)==null?void 0:o.alias)&&e.aliases.length>0&&x("span",{class:"md-version__alias"},e.aliases[0])))}function Wn(e,t){var o;let r=Te();return e=e.filter(n=>{var i;return!((i=n.properties)!=null&&i.hidden)}),x("div",{class:"md-version"},x("button",{class:"md-version__current","aria-label":Me("select.version")},t.title,((o=r.version)==null?void 0:o.alias)&&t.aliases.length>0&&x("span",{class:"md-version__alias"},t.aliases[0])),x("ul",{class:"md-version__list"},e.map(Qa)))}var Ya=0;function Ba(e,t=250){let r=z([Ye(e),it(e,t)]).pipe(m(([n,i])=>n||i),Y()),o=H(()=>pn(e)).pipe(J(Ge),gt(1),Pe(r),m(()=>ln(e)));return r.pipe(Re(n=>n),b(()=>z([r,o])),m(([n,i])=>({active:n,offset:i})),le())}function Vt(e,t,r=250){let{content$:o,viewport$:n}=t,i=`__tooltip2_${Ya++}`;return H(()=>{let s=new T,a=new jr(!1);s.pipe(oe(),ae(!1)).subscribe(a);let c=a.pipe(jt(l=>He(+!l*250,Dr)),Y(),b(l=>l?o:y),O(l=>l.id=i),le());z([s.pipe(m(({active:l})=>l)),c.pipe(b(l=>it(l,250)),Q(!1))]).pipe(m(l=>l.some(f=>f))).subscribe(a);let p=a.pipe(g(l=>l),te(c,n),m(([l,f,{size:u}])=>{let d=e.getBoundingClientRect(),v=d.width/2;if(f.role==="tooltip")return{x:v,y:8+d.height};if(d.y>=u.height/2){let{height:S}=de(f);return{x:v,y:-16-S}}else return{x:v,y:16+d.height}}));return z([c,s,p]).subscribe(([l,{offset:f},u])=>{l.style.setProperty("--md-tooltip-host-x",`${f.x}px`),l.style.setProperty("--md-tooltip-host-y",`${f.y}px`),l.style.setProperty("--md-tooltip-x",`${u.x}px`),l.style.setProperty("--md-tooltip-y",`${u.y}px`),l.classList.toggle("md-tooltip2--top",u.y<0),l.classList.toggle("md-tooltip2--bottom",u.y>=0)}),a.pipe(g(l=>l),te(c,(l,f)=>f),g(l=>l.role==="tooltip")).subscribe(l=>{let f=de(j(":scope > *",l));l.style.setProperty("--md-tooltip-width",`${f.width}px`),l.style.setProperty("--md-tooltip-tail","0px")}),a.pipe(Y(),xe(ye),te(c)).subscribe(([l,f])=>{f.classList.toggle("md-tooltip2--active",l)}),z([a.pipe(g(l=>l)),c]).subscribe(([l,f])=>{f.role==="dialog"?(e.setAttribute("aria-controls",i),e.setAttribute("aria-haspopup","dialog")):e.setAttribute("aria-describedby",i)}),a.pipe(g(l=>!l)).subscribe(()=>{e.removeAttribute("aria-controls"),e.removeAttribute("aria-describedby"),e.removeAttribute("aria-haspopup")}),Ba(e,r).pipe(O(l=>s.next(l)),A(()=>s.complete()),m(l=>P({ref:e},l)))})}function Xe(e,{viewport$:t},r=document.body){return Vt(e,{content$:new F(o=>{let n=e.title,i=Cn(n);return o.next(i),e.removeAttribute("title"),r.append(i),()=>{i.remove(),e.setAttribute("title",n)}}),viewport$:t},0)}function Ga(e,t){let r=H(()=>z([mn(e),Ge(t)])).pipe(m(([{x:o,y:n},i])=>{let{width:s,height:a}=de(e);return{x:o-i.x+s/2,y:n-i.y+a/2}}));return Ye(e).pipe(b(o=>r.pipe(m(n=>({active:o,offset:n})),Ee(+!o||1/0))))}function Dn(e,t,{target$:r}){let[o,n]=Array.from(e.children);return H(()=>{let i=new T,s=i.pipe(oe(),ae(!0));return i.subscribe({next({offset:a}){e.style.setProperty("--md-tooltip-x",`${a.x}px`),e.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),mt(e).pipe(W(s)).subscribe(a=>{e.toggleAttribute("data-md-visible",a)}),L(i.pipe(g(({active:a})=>a)),i.pipe(Ae(250),g(({active:a})=>!a))).subscribe({next({active:a}){a?e.prepend(o):o.remove()},complete(){e.prepend(o)}}),i.pipe($e(16,ye)).subscribe(({active:a})=>{o.classList.toggle("md-tooltip--active",a)}),i.pipe(gt(125,ye),g(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?e.style.setProperty("--md-tooltip-0",`${-a}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),h(n,"click").pipe(W(s),g(a=>!(a.metaKey||a.ctrlKey))).subscribe(a=>{a.stopPropagation(),a.preventDefault()}),h(n,"mousedown").pipe(W(s),te(i)).subscribe(([a,{active:c}])=>{var p;if(a.button!==0||a.metaKey||a.ctrlKey)a.preventDefault();else if(c){a.preventDefault();let l=e.parentElement.closest(".md-annotation");l instanceof HTMLElement?l.focus():(p=Ne())==null||p.blur()}}),r.pipe(W(s),g(a=>a===o),nt(125)).subscribe(()=>e.focus()),Ga(e,t).pipe(O(a=>i.next(a)),A(()=>i.complete()),m(a=>P({ref:e},a)))})}function Ja(e){let t=Te();if(e.tagName!=="CODE")return[e];let r=[".c",".c1",".cm"];if(t.annotate&&typeof t.annotate=="object"){let o=e.closest("[class|=language]");if(o)for(let n of Array.from(o.classList)){if(!n.startsWith("language-"))continue;let[,i]=n.split("-");i in t.annotate&&r.push(...t.annotate[i])}}return M(r.join(", "),e)}function Xa(e){let t=[];for(let r of Ja(e)){let o=[],n=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=n.nextNode();i;i=n.nextNode())o.push(i);for(let i of o){let s;for(;s=/(\(\d+\))(!)?/.exec(i.textContent);){let[,a,c]=s;if(typeof c=="undefined"){let p=i.splitText(s.index);i=p.splitText(a.length),t.push(p)}else{i.textContent=a,t.push(i);break}}}}return t}function Vn(e,t){t.append(...Array.from(e.childNodes))}function Tr(e,t,{target$:r,print$:o}){let n=t.closest("[id]"),i=n==null?void 0:n.id,s=new Map;for(let a of Xa(t)){let[,c]=a.textContent.match(/\((\d+)\)/);ue(`:scope > li:nth-child(${c})`,e)&&(s.set(c,kn(c,i)),a.replaceWith(s.get(c)))}return s.size===0?y:H(()=>{let a=new T,c=a.pipe(oe(),ae(!0)),p=[];for(let[l,f]of s)p.push([j(".md-typeset",f),j(`:scope > li:nth-child(${l})`,e)]);return o.pipe(W(c)).subscribe(l=>{e.hidden=!l,e.classList.toggle("md-annotation-list",l);for(let[f,u]of p)l?Vn(f,u):Vn(u,f)}),L(...[...s].map(([,l])=>Dn(l,t,{target$:r}))).pipe(A(()=>a.complete()),le())})}function Nn(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return Nn(t)}}function zn(e,t){return H(()=>{let r=Nn(e);return typeof r!="undefined"?Tr(r,e,t):y})}var Kn=$t(ao());var Za=0,qn=L(h(window,"keydown").pipe(m(()=>!0)),L(h(window,"keyup"),h(window,"contextmenu")).pipe(m(()=>!1))).pipe(Q(!1),Z(1));function Qn(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return Qn(t)}}function es(e){return Le(e).pipe(m(({width:t})=>({scrollable:At(e).width>t})),ne("scrollable"))}function Yn(e,t){let{matches:r}=matchMedia("(hover)"),o=H(()=>{let n=new T,i=n.pipe(Yr(1));n.subscribe(({scrollable:d})=>{d&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")});let s=[],a=e.closest("pre"),c=a.closest("[id]"),p=c?c.id:Za++;a.id=`__code_${p}`;let l=[],f=e.closest(".highlight");if(f instanceof HTMLElement){let d=Qn(f);if(typeof d!="undefined"&&(f.classList.contains("annotate")||V("content.code.annotate"))){let v=Tr(d,e,t);l.push(Le(f).pipe(W(i),m(({width:S,height:X})=>S&&X),Y(),b(S=>S?v:y)))}}let u=M(":scope > span[id]",e);if(u.length&&(e.classList.add("md-code__content"),e.closest(".select")||V("content.code.select")&&!e.closest(".no-select"))){let d=+u[0].id.split("-").pop(),v=$n();s.push(v),V("content.tooltips")&&l.push(Xe(v,{viewport$}));let S=h(v,"click").pipe(Ut(R=>!R,!1),O(()=>v.blur()),le());S.subscribe(R=>{v.classList.toggle("md-code__button--active",R)});let X=fe(u).pipe(J(R=>it(R).pipe(m(se=>[R,se]))));S.pipe(b(R=>R?X:y)).subscribe(([R,se])=>{let ce=ue(".hll.select",R);if(ce&&!se)ce.replaceWith(...Array.from(ce.childNodes));else if(!ce&&se){let he=document.createElement("span");he.className="hll select",he.append(...Array.from(R.childNodes).slice(1)),R.append(he)}});let re=fe(u).pipe(J(R=>h(R,"mousedown").pipe(O(se=>se.preventDefault()),m(()=>R)))),ee=S.pipe(b(R=>R?re:y),te(qn),m(([R,se])=>{var he;let ce=u.indexOf(R)+d;if(se===!1)return[ce,ce];{let Se=M(".hll",e).map(Ue=>u.indexOf(Ue.parentElement)+d);return(he=window.getSelection())==null||he.removeAllRanges(),[Math.min(ce,...Se),Math.max(ce,...Se)]}})),k=Zr(y).pipe(g(R=>R.startsWith(`__codelineno-${p}-`)));k.subscribe(R=>{let[,,se]=R.split("-"),ce=se.split(":").map(Se=>+Se-d+1);ce.length===1&&ce.push(ce[0]);for(let Se of M(".hll:not(.select)",e))Se.replaceWith(...Array.from(Se.childNodes));let he=u.slice(ce[0]-1,ce[1]);for(let Se of he){let Ue=document.createElement("span");Ue.className="hll",Ue.append(...Array.from(Se.childNodes).slice(1)),Se.append(Ue)}}),k.pipe(Ee(1),xe(pe)).subscribe(R=>{if(R.includes(":")){let se=document.getElementById(R.split(":")[0]);se&&setTimeout(()=>{let ce=se,he=-64;for(;ce!==document.body;)he+=ce.offsetTop,ce=ce.offsetParent;window.scrollTo({top:he})},1)}});let je=fe(M('a[href^="#__codelineno"]',f)).pipe(J(R=>h(R,"click").pipe(O(se=>se.preventDefault()),m(()=>R)))).pipe(W(i),te(qn),m(([R,se])=>{let he=+j(`[id="${R.hash.slice(1)}"]`).parentElement.id.split("-").pop();if(se===!1)return[he,he];{let Se=M(".hll",e).map(Ue=>+Ue.parentElement.id.split("-").pop());return[Math.min(he,...Se),Math.max(he,...Se)]}}));L(ee,je).subscribe(R=>{let se=`#__codelineno-${p}-`;R[0]===R[1]?se+=R[0]:se+=`${R[0]}:${R[1]}`,history.replaceState({},"",se),window.dispatchEvent(new HashChangeEvent("hashchange",{newURL:window.location.origin+window.location.pathname+se,oldURL:window.location.href}))})}if(Kn.default.isSupported()&&(e.closest(".copy")||V("content.code.copy")&&!e.closest(".no-copy"))){let d=Hn(a.id);s.push(d),V("content.tooltips")&&l.push(Xe(d,{viewport$}))}if(s.length){let d=Pn();d.append(...s),a.insertBefore(d,e)}return es(e).pipe(O(d=>n.next(d)),A(()=>n.complete()),m(d=>P({ref:e},d)),Ve(L(...l).pipe(W(i))))});return V("content.lazy")?mt(e).pipe(g(n=>n),Ee(1),b(()=>o)):o}function ts(e,{target$:t,print$:r}){let o=!0;return L(t.pipe(m(n=>n.closest("details:not([open])")),g(n=>e===n),m(()=>({action:"open",reveal:!0}))),r.pipe(g(n=>n||!o),O(()=>o=e.open),m(n=>({action:n?"open":"close"}))))}function Bn(e,t){return H(()=>{let r=new T;return r.subscribe(({action:o,reveal:n})=>{e.toggleAttribute("open",o==="open"),n&&e.scrollIntoView()}),ts(e,t).pipe(O(o=>r.next(o)),A(()=>r.complete()),m(o=>P({ref:e},o)))})}var Gn=0;function rs(e){let t=document.createElement("h3");t.innerHTML=e.innerHTML;let r=[t],o=e.nextElementSibling;for(;o&&!(o instanceof HTMLHeadingElement);)r.push(o),o=o.nextElementSibling;return r}function os(e,t){for(let r of M("[href], [src]",e))for(let o of["href","src"]){let n=r.getAttribute(o);if(n&&!/^(?:[a-z]+:)?\/\//i.test(n)){r[o]=new URL(r.getAttribute(o),t).toString();break}}for(let r of M("[name^=__], [for]",e))for(let o of["id","for","name"]){let n=r.getAttribute(o);n&&r.setAttribute(o,`${n}$preview_${Gn}`)}return Gn++,$(e)}function Jn(e,t){let{sitemap$:r}=t;if(!(e instanceof HTMLAnchorElement))return y;if(!(V("navigation.instant.preview")||e.hasAttribute("data-preview")))return y;e.removeAttribute("title");let o=z([Ye(e),it(e)]).pipe(m(([i,s])=>i||s),Y(),g(i=>i));return rt([r,o]).pipe(b(([i])=>{let s=new URL(e.href);return s.search=s.hash="",i.has(`${s}`)?$(s):y}),b(i=>xr(i).pipe(b(s=>os(s,i)))),b(i=>{let s=e.hash?`article [id="${e.hash.slice(1)}"]`:"article h1",a=ue(s,i);return typeof a=="undefined"?y:$(rs(a))})).pipe(b(i=>{let s=new F(a=>{let c=wr(...i);return a.next(c),document.body.append(c),()=>c.remove()});return Vt(e,P({content$:s},t))}))}var Xn=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:#0000}.flowchartTitleText{fill:var(--md-mermaid-label-fg-color)}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel p,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel p{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color)}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}g #flowchart-circleEnd,g #flowchart-circleStart,g #flowchart-crossEnd,g #flowchart-crossStart,g #flowchart-pointEnd,g #flowchart-pointStart{stroke:none}.classDiagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs marker.marker.composition.class path,defs marker.marker.dependency.class path,defs marker.marker.extension.class path{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs marker.marker.aggregation.class path{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}.statediagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel,.nodeLabel p{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}a .nodeLabel{text-decoration:underline}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}[id^=entity] path,[id^=entity] rect{fill:var(--md-default-bg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs .marker.oneOrMore.er *,defs .marker.onlyOne.er *,defs .marker.zeroOrMore.er *,defs .marker.zeroOrOne.er *{stroke:var(--md-mermaid-edge-color)!important}text:not([class]):last-child{fill:var(--md-mermaid-label-fg-color)}.actor{fill:var(--md-mermaid-sequence-actor-bg-color);stroke:var(--md-mermaid-sequence-actor-border-color)}text.actor>tspan{fill:var(--md-mermaid-sequence-actor-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-mermaid-sequence-actor-line-color)}.actor-man circle,.actor-man line{fill:var(--md-mermaid-sequence-actorman-bg-color);stroke:var(--md-mermaid-sequence-actorman-line-color)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-sequence-message-line-color)}.note{fill:var(--md-mermaid-sequence-note-bg-color);stroke:var(--md-mermaid-sequence-note-border-color)}.loopText,.loopText>tspan,.messageText,.noteText>tspan{stroke:none;font-family:var(--md-mermaid-font-family)!important}.messageText{fill:var(--md-mermaid-sequence-message-fg-color)}.loopText,.loopText>tspan{fill:var(--md-mermaid-sequence-loop-fg-color)}.noteText>tspan{fill:var(--md-mermaid-sequence-note-fg-color)}#arrowhead path{fill:var(--md-mermaid-sequence-message-line-color);stroke:none}.loopLine{fill:var(--md-mermaid-sequence-loop-bg-color);stroke:var(--md-mermaid-sequence-loop-border-color)}.labelBox{fill:var(--md-mermaid-sequence-label-bg-color);stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-sequence-label-fg-color);font-family:var(--md-mermaid-font-family)}.sequenceNumber{fill:var(--md-mermaid-sequence-number-fg-color)}rect.rect{fill:var(--md-mermaid-sequence-box-bg-color);stroke:none}rect.rect+text.text{fill:var(--md-mermaid-sequence-box-fg-color)}defs #sequencenumber{fill:var(--md-mermaid-sequence-number-bg-color)!important}";var so,is=0;function as(){return typeof mermaid=="undefined"||mermaid instanceof Element?_t("https://unpkg.com/mermaid@11/dist/mermaid.min.js"):$(void 0)}function Zn(e){return e.classList.remove("mermaid"),so||(so=as().pipe(O(()=>mermaid.initialize({startOnLoad:!1,themeCSS:Xn,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),m(()=>{}),Z(1))),so.subscribe(()=>go(null,null,function*(){e.classList.add("mermaid");let t=`__mermaid_${is++}`,r=x("div",{class:"mermaid"}),o=e.textContent,{svg:n,fn:i}=yield mermaid.render(t,o),s=r.attachShadow({mode:"closed"});s.innerHTML=n,e.replaceWith(r),i==null||i(s)})),so.pipe(m(()=>({ref:e})))}var ei=x("table");function ti(e){return e.replaceWith(ei),ei.replaceWith(Un(e)),$({ref:e})}function ss(e){let t=e.find(r=>r.checked)||e[0];return L(...e.map(r=>h(r,"change").pipe(m(()=>j(`label[for="${r.id}"]`))))).pipe(Q(j(`label[for="${t.id}"]`)),m(r=>({active:r})))}function ri(e,{viewport$:t,target$:r}){let o=j(".tabbed-labels",e),n=M(":scope > input",e),i=no("prev");e.append(i);let s=no("next");return e.append(s),H(()=>{let a=new T,c=a.pipe(oe(),ae(!0));z([a,Le(e),mt(e)]).pipe(W(c),$e(1,ye)).subscribe({next([{active:p},l]){let f=Be(p),{width:u}=de(p);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let d=gr(o);(f.xd.x+l.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),z([Ge(o),Le(o)]).pipe(W(c)).subscribe(([p,l])=>{let f=At(o);i.hidden=p.x<16,s.hidden=p.x>f.width-l.width-16}),L(h(i,"click").pipe(m(()=>-1)),h(s,"click").pipe(m(()=>1))).pipe(W(c)).subscribe(p=>{let{width:l}=de(o);o.scrollBy({left:l*p,behavior:"smooth"})}),r.pipe(W(c),g(p=>n.includes(p))).subscribe(p=>p.click()),o.classList.add("tabbed-labels--linked");for(let p of n){let l=j(`label[for="${p.id}"]`);l.replaceChildren(x("a",{href:`#${l.htmlFor}`,tabIndex:-1},...Array.from(l.childNodes))),h(l.firstElementChild,"click").pipe(W(c),g(f=>!(f.metaKey||f.ctrlKey)),O(f=>{f.preventDefault(),f.stopPropagation()})).subscribe(()=>{history.replaceState({},"",`#${l.htmlFor}`),l.click()})}return V("content.tabs.link")&&a.pipe(Ie(1),te(t)).subscribe(([{active:p},{offset:l}])=>{let f=p.innerText.trim();if(p.hasAttribute("data-md-switching"))p.removeAttribute("data-md-switching");else{let u=e.offsetTop-l.y;for(let v of M("[data-tabs]"))for(let S of M(":scope > input",v)){let X=j(`label[for="${S.id}"]`);if(X!==p&&X.innerText.trim()===f){X.setAttribute("data-md-switching",""),S.click();break}}window.scrollTo({top:e.offsetTop-u});let d=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...d])])}}),a.pipe(W(c)).subscribe(()=>{for(let p of M("audio, video",e))p.offsetWidth&&p.autoplay?p.play().catch(()=>{}):p.pause()}),ss(n).pipe(O(p=>a.next(p)),A(()=>a.complete()),m(p=>P({ref:e},p)))}).pipe(et(pe))}function oi(e,t){let{viewport$:r,target$:o,print$:n}=t;return L(...M(".annotate:not(.highlight)",e).map(i=>zn(i,{target$:o,print$:n})),...M("pre:not(.mermaid) > code",e).map(i=>Yn(i,{target$:o,print$:n})),...M("a",e).map(i=>Jn(i,t)),...M("pre.mermaid",e).map(i=>Zn(i)),...M("table:not([class])",e).map(i=>ti(i)),...M("details",e).map(i=>Bn(i,{target$:o,print$:n})),...M("[data-tabs]",e).map(i=>ri(i,{viewport$:r,target$:o})),...M("[title]:not([data-preview])",e).filter(()=>V("content.tooltips")).map(i=>Xe(i,{viewport$:r})),...M(".footnote-ref",e).filter(()=>V("content.footnote.tooltips")).map(i=>Vt(i,{content$:new F(s=>{let a=new URL(i.href).hash.slice(1),c=Array.from(document.getElementById(a).cloneNode(!0).children),p=wr(...c);return s.next(p),document.body.append(p),()=>p.remove()}),viewport$:r})))}function cs(e,{alert$:t}){return t.pipe(b(r=>L($(!0),$(!1).pipe(nt(2e3))).pipe(m(o=>({message:r,active:o})))))}function ni(e,t){let r=j(".md-typeset",e);return H(()=>{let o=new T;return o.subscribe(({message:n,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=n}),cs(e,t).pipe(O(n=>o.next(n)),A(()=>o.complete()),m(n=>P({ref:e},n)))})}var ps=0;function ls(e,t){document.body.append(e);let{width:r}=de(e);e.style.setProperty("--md-tooltip-width",`${r}px`),e.remove();let o=vr(t),n=typeof o!="undefined"?Ge(o):$({x:0,y:0}),i=L(Ye(t),it(t)).pipe(Y());return z([i,n]).pipe(m(([s,a])=>{let{x:c,y:p}=Be(t),l=de(t),f=t.closest("table");return f&&t.parentElement&&(c+=f.offsetLeft+t.parentElement.offsetLeft,p+=f.offsetTop+t.parentElement.offsetTop),{active:s,offset:{x:c-a.x+l.width/2-r/2,y:p-a.y+l.height+8}}}))}function ii(e){let t=e.title;if(!t.length)return y;let r=`__tooltip_${ps++}`,o=Dt(r,"inline"),n=j(".md-typeset",o);return n.innerHTML=t,H(()=>{let i=new T;return i.subscribe({next({offset:s}){o.style.setProperty("--md-tooltip-x",`${s.x}px`),o.style.setProperty("--md-tooltip-y",`${s.y}px`)},complete(){o.style.removeProperty("--md-tooltip-x"),o.style.removeProperty("--md-tooltip-y")}}),L(i.pipe(g(({active:s})=>s)),i.pipe(Ae(250),g(({active:s})=>!s))).subscribe({next({active:s}){s?(e.insertAdjacentElement("afterend",o),e.setAttribute("aria-describedby",r),e.removeAttribute("title")):(o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t))},complete(){o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t)}}),i.pipe($e(16,ye)).subscribe(({active:s})=>{o.classList.toggle("md-tooltip--active",s)}),i.pipe(gt(125,ye),g(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:s})=>s)).subscribe({next(s){s?o.style.setProperty("--md-tooltip-0",`${-s}px`):o.style.removeProperty("--md-tooltip-0")},complete(){o.style.removeProperty("--md-tooltip-0")}}),ls(o,e).pipe(O(s=>i.next(s)),A(()=>i.complete()),m(s=>P({ref:e},s)))}).pipe(et(pe))}function ms({viewport$:e}){if(!V("header.autohide"))return $(!1);let t=e.pipe(m(({offset:{y:n}})=>n),ot(2,1),m(([n,i])=>[nMath.abs(i-n.y)>100),m(([,[n]])=>n),Y()),o=Je("search");return z([e,o]).pipe(m(([{offset:n},i])=>n.y>400&&!i),Y(),b(n=>n?r:$(!1)),Q(!1))}function ai(e,t){return H(()=>z([Le(e),ms(t)])).pipe(m(([{height:r},o])=>({height:r,hidden:o})),Y((r,o)=>r.height===o.height&&r.hidden===o.hidden),Z(1))}function si(e,{header$:t,main$:r}){return H(()=>{let o=new T,n=o.pipe(oe(),ae(!0));o.pipe(ne("active"),Pe(t)).subscribe(([{active:s},{hidden:a}])=>{e.classList.toggle("md-header--shadow",s&&!a),e.hidden=a});let i=fe(M("[title]",e)).pipe(g(()=>V("content.tooltips")),J(s=>ii(s)));return r.subscribe(o),t.pipe(W(n),m(s=>P({ref:e},s)),Ve(i.pipe(W(n))))})}function fs(e,{viewport$:t,header$:r}){return Er(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:o}})=>{let{height:n}=de(e);return{active:n>0&&o>=n}}),ne("active"))}function ci(e,t){return H(()=>{let r=new T;r.subscribe({next({active:n}){e.classList.toggle("md-header__title--active",n)},complete(){e.classList.remove("md-header__title--active")}});let o=ue(".md-content h1");return typeof o=="undefined"?y:fs(o,t).pipe(O(n=>r.next(n)),A(()=>r.complete()),m(n=>P({ref:e},n)))})}function pi(e,{viewport$:t,header$:r}){let o=r.pipe(m(({height:i})=>i),Y()),n=o.pipe(b(()=>Le(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),ne("bottom"))));return z([o,n,t]).pipe(m(([i,{top:s,bottom:a},{offset:{y:c},size:{height:p}}])=>(p=Math.max(0,p-Math.max(0,s-c,i)-Math.max(0,p+c-a)),{offset:s-i,height:p,active:s-i<=c})),Y((i,s)=>i.offset===s.offset&&i.height===s.height&&i.active===s.active))}function us(e){let t=__md_get("__palette")||{index:e.findIndex(o=>matchMedia(o.getAttribute("data-md-color-media")).matches)},r=Math.max(0,Math.min(t.index,e.length-1));return $(...e).pipe(J(o=>h(o,"change").pipe(m(()=>o))),Q(e[r]),m(o=>({index:e.indexOf(o),color:{media:o.getAttribute("data-md-color-media"),scheme:o.getAttribute("data-md-color-scheme"),primary:o.getAttribute("data-md-color-primary"),accent:o.getAttribute("data-md-color-accent")}})),Z(1))}function li(e){let t=M("input",e),r=x("meta",{name:"theme-color"});document.head.appendChild(r);let o=x("meta",{name:"color-scheme"});document.head.appendChild(o);let n=Wt("(prefers-color-scheme: light)");return H(()=>{let i=new T;return i.subscribe(s=>{if(document.body.setAttribute("data-md-color-switching",""),s.color.media==="(prefers-color-scheme)"){let a=matchMedia("(prefers-color-scheme: light)"),c=document.querySelector(a.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");s.color.scheme=c.getAttribute("data-md-color-scheme"),s.color.primary=c.getAttribute("data-md-color-primary"),s.color.accent=c.getAttribute("data-md-color-accent")}for(let[a,c]of Object.entries(s.color))document.body.setAttribute(`data-md-color-${a}`,c);for(let a=0;as.key==="Enter"),te(i,(s,a)=>a)).subscribe(({index:s})=>{s=(s+1)%t.length,t[s].click(),t[s].focus()}),i.pipe(m(()=>{let s=Ce("header"),a=window.getComputedStyle(s);return o.content=a.colorScheme,a.backgroundColor.match(/\d+/g).map(c=>(+c).toString(16).padStart(2,"0")).join("")})).subscribe(s=>r.content=`#${s}`),i.pipe(xe(pe)).subscribe(()=>{document.body.removeAttribute("data-md-color-switching")}),us(t).pipe(W(n.pipe(Ie(1))),vt(),O(s=>i.next(s)),A(()=>i.complete()),m(s=>P({ref:e},s)))})}function mi(e,{progress$:t}){return H(()=>{let r=new T;return r.subscribe(({value:o})=>{e.style.setProperty("--md-progress-value",`${o}`)}),t.pipe(O(o=>r.next({value:o})),A(()=>r.complete()),m(o=>({ref:e,value:o})))})}function fi(e,t){return e.protocol=t.protocol,e.hostname=t.hostname,e}function ds(e,t){let r=new Map;for(let o of M("url",e)){let n=j("loc",o),i=[fi(new URL(n.textContent),t)];r.set(`${i[0]}`,i);for(let s of M("[rel=alternate]",o)){let a=s.getAttribute("href");a!=null&&i.push(fi(new URL(a),t))}}return r}function kt(e){return En(new URL("sitemap.xml",e)).pipe(m(t=>ds(t,new URL(e))),ve(()=>$(new Map)),le())}function ui({document$:e}){let t=new Map;e.pipe(b(()=>M("link[rel=alternate]")),m(r=>new URL(r.href)),g(r=>!t.has(r.toString())),J(r=>kt(r).pipe(m(o=>[r,o]),ve(()=>y)))).subscribe(([r,o])=>{t.set(r.toString().replace(/\/$/,""),o)}),h(document.body,"click").pipe(g(r=>!r.metaKey&&!r.ctrlKey),b(r=>{if(r.target instanceof Element){let o=r.target.closest("a");if(o&&!o.target){let n=[...t].find(([f])=>o.href.startsWith(`${f}/`));if(typeof n=="undefined")return y;let[i,s]=n,a=we();if(a.href.startsWith(i))return y;let c=Te(),p=a.href.replace(c.base,"");p=`${i}/${p}`;let l=s.has(p.split("#")[0])?new URL(p,c.base):new URL(i);return r.preventDefault(),$(l)}}return y})).subscribe(r=>st(r,!0))}var co=$t(ao());function hs(e){e.setAttribute("data-md-copying","");let t=e.closest("[data-copy]"),r=t?t.getAttribute("data-copy"):e.innerText;return e.removeAttribute("data-md-copying"),r.trimEnd()}function di({alert$:e}){co.default.isSupported()&&new F(t=>{new co.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||hs(j(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(O(t=>{t.trigger.focus()}),m(()=>Me("clipboard.copied"))).subscribe(e)}function hi(e,t){if(!(e.target instanceof Element))return y;let r=e.target.closest("a");if(r===null)return y;if(r.target||e.metaKey||e.ctrlKey)return y;let o=new URL(r.href);return o.search=o.hash="",t.has(`${o}`)?(e.preventDefault(),$(r)):y}function bi(e){let t=new Map;for(let r of M(":scope > *",e.head))t.set(r.outerHTML,r);return t}function vi(e){for(let t of M("[href], [src]",e))for(let r of["href","src"]){let o=t.getAttribute(r);if(o&&!/^(?:[a-z]+:)?\/\//i.test(o)){t[r]=t[r];break}}return $(e)}function bs(e){for(let o of["[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...V("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let n=ue(o),i=ue(o,e);typeof n!="undefined"&&typeof i!="undefined"&&n.replaceWith(i)}let t=bi(document);for(let[o,n]of bi(e))t.has(o)?t.delete(o):document.head.appendChild(n);for(let o of t.values()){let n=o.getAttribute("name");n!=="theme-color"&&n!=="color-scheme"&&o.remove()}let r=Ce("container");return Ke(M("script",r)).pipe(b(o=>{let n=e.createElement("script");if(o.src){for(let i of o.getAttributeNames())n.setAttribute(i,o.getAttribute(i));return o.replaceWith(n),new F(i=>{n.onload=()=>i.complete()})}else return n.textContent=o.textContent,o.replaceWith(n),y}),oe(),ae(document))}function gi({sitemap$:e,location$:t,viewport$:r,progress$:o}){if(location.protocol==="file:")return y;$(document).subscribe(vi);let n=h(document.body,"click").pipe(Pe(e),b(([a,c])=>hi(a,c)),m(({href:a})=>new URL(a)),le()),i=h(window,"popstate").pipe(m(we),le());n.pipe(te(r)).subscribe(([a,{offset:c}])=>{history.replaceState(c,""),history.pushState(null,"",a)}),L(n,i).subscribe(t);let s=t.pipe(ne("pathname"),b(a=>xr(a,{progress$:o}).pipe(ve(()=>(st(a,!0),y)))),b(vi),b(bs),le());return L(s.pipe(te(t,(a,c)=>c)),s.pipe(b(()=>t),ne("hash")),t.pipe(Y((a,c)=>a.pathname===c.pathname&&a.hash===c.hash),b(()=>n),O(()=>history.back()))).subscribe(a=>{var c,p;history.state!==null||!a.hash?window.scrollTo(0,(p=(c=history.state)==null?void 0:c.y)!=null?p:0):(history.scrollRestoration="auto",gn(a.hash),history.scrollRestoration="manual")}),t.subscribe(()=>{history.scrollRestoration="manual"}),h(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}),r.pipe(ne("offset"),Ae(100)).subscribe(({offset:a})=>{history.replaceState(a,"")}),V("navigation.instant.prefetch")&&L(h(document.body,"mousemove"),h(document.body,"focusin")).pipe(Pe(e),b(([a,c])=>hi(a,c)),Ae(25),Qr(({href:a})=>a),hr(a=>{let c=document.createElement("link");return c.rel="prefetch",c.href=a.toString(),document.head.appendChild(c),h(c,"load").pipe(m(()=>c),Ee(1))})).subscribe(a=>a.remove()),s}var yi=$t(ro());function xi(e){let t=e.separator.split("|").map(n=>n.replace(/(\(\?[!=<][^)]+\))/g,"").length===0?"\uFFFD":n).join("|"),r=new RegExp(t,"img"),o=(n,i,s)=>`${i}${s}`;return n=>{n=n.replace(/[\s*+\-:~^]+/g," ").replace(/&/g,"&").trim();let i=new RegExp(`(^|${e.separator}|)(${n.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return s=>(0,yi.default)(s).replace(i,o).replace(/<\/mark>(\s+)]*>/img,"$1")}}function zt(e){return e.type===1}function Sr(e){return e.type===3}function Ei(e,t){let r=Mn(e);return L($(location.protocol!=="file:"),Je("search")).pipe(Re(o=>o),b(()=>t)).subscribe(({config:o,docs:n})=>r.next({type:0,data:{config:o,docs:n,options:{suggest:V("search.suggest")}}})),r}function wi(e){var l;let{selectedVersionSitemap:t,selectedVersionBaseURL:r,currentLocation:o,currentBaseURL:n}=e,i=(l=po(n))==null?void 0:l.pathname;if(i===void 0)return;let s=ys(o.pathname,i);if(s===void 0)return;let a=Es(t.keys());if(!t.has(a))return;let c=po(s,a);if(!c||!t.has(c.href))return;let p=po(s,r);if(p)return p.hash=o.hash,p.search=o.search,p}function po(e,t){try{return new URL(e,t)}catch(r){return}}function ys(e,t){if(e.startsWith(t))return e.slice(t.length)}function xs(e,t){let r=Math.min(e.length,t.length),o;for(o=0;oy)),o=r.pipe(m(n=>{let[,i]=t.base.match(/([^/]+)\/?$/);return n.find(({version:s,aliases:a})=>s===i||a.includes(i))||n[0]}));r.pipe(m(n=>new Map(n.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),b(n=>h(document.body,"click").pipe(g(i=>!i.metaKey&&!i.ctrlKey),te(o),b(([i,s])=>{if(i.target instanceof Element){let a=i.target.closest("a");if(a&&!a.target&&n.has(a.href)){let c=a.href;return!i.target.closest(".md-version")&&n.get(c)===s?y:(i.preventDefault(),$(new URL(c)))}}return y}),b(i=>kt(i).pipe(m(s=>{var a;return(a=wi({selectedVersionSitemap:s,selectedVersionBaseURL:i,currentLocation:we(),currentBaseURL:t.base}))!=null?a:i})))))).subscribe(n=>st(n,!0)),z([r,o]).subscribe(([n,i])=>{j(".md-header__topic").appendChild(Wn(n,i))}),e.pipe(b(()=>o)).subscribe(n=>{var a;let i=new URL(t.base),s=__md_get("__outdated",sessionStorage,i);if(s===null){s=!0;let c=((a=t.version)==null?void 0:a.default)||"latest";Array.isArray(c)||(c=[c]);e:for(let p of c)for(let l of n.aliases.concat(n.version))if(new RegExp(p,"i").test(l)){s=!1;break e}__md_set("__outdated",s,sessionStorage,i)}if(s)for(let c of me("outdated"))c.hidden=!1})}function ws(e,{worker$:t}){let{searchParams:r}=we();r.has("q")&&(at("search",!0),e.value=r.get("q"),e.focus(),Je("search").pipe(Re(i=>!i)).subscribe(()=>{let i=we();i.searchParams.delete("q"),history.replaceState({},"",`${i}`)}));let o=Ye(e),n=L(t.pipe(Re(zt)),h(e,"keyup"),o).pipe(m(()=>e.value),Y());return z([n,o]).pipe(m(([i,s])=>({value:i,focus:s})),Z(1))}function Si(e,{worker$:t}){let r=new T,o=r.pipe(oe(),ae(!0));z([t.pipe(Re(zt)),r],(i,s)=>s).pipe(ne("value")).subscribe(({value:i})=>t.next({type:2,data:i})),r.pipe(ne("focus")).subscribe(({focus:i})=>{i&&at("search",i)}),h(e.form,"reset").pipe(W(o)).subscribe(()=>e.focus());let n=j("header [for=__search]");return h(n,"click").subscribe(()=>e.focus()),ws(e,{worker$:t}).pipe(O(i=>r.next(i)),A(()=>r.complete()),m(i=>P({ref:e},i)),Z(1))}function Oi(e,{worker$:t,query$:r}){let o=new T,n=un(e.parentElement).pipe(g(Boolean)),i=e.parentElement,s=j(":scope > :first-child",e),a=j(":scope > :last-child",e);Je("search").subscribe(l=>{a.setAttribute("role",l?"list":"presentation"),a.hidden=!l}),o.pipe(te(r),Gr(t.pipe(Re(zt)))).subscribe(([{items:l},{value:f}])=>{switch(l.length){case 0:s.textContent=f.length?Me("search.result.none"):Me("search.result.placeholder");break;case 1:s.textContent=Me("search.result.one");break;default:let u=br(l.length);s.textContent=Me("search.result.other",u)}});let c=o.pipe(O(()=>a.innerHTML=""),b(({items:l})=>L($(...l.slice(0,10)),$(...l.slice(10)).pipe(ot(4),Xr(n),b(([f])=>f)))),m(Fn),le());return c.subscribe(l=>a.appendChild(l)),c.pipe(J(l=>{let f=ue("details",l);return typeof f=="undefined"?y:h(f,"toggle").pipe(W(o),m(()=>f))})).subscribe(l=>{l.open===!1&&l.offsetTop<=i.scrollTop&&i.scrollTo({top:l.offsetTop})}),t.pipe(g(Sr),m(({data:l})=>l)).pipe(O(l=>o.next(l)),A(()=>o.complete()),m(l=>P({ref:e},l)))}function Ts(e,{query$:t}){return t.pipe(m(({value:r})=>{let o=we();return o.hash="",r=r.replace(/\s+/g,"+").replace(/&/g,"%26").replace(/=/g,"%3D"),o.search=`q=${r}`,{url:o}}))}function Li(e,t){let r=new T,o=r.pipe(oe(),ae(!0));return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),h(e,"click").pipe(W(o)).subscribe(n=>n.preventDefault()),Ts(e,t).pipe(O(n=>r.next(n)),A(()=>r.complete()),m(n=>P({ref:e},n)))}function Mi(e,{worker$:t,keyboard$:r}){let o=new T,n=Ce("search-query"),i=L(h(n,"keydown"),h(n,"focus")).pipe(xe(pe),m(()=>n.value),Y());return o.pipe(Pe(i),m(([{suggest:a},c])=>{let p=c.split(/([\s-]+)/);if(a!=null&&a.length&&p[p.length-1]){let l=a[a.length-1];l.startsWith(p[p.length-1])&&(p[p.length-1]=l)}else p.length=0;return p})).subscribe(a=>e.innerHTML=a.join("").replace(/\s/g," ")),r.pipe(g(({mode:a})=>a==="search")).subscribe(a=>{a.type==="ArrowRight"&&e.innerText.length&&n.selectionStart===n.value.length&&(n.value=e.innerText)}),t.pipe(g(Sr),m(({data:a})=>a)).pipe(O(a=>o.next(a)),A(()=>o.complete()),m(()=>({ref:e})))}function _i(e,{index$:t,keyboard$:r}){let o=Te();try{let n=Ei(o.search,t),i=Ce("search-query",e),s=Ce("search-result",e);h(e,"click").pipe(g(({target:c})=>c instanceof Element&&!!c.closest("a"))).subscribe(()=>at("search",!1)),r.pipe(g(({mode:c})=>c==="search")).subscribe(c=>{let p=Ne();switch(c.type){case"Enter":if(p===i){let l=new Map;for(let f of M(":first-child [href]",s)){let u=f.firstElementChild;l.set(f,parseFloat(u.getAttribute("data-md-score")))}if(l.size){let[[f]]=[...l].sort(([,u],[,d])=>d-u);f.click()}c.claim()}break;case"Escape":case"Tab":at("search",!1),i.blur();break;case"ArrowUp":case"ArrowDown":if(typeof p=="undefined")i.focus();else{let l=[i,...M(":not(details) > [href], summary, details[open] [href]",s)],f=Math.max(0,(Math.max(0,l.indexOf(p))+l.length+(c.type==="ArrowUp"?-1:1))%l.length);l[f].focus()}c.claim();break;default:i!==Ne()&&i.focus()}}),r.pipe(g(({mode:c})=>c==="global")).subscribe(c=>{switch(c.type){case"f":case"s":case"/":i.focus(),i.select(),c.claim();break}});let a=Si(i,{worker$:n});return L(a,Oi(s,{worker$:n,query$:a})).pipe(Ve(...me("search-share",e).map(c=>Li(c,{query$:a})),...me("search-suggest",e).map(c=>Mi(c,{worker$:n,keyboard$:r}))))}catch(n){return e.hidden=!0,tt}}function Ai(e,{index$:t,location$:r}){return z([t,r.pipe(Q(we()),g(o=>!!o.searchParams.get("h")))]).pipe(m(([o,n])=>xi(o.config)(n.searchParams.get("h"))),m(o=>{var s;let n=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let a=i.nextNode();a;a=i.nextNode())if((s=a.parentElement)!=null&&s.offsetHeight){let c=a.textContent,p=o(c);p.length>c.length&&n.set(a,p)}for(let[a,c]of n){let{childNodes:p}=x("span",null,c);a.replaceWith(...Array.from(p))}return{ref:e,nodes:n}}))}function Ss(e,{viewport$:t,main$:r}){let o=e.closest(".md-grid"),n=o.offsetTop-o.parentElement.offsetTop;return z([r,t]).pipe(m(([{offset:i,height:s},{offset:{y:a}}])=>(s=s+Math.min(n,Math.max(0,a-i))-n,{height:s,locked:a>=i+n})),Y((i,s)=>i.height===s.height&&i.locked===s.locked))}function lo(e,o){var n=o,{header$:t}=n,r=vo(n,["header$"]);let i=j(".md-sidebar__scrollwrap",e),{y:s}=Be(i);return H(()=>{let a=new T,c=a.pipe(oe(),ae(!0)),p=a.pipe($e(0,ye));return p.pipe(te(t)).subscribe({next([{height:l},{height:f}]){i.style.height=`${l-2*s}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),p.pipe(Re()).subscribe(()=>{for(let l of M(".md-nav__link--active[href]",e)){if(!l.clientHeight)continue;let f=l.closest(".md-sidebar__scrollwrap");if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=de(f);f.scrollTo({top:u-d/2})}}}),fe(M("label[tabindex]",e)).pipe(J(l=>h(l,"click").pipe(xe(pe),m(()=>l),W(c)))).subscribe(l=>{let f=j(`[id="${l.htmlFor}"]`);j(`[aria-labelledby="${l.id}"]`).setAttribute("aria-expanded",`${f.checked}`)}),V("content.tooltips")&&fe(M("abbr[title]",e)).pipe(J(l=>Xe(l,{viewport$})),W(c)).subscribe(),Ss(e,r).pipe(O(l=>a.next(l)),A(()=>a.complete()),m(l=>P({ref:e},l)))})}function Ci(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return rt(ze(`${r}/releases/latest`).pipe(ve(()=>y),m(o=>({version:o.tag_name})),Qe({})),ze(r).pipe(ve(()=>y),m(o=>({stars:o.stargazers_count,forks:o.forks_count})),Qe({}))).pipe(m(([o,n])=>P(P({},o),n)))}else{let r=`https://api.github.com/users/${e}`;return ze(r).pipe(m(o=>({repositories:o.public_repos})),Qe({}))}}function ki(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return rt(ze(`${r}/releases/permalink/latest`).pipe(ve(()=>y),m(({tag_name:o})=>({version:o})),Qe({})),ze(r).pipe(ve(()=>y),m(({star_count:o,forks_count:n})=>({stars:o,forks:n})),Qe({}))).pipe(m(([o,n])=>P(P({},o),n)))}function Hi(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,o]=t;return Ci(r,o)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,o]=t;return ki(r,o)}return y}var Os;function Ls(e){return Os||(Os=H(()=>{let t=__md_get("__source",sessionStorage);if(t)return $(t);if(me("consent").length){let o=__md_get("__consent");if(!(o&&o.github))return y}return Hi(e.href).pipe(O(o=>__md_set("__source",o,sessionStorage)))}).pipe(ve(()=>y),g(t=>Object.keys(t).length>0),m(t=>({facts:t})),Z(1)))}function $i(e){let t=j(":scope > :last-child",e);return H(()=>{let r=new T;return r.subscribe(({facts:o})=>{t.appendChild(jn(o)),t.classList.add("md-source__repository--active")}),Ls(e).pipe(O(o=>r.next(o)),A(()=>r.complete()),m(o=>P({ref:e},o)))})}function Ms(e,{viewport$:t,header$:r}){return Le(document.body).pipe(b(()=>Er(e,{header$:r,viewport$:t})),m(({offset:{y:o}})=>({hidden:o>=10})),ne("hidden"))}function Pi(e,t){return H(()=>{let r=new T;return r.subscribe({next({hidden:o}){e.hidden=o},complete(){e.hidden=!1}}),(V("navigation.tabs.sticky")?$({hidden:!1}):Ms(e,t)).pipe(O(o=>r.next(o)),A(()=>r.complete()),m(o=>P({ref:e},o)))})}function _s(e,{viewport$:t,header$:r}){let o=new Map,n=M(".md-nav__link",e);for(let a of n){let c=decodeURIComponent(a.hash.substring(1)),p=ue(`[id="${c}"]`);typeof p!="undefined"&&o.set(a,p)}let i=r.pipe(ne("height"),m(({height:a})=>{let c=Ce("main"),p=j(":scope > :first-child",c);return a+.8*(p.offsetTop-c.offsetTop)}),le());return Le(document.body).pipe(ne("height"),b(a=>H(()=>{let c=[];return $([...o].reduce((p,[l,f])=>{for(;c.length&&o.get(c[c.length-1]).tagName>=f.tagName;)c.pop();let u=f.offsetTop;for(;!u&&f.parentElement;)f=f.parentElement,u=f.offsetTop;let d=f.offsetParent;for(;d;d=d.offsetParent)u+=d.offsetTop;return p.set([...c=[...c,l]].reverse(),u)},new Map))}).pipe(m(c=>new Map([...c].sort(([,p],[,l])=>p-l))),Pe(i),b(([c,p])=>t.pipe(Ut(([l,f],{offset:{y:u},size:d})=>{let v=u+d.height>=Math.floor(a.height);for(;f.length;){let[,S]=f[0];if(S-p=u&&!v)f=[l.pop(),...f];else break}return[l,f]},[[],[...c]]),Y((l,f)=>l[0]===f[0]&&l[1]===f[1])))))).pipe(m(([a,c])=>({prev:a.map(([p])=>p),next:c.map(([p])=>p)})),Q({prev:[],next:[]}),ot(2,1),m(([a,c])=>a.prev.length{let i=new T,s=i.pipe(oe(),ae(!0));if(i.subscribe(({prev:a,next:c})=>{for(let[p]of c)p.classList.remove("md-nav__link--passed"),p.classList.remove("md-nav__link--active");for(let[p,[l]]of a.entries())l.classList.add("md-nav__link--passed"),l.classList.toggle("md-nav__link--active",p===a.length-1)}),V("toc.follow")){let a=L(t.pipe(Ae(1),m(()=>{})),t.pipe(Ae(250),m(()=>"smooth")));i.pipe(g(({prev:c})=>c.length>0),Pe(o.pipe(xe(pe))),te(a)).subscribe(([[{prev:c}],p])=>{let[l]=c[c.length-1];if(l.offsetHeight){let f=vr(l);if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=de(f);f.scrollTo({top:u-d/2,behavior:p})}}})}return V("navigation.tracking")&&t.pipe(W(s),ne("offset"),Ae(250),Ie(1),W(n.pipe(Ie(1))),vt({delay:250}),te(i)).subscribe(([,{prev:a}])=>{let c=we(),p=a[a.length-1];if(p&&p.length){let[l]=p,{hash:f}=new URL(l.href);c.hash!==f&&(c.hash=f,history.replaceState({},"",`${c}`))}else c.hash="",history.replaceState({},"",`${c}`)}),_s(e,{viewport$:t,header$:r}).pipe(O(a=>i.next(a)),A(()=>i.complete()),m(a=>P({ref:e},a)))})}function As(e,{viewport$:t,main$:r,target$:o}){let n=t.pipe(m(({offset:{y:s}})=>s),ot(2,1),m(([s,a])=>s>a&&a>0),Y()),i=r.pipe(m(({active:s})=>s));return z([i,n]).pipe(m(([s,a])=>!(s&&a)),Y(),W(o.pipe(Ie(1))),ae(!0),vt({delay:250}),m(s=>({hidden:s})))}function Ii(e,{viewport$:t,header$:r,main$:o,target$:n}){let i=new T,s=i.pipe(oe(),ae(!0));return i.subscribe({next({hidden:a}){e.hidden=a,a?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(W(s),ne("height")).subscribe(({height:a})=>{e.style.top=`${a+16}px`}),h(e,"click").subscribe(a=>{a.preventDefault(),window.scrollTo({top:0})}),As(e,{viewport$:t,main$:o,target$:n}).pipe(O(a=>i.next(a)),A(()=>i.complete()),m(a=>P({ref:e},a)))}function Fi({document$:e,viewport$:t}){e.pipe(b(()=>M(".md-ellipsis")),J(r=>mt(r).pipe(W(e.pipe(Ie(1))),g(o=>o),m(()=>r),Ee(1))),g(r=>r.offsetWidth{let o=r.innerText,n=r.closest("a")||r;return n.title=o,V("content.tooltips")?Xe(n,{viewport$:t}).pipe(W(e.pipe(Ie(1))),A(()=>n.removeAttribute("title"))):y})).subscribe(),V("content.tooltips")&&e.pipe(b(()=>M(".md-status")),J(r=>Xe(r,{viewport$:t}))).subscribe()}function ji({document$:e,tablet$:t}){e.pipe(b(()=>M(".md-toggle--indeterminate")),O(r=>{r.indeterminate=!0,r.checked=!1}),J(r=>h(r,"change").pipe(Jr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),te(t)).subscribe(([r,o])=>{r.classList.remove("md-toggle--indeterminate"),o&&(r.checked=!1)})}function Cs(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function Ui({document$:e}){e.pipe(b(()=>M("[data-md-scrollfix]")),O(t=>t.removeAttribute("data-md-scrollfix")),g(Cs),J(t=>h(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function Wi({viewport$:e,tablet$:t}){z([Je("search"),t]).pipe(m(([r,o])=>r&&!o),b(r=>$(r).pipe(nt(r?400:100))),te(e)).subscribe(([r,{offset:{y:o}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${o}px`;else{let n=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",n&&window.scrollTo(0,n)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let o=e[r];typeof o=="string"?o=document.createTextNode(o):o.parentNode&&o.parentNode.removeChild(o),r?t.insertBefore(this.previousSibling,o):t.replaceChild(o,this)}}}));function ks(){return location.protocol==="file:"?_t(`${new URL("search/search_index.js",Or.base)}`).pipe(m(()=>__index),Z(1)):ze(new URL("search/search_index.json",Or.base))}document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var ct=an(),Kt=bn(),Ht=yn(Kt),mo=hn(),ke=Ln(),Lr=Wt("(min-width: 60em)"),Vi=Wt("(min-width: 76.25em)"),Ni=xn(),Or=Te(),zi=document.forms.namedItem("search")?ks():tt,fo=new T;di({alert$:fo});ui({document$:ct});var uo=new T,qi=kt(Or.base);V("navigation.instant")&&gi({sitemap$:qi,location$:Kt,viewport$:ke,progress$:uo}).subscribe(ct);var Di;((Di=Or.version)==null?void 0:Di.provider)==="mike"&&Ti({document$:ct});L(Kt,Ht).pipe(nt(125)).subscribe(()=>{at("drawer",!1),at("search",!1)});mo.pipe(g(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=ue("link[rel=prev]");typeof t!="undefined"&&st(t);break;case"n":case".":let r=ue("link[rel=next]");typeof r!="undefined"&&st(r);break;case"Enter":let o=Ne();o instanceof HTMLLabelElement&&o.click()}});Fi({viewport$:ke,document$:ct});ji({document$:ct,tablet$:Lr});Ui({document$:ct});Wi({viewport$:ke,tablet$:Lr});var ft=ai(Ce("header"),{viewport$:ke}),qt=ct.pipe(m(()=>Ce("main")),b(e=>pi(e,{viewport$:ke,header$:ft})),Z(1)),Hs=L(...me("consent").map(e=>An(e,{target$:Ht})),...me("dialog").map(e=>ni(e,{alert$:fo})),...me("palette").map(e=>li(e)),...me("progress").map(e=>mi(e,{progress$:uo})),...me("search").map(e=>_i(e,{index$:zi,keyboard$:mo})),...me("source").map(e=>$i(e))),$s=H(()=>L(...me("announce").map(e=>_n(e)),...me("content").map(e=>oi(e,{sitemap$:qi,viewport$:ke,target$:Ht,print$:Ni})),...me("content").map(e=>V("search.highlight")?Ai(e,{index$:zi,location$:Kt}):y),...me("header").map(e=>si(e,{viewport$:ke,header$:ft,main$:qt})),...me("header-title").map(e=>ci(e,{viewport$:ke,header$:ft})),...me("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?eo(Vi,()=>lo(e,{viewport$:ke,header$:ft,main$:qt})):eo(Lr,()=>lo(e,{viewport$:ke,header$:ft,main$:qt}))),...me("tabs").map(e=>Pi(e,{viewport$:ke,header$:ft})),...me("toc").map(e=>Ri(e,{viewport$:ke,header$:ft,main$:qt,target$:Ht})),...me("top").map(e=>Ii(e,{viewport$:ke,header$:ft,main$:qt,target$:Ht})))),Ki=ct.pipe(b(()=>$s),Ve(Hs),Z(1));Ki.subscribe();window.document$=ct;window.location$=Kt;window.target$=Ht;window.keyboard$=mo;window.viewport$=ke;window.tablet$=Lr;window.screen$=Vi;window.print$=Ni;window.alert$=fo;window.progress$=uo;window.component$=Ki;})(); +//# sourceMappingURL=bundle.79ae519e.min.js.map + diff --git a/assets/javascripts/bundle.79ae519e.min.js.map b/assets/javascripts/bundle.79ae519e.min.js.map new file mode 100644 index 0000000..5cf0289 --- /dev/null +++ b/assets/javascripts/bundle.79ae519e.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["node_modules/focus-visible/dist/focus-visible.js", "node_modules/escape-html/index.js", "node_modules/clipboard/dist/clipboard.js", "src/templates/assets/javascripts/bundle.ts", "node_modules/tslib/tslib.es6.mjs", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/BehaviorSubject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/QueueAction.ts", "node_modules/rxjs/src/internal/scheduler/QueueScheduler.ts", "node_modules/rxjs/src/internal/scheduler/queue.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/EmptyError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/fromEventPattern.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/catchError.ts", "node_modules/rxjs/src/internal/operators/scanInternals.ts", "node_modules/rxjs/src/internal/operators/combineLatest.ts", "node_modules/rxjs/src/internal/operators/combineLatestWith.ts", "node_modules/rxjs/src/internal/operators/debounce.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinct.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/throwIfEmpty.ts", "node_modules/rxjs/src/internal/operators/endWith.ts", "node_modules/rxjs/src/internal/operators/exhaustMap.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/first.ts", "node_modules/rxjs/src/internal/operators/takeLast.ts", "node_modules/rxjs/src/internal/operators/merge.ts", "node_modules/rxjs/src/internal/operators/mergeWith.ts", "node_modules/rxjs/src/internal/operators/repeat.ts", "node_modules/rxjs/src/internal/operators/scan.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/skip.ts", "node_modules/rxjs/src/internal/operators/skipUntil.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/takeUntil.ts", "node_modules/rxjs/src/internal/operators/takeWhile.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/throttle.ts", "node_modules/rxjs/src/internal/operators/throttleTime.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "node_modules/rxjs/src/internal/operators/zip.ts", "node_modules/rxjs/src/internal/operators/zipWith.ts", "src/templates/assets/javascripts/browser/document/index.ts", "src/templates/assets/javascripts/browser/element/_/index.ts", "src/templates/assets/javascripts/browser/element/focus/index.ts", "src/templates/assets/javascripts/browser/element/hover/index.ts", "src/templates/assets/javascripts/utilities/h/index.ts", "src/templates/assets/javascripts/utilities/round/index.ts", "src/templates/assets/javascripts/browser/script/index.ts", "src/templates/assets/javascripts/browser/element/size/_/index.ts", "src/templates/assets/javascripts/browser/element/size/content/index.ts", "src/templates/assets/javascripts/browser/element/offset/_/index.ts", "src/templates/assets/javascripts/browser/element/offset/content/index.ts", "src/templates/assets/javascripts/browser/element/visibility/index.ts", "src/templates/assets/javascripts/browser/toggle/index.ts", "src/templates/assets/javascripts/browser/keyboard/index.ts", "src/templates/assets/javascripts/browser/location/_/index.ts", "src/templates/assets/javascripts/browser/location/hash/index.ts", "src/templates/assets/javascripts/browser/media/index.ts", "src/templates/assets/javascripts/browser/request/index.ts", "src/templates/assets/javascripts/browser/viewport/offset/index.ts", "src/templates/assets/javascripts/browser/viewport/size/index.ts", "src/templates/assets/javascripts/browser/viewport/_/index.ts", "src/templates/assets/javascripts/browser/viewport/at/index.ts", "src/templates/assets/javascripts/browser/worker/index.ts", "src/templates/assets/javascripts/_/index.ts", "src/templates/assets/javascripts/components/_/index.ts", "src/templates/assets/javascripts/components/announce/index.ts", "src/templates/assets/javascripts/components/consent/index.ts", "src/templates/assets/javascripts/templates/tooltip/index.tsx", "src/templates/assets/javascripts/templates/annotation/index.tsx", "src/templates/assets/javascripts/templates/clipboard/index.tsx", "src/templates/assets/javascripts/templates/search/index.tsx", "src/templates/assets/javascripts/templates/source/index.tsx", "src/templates/assets/javascripts/templates/tabbed/index.tsx", "src/templates/assets/javascripts/templates/table/index.tsx", "src/templates/assets/javascripts/templates/version/index.tsx", "src/templates/assets/javascripts/components/tooltip2/index.ts", "src/templates/assets/javascripts/components/content/annotation/_/index.ts", "src/templates/assets/javascripts/components/content/annotation/list/index.ts", "src/templates/assets/javascripts/components/content/annotation/block/index.ts", "src/templates/assets/javascripts/components/content/code/_/index.ts", "src/templates/assets/javascripts/components/content/details/index.ts", "src/templates/assets/javascripts/components/content/link/index.ts", "src/templates/assets/javascripts/components/content/mermaid/index.css", "src/templates/assets/javascripts/components/content/mermaid/index.ts", "src/templates/assets/javascripts/components/content/table/index.ts", "src/templates/assets/javascripts/components/content/tabs/index.ts", "src/templates/assets/javascripts/components/content/_/index.ts", "src/templates/assets/javascripts/components/dialog/index.ts", "src/templates/assets/javascripts/components/tooltip/index.ts", "src/templates/assets/javascripts/components/header/_/index.ts", "src/templates/assets/javascripts/components/header/title/index.ts", "src/templates/assets/javascripts/components/main/index.ts", "src/templates/assets/javascripts/components/palette/index.ts", "src/templates/assets/javascripts/components/progress/index.ts", "src/templates/assets/javascripts/integrations/sitemap/index.ts", "src/templates/assets/javascripts/integrations/alternate/index.ts", "src/templates/assets/javascripts/integrations/clipboard/index.ts", "src/templates/assets/javascripts/integrations/instant/index.ts", "src/templates/assets/javascripts/integrations/search/highlighter/index.ts", "src/templates/assets/javascripts/integrations/search/worker/message/index.ts", "src/templates/assets/javascripts/integrations/search/worker/_/index.ts", "src/templates/assets/javascripts/integrations/version/findurl/index.ts", "src/templates/assets/javascripts/integrations/version/index.ts", "src/templates/assets/javascripts/components/search/query/index.ts", "src/templates/assets/javascripts/components/search/result/index.ts", "src/templates/assets/javascripts/components/search/share/index.ts", "src/templates/assets/javascripts/components/search/suggest/index.ts", "src/templates/assets/javascripts/components/search/_/index.ts", "src/templates/assets/javascripts/components/search/highlight/index.ts", "src/templates/assets/javascripts/components/sidebar/index.ts", "src/templates/assets/javascripts/components/source/facts/github/index.ts", "src/templates/assets/javascripts/components/source/facts/gitlab/index.ts", "src/templates/assets/javascripts/components/source/facts/_/index.ts", "src/templates/assets/javascripts/components/source/_/index.ts", "src/templates/assets/javascripts/components/tabs/index.ts", "src/templates/assets/javascripts/components/toc/index.ts", "src/templates/assets/javascripts/components/top/index.ts", "src/templates/assets/javascripts/patches/ellipsis/index.ts", "src/templates/assets/javascripts/patches/indeterminate/index.ts", "src/templates/assets/javascripts/patches/scrollfix/index.ts", "src/templates/assets/javascripts/patches/scrolllock/index.ts", "src/templates/assets/javascripts/polyfills/index.ts"], + "sourcesContent": ["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. \u00AF\\_(\u30C4)_/\u00AF\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "/*\n * Copyright (c) 2016-2025 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"focus-visible\"\n\nimport {\n EMPTY,\n NEVER,\n Observable,\n Subject,\n defer,\n delay,\n filter,\n map,\n merge,\n mergeWith,\n shareReplay,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"./_\"\nimport {\n at,\n getActiveElement,\n getOptionalElement,\n requestJSON,\n setLocation,\n setToggle,\n watchDocument,\n watchKeyboard,\n watchLocation,\n watchLocationTarget,\n watchMedia,\n watchPrint,\n watchScript,\n watchViewport\n} from \"./browser\"\nimport {\n getComponentElement,\n getComponentElements,\n mountAnnounce,\n mountBackToTop,\n mountConsent,\n mountContent,\n mountDialog,\n mountHeader,\n mountHeaderTitle,\n mountPalette,\n mountProgress,\n mountSearch,\n mountSearchHiglight,\n mountSidebar,\n mountSource,\n mountTableOfContents,\n mountTabs,\n watchHeader,\n watchMain\n} from \"./components\"\nimport {\n SearchIndex,\n fetchSitemap,\n setupAlternate,\n setupClipboardJS,\n setupInstantNavigation,\n setupVersionSelector\n} from \"./integrations\"\nimport {\n patchEllipsis,\n patchIndeterminate,\n patchScrollfix,\n patchScrolllock\n} from \"./patches\"\nimport \"./polyfills\"\n\n/* ----------------------------------------------------------------------------\n * Functions - @todo refactor\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch search index\n *\n * @returns Search index observable\n */\nfunction fetchSearchIndex(): Observable {\n if (location.protocol === \"file:\") {\n return watchScript(\n `${new URL(\"search/search_index.js\", config.base)}`\n )\n .pipe(\n // @ts-ignore - @todo fix typings\n map(() => __index),\n shareReplay(1)\n )\n } else {\n return requestJSON(\n new URL(\"search/search_index.json\", config.base)\n )\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Application\n * ------------------------------------------------------------------------- */\n\n/* Yay, JavaScript is available */\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Set up navigation observables and subjects */\nconst document$ = watchDocument()\nconst location$ = watchLocation()\nconst target$ = watchLocationTarget(location$)\nconst keyboard$ = watchKeyboard()\n\n/* Set up media observables */\nconst viewport$ = watchViewport()\nconst tablet$ = watchMedia(\"(min-width: 60em)\")\nconst screen$ = watchMedia(\"(min-width: 76.25em)\")\nconst print$ = watchPrint()\n\n/* Retrieve search index, if search is enabled */\nconst config = configuration()\nconst index$ = document.forms.namedItem(\"search\")\n ? fetchSearchIndex()\n : NEVER\n\n/* Set up Clipboard.js integration */\nconst alert$ = new Subject()\nsetupClipboardJS({ alert$ })\n\n/* Set up language selector */\nsetupAlternate({ document$ })\n\n/* Set up progress indicator */\nconst progress$ = new Subject()\n\n/* Set up sitemap for instant navigation and previews */\nconst sitemap$ = fetchSitemap(config.base)\n\n/* Set up instant navigation, if enabled */\nif (feature(\"navigation.instant\"))\n setupInstantNavigation({ sitemap$, location$, viewport$, progress$ })\n .subscribe(document$)\n\n/* Set up version selector */\nif (config.version?.provider === \"mike\")\n setupVersionSelector({ document$ })\n\n/* Always close drawer and search on navigation */\nmerge(location$, target$)\n .pipe(\n delay(125)\n )\n .subscribe(() => {\n setToggle(\"drawer\", false)\n setToggle(\"search\", false)\n })\n\n/* Set up global keyboard handlers */\nkeyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getOptionalElement(\"link[rel=prev]\")\n if (typeof prev !== \"undefined\")\n setLocation(prev)\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getOptionalElement(\"link[rel=next]\")\n if (typeof next !== \"undefined\")\n setLocation(next)\n break\n\n /* Expand navigation, see https://bit.ly/3ZjG5io */\n case \"Enter\":\n const active = getActiveElement()\n if (active instanceof HTMLLabelElement)\n active.click()\n }\n })\n\n/* Set up patches */\npatchEllipsis({ viewport$, document$ })\npatchIndeterminate({ document$, tablet$ })\npatchScrollfix({ document$ })\npatchScrolllock({ viewport$, tablet$ })\n\n/* Set up header and main area observable */\nconst header$ = watchHeader(getComponentElement(\"header\"), { viewport$ })\nconst main$ = document$\n .pipe(\n map(() => getComponentElement(\"main\")),\n switchMap(el => watchMain(el, { viewport$, header$ })),\n shareReplay(1)\n )\n\n/* Set up control component observables */\nconst control$ = merge(\n\n /* Consent */\n ...getComponentElements(\"consent\")\n .map(el => mountConsent(el, { target$ })),\n\n /* Dialog */\n ...getComponentElements(\"dialog\")\n .map(el => mountDialog(el, { alert$ })),\n\n /* Color palette */\n ...getComponentElements(\"palette\")\n .map(el => mountPalette(el)),\n\n /* Progress bar */\n ...getComponentElements(\"progress\")\n .map(el => mountProgress(el, { progress$ })),\n\n /* Search */\n ...getComponentElements(\"search\")\n .map(el => mountSearch(el, { index$, keyboard$ })),\n\n /* Repository information */\n ...getComponentElements(\"source\")\n .map(el => mountSource(el))\n)\n\n/* Set up content component observables */\nconst content$ = defer(() => merge(\n\n /* Announcement bar */\n ...getComponentElements(\"announce\")\n .map(el => mountAnnounce(el)),\n\n /* Content */\n ...getComponentElements(\"content\")\n .map(el => mountContent(el, { sitemap$, viewport$, target$, print$ })),\n\n /* Search highlighting */\n ...getComponentElements(\"content\")\n .map(el => feature(\"search.highlight\")\n ? mountSearchHiglight(el, { index$, location$ })\n : EMPTY\n ),\n\n /* Header */\n ...getComponentElements(\"header\")\n .map(el => mountHeader(el, { viewport$, header$, main$ })),\n\n /* Header title */\n ...getComponentElements(\"header-title\")\n .map(el => mountHeaderTitle(el, { viewport$, header$ })),\n\n /* Sidebar */\n ...getComponentElements(\"sidebar\")\n .map(el => el.getAttribute(\"data-md-type\") === \"navigation\"\n ? at(screen$, () => mountSidebar(el, { viewport$, header$, main$ }))\n : at(tablet$, () => mountSidebar(el, { viewport$, header$, main$ }))\n ),\n\n /* Navigation tabs */\n ...getComponentElements(\"tabs\")\n .map(el => mountTabs(el, { viewport$, header$ })),\n\n /* Table of contents */\n ...getComponentElements(\"toc\")\n .map(el => mountTableOfContents(el, {\n viewport$, header$, main$, target$\n })),\n\n /* Back-to-top button */\n ...getComponentElements(\"top\")\n .map(el => mountBackToTop(el, { viewport$, header$, main$, target$ }))\n))\n\n/* Set up component observables */\nconst component$ = document$\n .pipe(\n switchMap(() => content$),\n mergeWith(control$),\n shareReplay(1)\n )\n\n/* Subscribe to all components */\ncomponent$.subscribe()\n\n/* ----------------------------------------------------------------------------\n * Exports\n * ------------------------------------------------------------------------- */\n\nwindow.document$ = document$ /* Document observable */\nwindow.location$ = location$ /* Location subject */\nwindow.target$ = target$ /* Location target observable */\nwindow.keyboard$ = keyboard$ /* Keyboard observable */\nwindow.viewport$ = viewport$ /* Viewport observable */\nwindow.tablet$ = tablet$ /* Media tablet observable */\nwindow.screen$ = screen$ /* Media screen observable */\nwindow.print$ = print$ /* Media print observable */\nwindow.alert$ = alert$ /* Alert subject */\nwindow.progress$ = progress$ /* Progress indicator subject */\nwindow.component$ = component$ /* Component observable */\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n", "/**\n * Returns true if the object is a function.\n * @param value The value to check\n */\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n", "/**\n * Used to create Error subclasses until the community moves away from ES5.\n *\n * This is because compiling from TypeScript down to ES5 has issues with subclassing Errors\n * as well as other built-in types: https://github.com/Microsoft/TypeScript/issues/12123\n *\n * @param createImpl A factory function to create the actual constructor implementation. The returned\n * function should be a named function that calls `_super` internally.\n */\nexport function createErrorClass(createImpl: (_super: any) => any): T {\n const _super = (instance: any) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface UnsubscriptionError extends Error {\n readonly errors: any[];\n}\n\nexport interface UnsubscriptionErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (errors: any[]): UnsubscriptionError;\n}\n\n/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport const UnsubscriptionError: UnsubscriptionErrorCtor = createErrorClass(\n (_super) =>\n function UnsubscriptionErrorImpl(this: any, errors: (Error | string)[]) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n }\n);\n", "/**\n * Removes an item from an array, mutating it.\n * @param arr The array to remove the item from\n * @param item The item to remove\n */\nexport function arrRemove(arr: T[] | undefined | null, item: T) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { SubscriptionLike, TeardownLogic, Unsubscribable } from './types';\nimport { arrRemove } from './util/arrRemove';\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n */\nexport class Subscription implements SubscriptionLike {\n public static EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n */\n public closed = false;\n\n private _parentage: Subscription[] | Subscription | null = null;\n\n /**\n * The list of registered finalizers to execute upon unsubscription. Adding and removing from this\n * list occurs in the {@link #add} and {@link #remove} methods.\n */\n private _finalizers: Exclude[] | null = null;\n\n /**\n * @param initialTeardown A function executed first as part of the finalization\n * process that is kicked off when {@link #unsubscribe} is called.\n */\n constructor(private initialTeardown?: () => void) {}\n\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n */\n unsubscribe(): void {\n let errors: any[] | undefined;\n\n if (!this.closed) {\n this.closed = true;\n\n // Remove this from it's parents.\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n\n const { initialTeardown: initialFinalizer } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n\n const { _finalizers } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n } catch (err) {\n errors = errors ?? [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n\n /**\n * Adds a finalizer to this subscription, so that finalization will be unsubscribed/called\n * when this subscription is unsubscribed. If this subscription is already {@link #closed},\n * because it has already been unsubscribed, then whatever finalizer is passed to it\n * will automatically be executed (unless the finalizer itself is also a closed subscription).\n *\n * Closed Subscriptions cannot be added as finalizers to any subscription. Adding a closed\n * subscription to a any subscription will result in no operation. (A noop).\n *\n * Adding a subscription to itself, or adding `null` or `undefined` will not perform any\n * operation at all. (A noop).\n *\n * `Subscription` instances that are added to this instance will automatically remove themselves\n * if they are unsubscribed. Functions and {@link Unsubscribable} objects that you wish to remove\n * will need to be removed manually with {@link #remove}\n *\n * @param teardown The finalization logic to add to this subscription.\n */\n add(teardown: TeardownLogic): void {\n // Only add the finalizer if it's not undefined\n // and don't add a subscription to itself.\n if (teardown && teardown !== this) {\n if (this.closed) {\n // If this subscription is already closed,\n // execute whatever finalizer is handed to it automatically.\n execFinalizer(teardown);\n } else {\n if (teardown instanceof Subscription) {\n // We don't add closed subscriptions, and we don't add the same subscription\n // twice. Subscription unsubscribe is idempotent.\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = this._finalizers ?? []).push(teardown);\n }\n }\n }\n\n /**\n * Checks to see if a this subscription already has a particular parent.\n * This will signal that this subscription has already been added to the parent in question.\n * @param parent the parent to check for\n */\n private _hasParent(parent: Subscription) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n\n /**\n * Adds a parent to this subscription so it can be removed from the parent if it\n * unsubscribes on it's own.\n *\n * NOTE: THIS ASSUMES THAT {@link _hasParent} HAS ALREADY BEEN CHECKED.\n * @param parent The parent subscription to add\n */\n private _addParent(parent: Subscription) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n\n /**\n * Called on a child when it is removed via {@link #remove}.\n * @param parent The parent to remove\n */\n private _removeParent(parent: Subscription) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n\n /**\n * Removes a finalizer from this subscription that was previously added with the {@link #add} method.\n *\n * Note that `Subscription` instances, when unsubscribed, will automatically remove themselves\n * from every other `Subscription` they have been added to. This means that using the `remove` method\n * is not a common thing and should be used thoughtfully.\n *\n * If you add the same finalizer instance of a function or an unsubscribable object to a `Subscription` instance\n * more than once, you will need to call `remove` the same number of times to remove all instances.\n *\n * All finalizer instances are removed to free up memory upon unsubscription.\n *\n * @param teardown The finalizer to remove from this subscription\n */\n remove(teardown: Exclude): void {\n const { _finalizers } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\n\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\n\nexport function isSubscription(value: any): value is Subscription {\n return (\n value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe))\n );\n}\n\nfunction execFinalizer(finalizer: Unsubscribable | (() => void)) {\n if (isFunction(finalizer)) {\n finalizer();\n } else {\n finalizer.unsubscribe();\n }\n}\n", "import { Subscriber } from './Subscriber';\nimport { ObservableNotification } from './types';\n\n/**\n * The {@link GlobalConfig} object for RxJS. It is used to configure things\n * like how to react on unhandled errors.\n */\nexport const config: GlobalConfig = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n\n/**\n * The global configuration object for RxJS, used to configure things\n * like how to react on unhandled errors. Accessible via {@link config}\n * object.\n */\nexport interface GlobalConfig {\n /**\n * A registration point for unhandled errors from RxJS. These are errors that\n * cannot were not handled by consuming code in the usual subscription path. For\n * example, if you have this configured, and you subscribe to an observable without\n * providing an error handler, errors from that subscription will end up here. This\n * will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onUnhandledError: ((err: any) => void) | null;\n\n /**\n * A registration point for notifications that cannot be sent to subscribers because they\n * have completed, errored or have been explicitly unsubscribed. By default, next, complete\n * and error notifications sent to stopped subscribers are noops. However, sometimes callers\n * might want a different behavior. For example, with sources that attempt to report errors\n * to stopped subscribers, a caller can configure RxJS to throw an unhandled error instead.\n * This will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onStoppedNotification: ((notification: ObservableNotification, subscriber: Subscriber) => void) | null;\n\n /**\n * The promise constructor used by default for {@link Observable#toPromise toPromise} and {@link Observable#forEach forEach}\n * methods.\n *\n * @deprecated As of version 8, RxJS will no longer support this sort of injection of a\n * Promise constructor. If you need a Promise implementation other than native promises,\n * please polyfill/patch Promise as you see appropriate. Will be removed in v8.\n */\n Promise?: PromiseConstructorLike;\n\n /**\n * If true, turns on synchronous error rethrowing, which is a deprecated behavior\n * in v6 and higher. This behavior enables bad patterns like wrapping a subscribe\n * call in a try/catch block. It also enables producer interference, a nasty bug\n * where a multicast can be broken for all observers by a downstream consumer with\n * an unhandled error. DO NOT USE THIS FLAG UNLESS IT'S NEEDED TO BUY TIME\n * FOR MIGRATION REASONS.\n *\n * @deprecated As of version 8, RxJS will no longer support synchronous throwing\n * of unhandled errors. All errors will be thrown on a separate call stack to prevent bad\n * behaviors described above. Will be removed in v8.\n */\n useDeprecatedSynchronousErrorHandling: boolean;\n\n /**\n * If true, enables an as-of-yet undocumented feature from v5: The ability to access\n * `unsubscribe()` via `this` context in `next` functions created in observers passed\n * to `subscribe`.\n *\n * This is being removed because the performance was severely problematic, and it could also cause\n * issues when types other than POJOs are passed to subscribe as subscribers, as they will likely have\n * their `this` context overwritten.\n *\n * @deprecated As of version 8, RxJS will no longer support altering the\n * context of next functions provided as part of an observer to Subscribe. Instead,\n * you will have access to a subscription or a signal or token that will allow you to do things like\n * unsubscribe and test closed status. Will be removed in v8.\n */\n useDeprecatedNextContext: boolean;\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetTimeoutFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearTimeoutFunction = (handle: TimerHandle) => void;\n\ninterface TimeoutProvider {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n delegate:\n | {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n }\n | undefined;\n}\n\nexport const timeoutProvider: TimeoutProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setTimeout(handler: () => void, timeout?: number, ...args) {\n const { delegate } = timeoutProvider;\n if (delegate?.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return (delegate?.clearTimeout || clearTimeout)(handle as any);\n },\n delegate: undefined,\n};\n", "import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\n\n/**\n * Handles an error on another job either with the user-configured {@link onUnhandledError},\n * or by throwing it on that new job so it can be picked up by `window.onerror`, `process.on('error')`, etc.\n *\n * This should be called whenever there is an error that is out-of-band with the subscription\n * or when an error hits a terminal boundary of the subscription and no error handler was provided.\n *\n * @param err the error to report\n */\nexport function reportUnhandledError(err: any) {\n timeoutProvider.setTimeout(() => {\n const { onUnhandledError } = config;\n if (onUnhandledError) {\n // Execute the user-configured error handler.\n onUnhandledError(err);\n } else {\n // Throw so it is picked up by the runtime's uncaught error mechanism.\n throw err;\n }\n });\n}\n", "/* tslint:disable:no-empty */\nexport function noop() { }\n", "import { CompleteNotification, NextNotification, ErrorNotification } from './types';\n\n/**\n * A completion object optimized for memory use and created to be the\n * same \"shape\" as other notifications in v8.\n * @internal\n */\nexport const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined) as CompleteNotification)();\n\n/**\n * Internal use only. Creates an optimized error notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function errorNotification(error: any): ErrorNotification {\n return createNotification('E', undefined, error) as any;\n}\n\n/**\n * Internal use only. Creates an optimized next notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function nextNotification(value: T) {\n return createNotification('N', value, undefined) as NextNotification;\n}\n\n/**\n * Ensures that all notifications created internally have the same \"shape\" in v8.\n *\n * TODO: This is only exported to support a crazy legacy test in `groupBy`.\n * @internal\n */\nexport function createNotification(kind: 'N' | 'E' | 'C', value: any, error: any) {\n return {\n kind,\n value,\n error,\n };\n}\n", "import { config } from '../config';\n\nlet context: { errorThrown: boolean; error: any } | null = null;\n\n/**\n * Handles dealing with errors for super-gross mode. Creates a context, in which\n * any synchronously thrown errors will be passed to {@link captureError}. Which\n * will record the error such that it will be rethrown after the call back is complete.\n * TODO: Remove in v8\n * @param cb An immediately executed function.\n */\nexport function errorContext(cb: () => void) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context!;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n // This is the general non-deprecated path for everyone that\n // isn't crazy enough to use super-gross mode (useDeprecatedSynchronousErrorHandling)\n cb();\n }\n}\n\n/**\n * Captures errors only in super-gross mode.\n * @param err the error to capture\n */\nexport function captureError(err: any) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { Observer, ObservableNotification } from './types';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n */\nexport class Subscriber extends Subscription implements Observer {\n /**\n * A static factory for a Subscriber, given a (potentially partial) definition\n * of an Observer.\n * @param next The `next` callback of an Observer.\n * @param error The `error` callback of an\n * Observer.\n * @param complete The `complete` callback of an\n * Observer.\n * @return A Subscriber wrapping the (partially defined)\n * Observer represented by the given arguments.\n * @deprecated Do not use. Will be removed in v8. There is no replacement for this\n * method, and there is no reason to be creating instances of `Subscriber` directly.\n * If you have a specific use case, please file an issue.\n */\n static create(next?: (x?: T) => void, error?: (e?: any) => void, complete?: () => void): Subscriber {\n return new SafeSubscriber(next, error, complete);\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected isStopped: boolean = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected destination: Subscriber | Observer; // this `any` is the escape hatch to erase extra type param (e.g. R)\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * There is no reason to directly create an instance of Subscriber. This type is exported for typings reasons.\n */\n constructor(destination?: Subscriber | Observer) {\n super();\n if (destination) {\n this.destination = destination;\n // Automatically chain subscriptions together here.\n // if destination is a Subscription, then it is a Subscriber.\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `next` from\n * the Observable, with a value. The Observable may call this method 0 or more\n * times.\n * @param value The `next` value.\n */\n next(value: T): void {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value!);\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `error` from\n * the Observable, with an attached `Error`. Notifies the Observer that\n * the Observable has experienced an error condition.\n * @param err The `error` exception.\n */\n error(err?: any): void {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n\n /**\n * The {@link Observer} callback to receive a valueless notification of type\n * `complete` from the Observable. Notifies the Observer that the Observable\n * has finished sending push-based notifications.\n */\n complete(): void {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n\n unsubscribe(): void {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null!;\n }\n }\n\n protected _next(value: T): void {\n this.destination.next(value);\n }\n\n protected _error(err: any): void {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n\n protected _complete(): void {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\n\n/**\n * This bind is captured here because we want to be able to have\n * compatibility with monoid libraries that tend to use a method named\n * `bind`. In particular, a library called Monio requires this.\n */\nconst _bind = Function.prototype.bind;\n\nfunction bind any>(fn: Fn, thisArg: any): Fn {\n return _bind.call(fn, thisArg);\n}\n\n/**\n * Internal optimization only, DO NOT EXPOSE.\n * @internal\n */\nclass ConsumerObserver implements Observer {\n constructor(private partialObserver: Partial>) {}\n\n next(value: T): void {\n const { partialObserver } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n\n error(err: any): void {\n const { partialObserver } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n } catch (error) {\n handleUnhandledError(error);\n }\n } else {\n handleUnhandledError(err);\n }\n }\n\n complete(): void {\n const { partialObserver } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\n\nexport class SafeSubscriber extends Subscriber {\n constructor(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((e?: any) => void) | null,\n complete?: (() => void) | null\n ) {\n super();\n\n let partialObserver: Partial>;\n if (isFunction(observerOrNext) || !observerOrNext) {\n // The first argument is a function, not an observer. The next\n // two arguments *could* be observers, or they could be empty.\n partialObserver = {\n next: (observerOrNext ?? undefined) as ((value: T) => void) | undefined,\n error: error ?? undefined,\n complete: complete ?? undefined,\n };\n } else {\n // The first argument is a partial observer.\n let context: any;\n if (this && config.useDeprecatedNextContext) {\n // This is a deprecated path that made `this.unsubscribe()` available in\n // next handler functions passed to subscribe. This only exists behind a flag\n // now, as it is *very* slow.\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context),\n };\n } else {\n // The \"normal\" path. Just use the partial observer directly.\n partialObserver = observerOrNext;\n }\n }\n\n // Wrap the partial observer to ensure it's a full observer, and\n // make sure proper error handling is accounted for.\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\n\nfunction handleUnhandledError(error: any) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n } else {\n // Ideal path, we report this as an unhandled error,\n // which is thrown on a new call stack.\n reportUnhandledError(error);\n }\n}\n\n/**\n * An error handler used when no error handler was supplied\n * to the SafeSubscriber -- meaning no error handler was supplied\n * do the `subscribe` call on our observable.\n * @param err The error to handle\n */\nfunction defaultErrorHandler(err: any) {\n throw err;\n}\n\n/**\n * A handler for notifications that cannot be sent to a stopped subscriber.\n * @param notification The notification being sent.\n * @param subscriber The stopped subscriber.\n */\nfunction handleStoppedNotification(notification: ObservableNotification, subscriber: Subscriber) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\n\n/**\n * The observer used as a stub for subscriptions where the user did not\n * pass any arguments to `subscribe`. Comes with the default error handling\n * behavior.\n */\nexport const EMPTY_OBSERVER: Readonly> & { closed: true } = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n", "/**\n * Symbol.observable or a string \"@@observable\". Used for interop\n *\n * @deprecated We will no longer be exporting this symbol in upcoming versions of RxJS.\n * Instead polyfill and use Symbol.observable directly *or* use https://www.npmjs.com/package/symbol-observable\n */\nexport const observable: string | symbol = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n", "/**\n * This function takes one parameter and just returns it. Simply put,\n * this is like `(x: T): T => x`.\n *\n * ## Examples\n *\n * This is useful in some cases when using things like `mergeMap`\n *\n * ```ts\n * import { interval, take, map, range, mergeMap, identity } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(5));\n *\n * const result$ = source$.pipe(\n * map(i => range(i)),\n * mergeMap(identity) // same as mergeMap(x => x)\n * );\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * Or when you want to selectively apply an operator\n *\n * ```ts\n * import { interval, take, identity } from 'rxjs';\n *\n * const shouldLimit = () => Math.random() < 0.5;\n *\n * const source$ = interval(1000);\n *\n * const result$ = source$.pipe(shouldLimit() ? take(5) : identity);\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * @param x Any value that is returned by this function\n * @returns The value passed as the first parameter to this function\n */\nexport function identity(x: T): T {\n return x;\n}\n", "import { identity } from './identity';\nimport { UnaryFunction } from '../types';\n\nexport function pipe(): typeof identity;\nexport function pipe(fn1: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction, fn3: UnaryFunction): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction,\n ...fns: UnaryFunction[]\n): UnaryFunction;\n\n/**\n * pipe() can be called on one or more functions, each of which can take one argument (\"UnaryFunction\")\n * and uses it to return a value.\n * It returns a function that takes one argument, passes it to the first UnaryFunction, and then\n * passes the result to the next one, passes that result to the next one, and so on. \n */\nexport function pipe(...fns: Array>): UnaryFunction {\n return pipeFromArray(fns);\n}\n\n/** @internal */\nexport function pipeFromArray(fns: Array>): UnaryFunction {\n if (fns.length === 0) {\n return identity as UnaryFunction;\n }\n\n if (fns.length === 1) {\n return fns[0];\n }\n\n return function piped(input: T): R {\n return fns.reduce((prev: any, fn: UnaryFunction) => fn(prev), input as any);\n };\n}\n", "import { Operator } from './Operator';\nimport { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription, Subscription } from './Subscription';\nimport { TeardownLogic, OperatorFunction, Subscribable, Observer } from './types';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A representation of any set of values over any amount of time. This is the most basic building block\n * of RxJS.\n */\nexport class Observable implements Subscribable {\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n source: Observable | undefined;\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n operator: Operator | undefined;\n\n /**\n * @param subscribe The function that is called when the Observable is\n * initially subscribed to. This function is given a Subscriber, to which new values\n * can be `next`ed, or an `error` method can be called to raise an error, or\n * `complete` can be called to notify of a successful completion.\n */\n constructor(subscribe?: (this: Observable, subscriber: Subscriber) => TeardownLogic) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n\n // HACK: Since TypeScript inherits static properties too, we have to\n // fight against TypeScript here so Subject can have a different static create signature\n /**\n * Creates a new Observable by calling the Observable constructor\n * @param subscribe the subscriber function to be passed to the Observable constructor\n * @return A new observable.\n * @deprecated Use `new Observable()` instead. Will be removed in v8.\n */\n static create: (...args: any[]) => any = (subscribe?: (subscriber: Subscriber) => TeardownLogic) => {\n return new Observable(subscribe);\n };\n\n /**\n * Creates a new Observable, with this Observable instance as the source, and the passed\n * operator defined as the new observable's operator.\n * @param operator the operator defining the operation to take on the observable\n * @return A new observable with the Operator applied.\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * If you have implemented an operator using `lift`, it is recommended that you create an\n * operator by simply returning `new Observable()` directly. See \"Creating new operators from\n * scratch\" section here: https://rxjs.dev/guide/operators\n */\n lift(operator?: Operator): Observable {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n\n subscribe(observerOrNext?: Partial> | ((value: T) => void)): Subscription;\n /** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\n subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;\n /**\n * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n *\n * Use it when you have all these Observables, but still nothing is happening.\n *\n * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It\n * might be for example a function that you passed to Observable's constructor, but most of the time it is\n * a library implementation, which defines what will be emitted by an Observable, and when it be will emitted. This means\n * that calling `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n * the thought.\n *\n * Apart from starting the execution of an Observable, this method allows you to listen for values\n * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n * of the following ways.\n *\n * The first way is creating an object that implements {@link Observer} interface. It should have methods\n * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular, do\n * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n * do anything, you can simply omit it. Note however, if the `error` method is not provided and an error happens,\n * it will be thrown asynchronously. Errors thrown asynchronously cannot be caught using `try`/`catch`. Instead,\n * use the {@link onUnhandledError} configuration option or use a runtime handler (like `window.onerror` or\n * `process.on('error)`) to be notified of unhandled errors. Because of this, it's recommended that you provide\n * an `error` method to avoid missing thrown errors.\n *\n * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n * This means you can provide three functions as arguments to `subscribe`, where the first function is equivalent\n * of a `next` method, the second of an `error` method and the third of a `complete` method. Just as in case of an Observer,\n * if you do not need to listen for something, you can omit a function by passing `undefined` or `null`,\n * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n * to the `error` function, as with an Observer, if not provided, errors emitted by an Observable will be thrown asynchronously.\n *\n * You can, however, subscribe with no parameters at all. This may be the case where you're not interested in terminal events\n * and you also handled emissions internally by using operators (e.g. using `tap`).\n *\n * Whichever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n * This object allows you to call `unsubscribe` on it, which in turn will stop the work that an Observable does and will clean\n * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n *\n * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n * It is an Observable itself that decides when these functions will be called. For example {@link of}\n * by default emits all its values synchronously. Always check documentation for how given Observable\n * will behave when subscribed and if its default behavior can be modified with a `scheduler`.\n *\n * #### Examples\n *\n * Subscribe with an {@link guide/observer Observer}\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * const sumObserver = {\n * sum: 0,\n * next(value) {\n * console.log('Adding: ' + value);\n * this.sum = this.sum + value;\n * },\n * error() {\n * // We actually could just remove this method,\n * // since we do not really care about errors right now.\n * },\n * complete() {\n * console.log('Sum equals: ' + this.sum);\n * }\n * };\n *\n * of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n * .subscribe(sumObserver);\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Subscribe with functions ({@link deprecations/subscribe-arguments deprecated})\n *\n * ```ts\n * import { of } from 'rxjs'\n *\n * let sum = 0;\n *\n * of(1, 2, 3).subscribe(\n * value => {\n * console.log('Adding: ' + value);\n * sum = sum + value;\n * },\n * undefined,\n * () => console.log('Sum equals: ' + sum)\n * );\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Cancel a subscription\n *\n * ```ts\n * import { interval } from 'rxjs';\n *\n * const subscription = interval(1000).subscribe({\n * next(num) {\n * console.log(num)\n * },\n * complete() {\n * // Will not be called, even when cancelling subscription.\n * console.log('completed!');\n * }\n * });\n *\n * setTimeout(() => {\n * subscription.unsubscribe();\n * console.log('unsubscribed!');\n * }, 2500);\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // 'unsubscribed!' after 2.5s\n * ```\n *\n * @param observerOrNext Either an {@link Observer} with some or all callback methods,\n * or the `next` handler that is called for each value emitted from the subscribed Observable.\n * @param error A handler for a terminal event resulting from an error. If no error handler is provided,\n * the error will be thrown asynchronously as unhandled.\n * @param complete A handler for a terminal event resulting from successful completion.\n * @return A subscription reference to the registered handlers.\n */\n subscribe(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n ): Subscription {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(\n operator\n ? // We're dealing with a subscription in the\n // operator chain to one of our lifted operators.\n operator.call(subscriber, source)\n : source\n ? // If `source` has a value, but `operator` does not, something that\n // had intimate knowledge of our API, like our `Subject`, must have\n // set it. We're going to just call `_subscribe` directly.\n this._subscribe(subscriber)\n : // In all other cases, we're likely wrapping a user-provided initializer\n // function, so we need to catch errors and handle them appropriately.\n this._trySubscribe(subscriber)\n );\n });\n\n return subscriber;\n }\n\n /** @internal */\n protected _trySubscribe(sink: Subscriber): TeardownLogic {\n try {\n return this._subscribe(sink);\n } catch (err) {\n // We don't need to return anything in this case,\n // because it's just going to try to `add()` to a subscription\n // above.\n sink.error(err);\n }\n }\n\n /**\n * Used as a NON-CANCELLABLE means of subscribing to an observable, for use with\n * APIs that expect promises, like `async/await`. You cannot unsubscribe from this.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * #### Example\n *\n * ```ts\n * import { interval, take } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(4));\n *\n * async function getTotal() {\n * let total = 0;\n *\n * await source$.forEach(value => {\n * total += value;\n * console.log('observable -> ' + value);\n * });\n *\n * return total;\n * }\n *\n * getTotal().then(\n * total => console.log('Total: ' + total)\n * );\n *\n * // Expected:\n * // 'observable -> 0'\n * // 'observable -> 1'\n * // 'observable -> 2'\n * // 'observable -> 3'\n * // 'Total: 6'\n * ```\n *\n * @param next A handler for each value emitted by the observable.\n * @return A promise that either resolves on observable completion or\n * rejects with the handled error.\n */\n forEach(next: (value: T) => void): Promise;\n\n /**\n * @param next a handler for each value emitted by the observable\n * @param promiseCtor a constructor function used to instantiate the Promise\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n * @deprecated Passing a Promise constructor will no longer be available\n * in upcoming versions of RxJS. This is because it adds weight to the library, for very\n * little benefit. If you need this functionality, it is recommended that you either\n * polyfill Promise, or you create an adapter to convert the returned native promise\n * to whatever promise implementation you wanted. Will be removed in v8.\n */\n forEach(next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise;\n\n forEach(next: (value: T) => void, promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: (value) => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n this.subscribe(subscriber);\n }) as Promise;\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): TeardownLogic {\n return this.source?.subscribe(subscriber);\n }\n\n /**\n * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n * @return This instance of the observable.\n */\n [Symbol_observable]() {\n return this;\n }\n\n /* tslint:disable:max-line-length */\n pipe(): Observable;\n pipe(op1: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction,\n ...operations: OperatorFunction[]\n ): Observable;\n /* tslint:enable:max-line-length */\n\n /**\n * Used to stitch together functional operators into a chain.\n *\n * ## Example\n *\n * ```ts\n * import { interval, filter, map, scan } from 'rxjs';\n *\n * interval(1000)\n * .pipe(\n * filter(x => x % 2 === 0),\n * map(x => x + x),\n * scan((acc, x) => acc + x)\n * )\n * .subscribe(x => console.log(x));\n * ```\n *\n * @return The Observable result of all the operators having been called\n * in the order they were passed in.\n */\n pipe(...operations: OperatorFunction[]): Observable {\n return pipeFromArray(operations)(this);\n }\n\n /* tslint:disable:max-line-length */\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: typeof Promise): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: PromiseConstructorLike): Promise;\n /* tslint:enable:max-line-length */\n\n /**\n * Subscribe to this Observable and get a Promise resolving on\n * `complete` with the last emission (if any).\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * @param [promiseCtor] a constructor function used to instantiate\n * the Promise\n * @return A Promise that resolves with the last value emit, or\n * rejects on an error. If there were no emissions, Promise\n * resolves with undefined.\n * @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise\n */\n toPromise(promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n let value: T | undefined;\n this.subscribe(\n (x: T) => (value = x),\n (err: any) => reject(err),\n () => resolve(value)\n );\n }) as Promise;\n }\n}\n\n/**\n * Decides between a passed promise constructor from consuming code,\n * A default configured promise constructor, and the native promise\n * constructor and returns it. If nothing can be found, it will throw\n * an error.\n * @param promiseCtor The optional promise constructor to passed by consuming code\n */\nfunction getPromiseCtor(promiseCtor: PromiseConstructorLike | undefined) {\n return promiseCtor ?? config.Promise ?? Promise;\n}\n\nfunction isObserver(value: any): value is Observer {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\n\nfunction isSubscriber(value: any): value is Subscriber {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n", "import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorFunction } from '../types';\nimport { isFunction } from './isFunction';\n\n/**\n * Used to determine if an object is an Observable with a lift function.\n */\nexport function hasLift(source: any): source is { lift: InstanceType['lift'] } {\n return isFunction(source?.lift);\n}\n\n/**\n * Creates an `OperatorFunction`. Used to define operators throughout the library in a concise way.\n * @param init The logic to connect the liftedSource to the subscriber at the moment of subscription.\n */\nexport function operate(\n init: (liftedSource: Observable, subscriber: Subscriber) => (() => void) | void\n): OperatorFunction {\n return (source: Observable) => {\n if (hasLift(source)) {\n return source.lift(function (this: Subscriber, liftedSource: Observable) {\n try {\n return init(liftedSource, this);\n } catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n", "import { Subscriber } from '../Subscriber';\n\n/**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional teardown logic here. This will only be called on teardown if the\n * subscriber itself is not already closed. This is called after all other teardown logic is executed.\n */\nexport function createOperatorSubscriber(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n onFinalize?: () => void\n): Subscriber {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\n\n/**\n * A generic helper for allowing operators to be created with a Subscriber and\n * use closures to capture necessary state from the operator function itself.\n */\nexport class OperatorSubscriber extends Subscriber {\n /**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional finalization logic here. This will only be called on finalization if the\n * subscriber itself is not already closed. This is called after all other finalization logic is executed.\n * @param shouldUnsubscribe An optional check to see if an unsubscribe call should truly unsubscribe.\n * NOTE: This currently **ONLY** exists to support the strange behavior of {@link groupBy}, where unsubscription\n * to the resulting observable does not actually disconnect from the source if there are active subscriptions\n * to any grouped observable. (DO NOT EXPOSE OR USE EXTERNALLY!!!)\n */\n constructor(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n private onFinalize?: () => void,\n private shouldUnsubscribe?: () => boolean\n ) {\n // It's important - for performance reasons - that all of this class's\n // members are initialized and that they are always initialized in the same\n // order. This will ensure that all OperatorSubscriber instances have the\n // same hidden class in V8. This, in turn, will help keep the number of\n // hidden classes involved in property accesses within the base class as\n // low as possible. If the number of hidden classes involved exceeds four,\n // the property accesses will become megamorphic and performance penalties\n // will be incurred - i.e. inline caches won't be used.\n //\n // The reasons for ensuring all instances have the same hidden class are\n // further discussed in this blog post from Benedikt Meurer:\n // https://benediktmeurer.de/2018/03/23/impact-of-polymorphism-on-component-based-frameworks-like-react/\n super(destination);\n this._next = onNext\n ? function (this: OperatorSubscriber, value: T) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n }\n : super._next;\n this._error = onError\n ? function (this: OperatorSubscriber, err: any) {\n try {\n onError(err);\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._error;\n this._complete = onComplete\n ? function (this: OperatorSubscriber) {\n try {\n onComplete();\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._complete;\n }\n\n unsubscribe() {\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n const { closed } = this;\n super.unsubscribe();\n // Execute additional teardown if we have any and we didn't already do so.\n !closed && this.onFinalize?.();\n }\n }\n}\n", "import { Subscription } from '../Subscription';\n\ninterface AnimationFrameProvider {\n schedule(callback: FrameRequestCallback): Subscription;\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n delegate:\n | {\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n }\n | undefined;\n}\n\nexport const animationFrameProvider: AnimationFrameProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n schedule(callback) {\n let request = requestAnimationFrame;\n let cancel: typeof cancelAnimationFrame | undefined = cancelAnimationFrame;\n const { delegate } = animationFrameProvider;\n if (delegate) {\n request = delegate.requestAnimationFrame;\n cancel = delegate.cancelAnimationFrame;\n }\n const handle = request((timestamp) => {\n // Clear the cancel function. The request has been fulfilled, so\n // attempting to cancel the request upon unsubscription would be\n // pointless.\n cancel = undefined;\n callback(timestamp);\n });\n return new Subscription(() => cancel?.(handle));\n },\n requestAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.requestAnimationFrame || requestAnimationFrame)(...args);\n },\n cancelAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.cancelAnimationFrame || cancelAnimationFrame)(...args);\n },\n delegate: undefined,\n};\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface ObjectUnsubscribedError extends Error {}\n\nexport interface ObjectUnsubscribedErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ObjectUnsubscribedError;\n}\n\n/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport const ObjectUnsubscribedError: ObjectUnsubscribedErrorCtor = createErrorClass(\n (_super) =>\n function ObjectUnsubscribedErrorImpl(this: any) {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n }\n);\n", "import { Operator } from './Operator';\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { Observer, SubscriptionLike, TeardownLogic } from './types';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A Subject is a special type of Observable that allows values to be\n * multicasted to many Observers. Subjects are like EventEmitters.\n *\n * Every Subject is an Observable and an Observer. You can subscribe to a\n * Subject, and you can call next to feed values as well as error and complete.\n */\nexport class Subject extends Observable implements SubscriptionLike {\n closed = false;\n\n private currentObservers: Observer[] | null = null;\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n observers: Observer[] = [];\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n isStopped = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n hasError = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n thrownError: any = null;\n\n /**\n * Creates a \"subject\" by basically gluing an observer to an observable.\n *\n * @deprecated Recommended you do not use. Will be removed at some point in the future. Plans for replacement still under discussion.\n */\n static create: (...args: any[]) => any = (destination: Observer, source: Observable): AnonymousSubject => {\n return new AnonymousSubject(destination, source);\n };\n\n constructor() {\n // NOTE: This must be here to obscure Observable's constructor.\n super();\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n lift(operator: Operator): Observable {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator as any;\n return subject as any;\n }\n\n /** @internal */\n protected _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n\n next(value: T) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n\n error(err: any) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.error(err);\n }\n }\n });\n }\n\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.complete();\n }\n }\n });\n }\n\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null!;\n }\n\n get observed() {\n return this.observers?.length > 0;\n }\n\n /** @internal */\n protected _trySubscribe(subscriber: Subscriber): TeardownLogic {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n\n /** @internal */\n protected _innerSubscribe(subscriber: Subscriber) {\n const { hasError, isStopped, observers } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n\n /**\n * Creates a new Observable with this Subject as the source. You can do this\n * to create custom Observer-side logic of the Subject and conceal it from\n * code that uses the Observable.\n * @return Observable that this Subject casts to.\n */\n asObservable(): Observable {\n const observable: any = new Observable();\n observable.source = this;\n return observable;\n }\n}\n\nexport class AnonymousSubject extends Subject {\n constructor(\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n public destination?: Observer,\n source?: Observable\n ) {\n super();\n this.source = source;\n }\n\n next(value: T) {\n this.destination?.next?.(value);\n }\n\n error(err: any) {\n this.destination?.error?.(err);\n }\n\n complete() {\n this.destination?.complete?.();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n return this.source?.subscribe(subscriber) ?? EMPTY_SUBSCRIPTION;\n }\n}\n", "import { Subject } from './Subject';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\n\n/**\n * A variant of Subject that requires an initial value and emits its current\n * value whenever it is subscribed to.\n */\nexport class BehaviorSubject extends Subject {\n constructor(private _value: T) {\n super();\n }\n\n get value(): T {\n return this.getValue();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n const subscription = super._subscribe(subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n }\n\n getValue(): T {\n const { hasError, thrownError, _value } = this;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n }\n\n next(value: T): void {\n super.next((this._value = value));\n }\n}\n", "import { TimestampProvider } from '../types';\n\ninterface DateTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const dateTimestampProvider: DateTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n", "import { Subject } from './Subject';\nimport { TimestampProvider } from './types';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * A variant of {@link Subject} that \"replays\" old values to new subscribers by emitting them when they first subscribe.\n *\n * `ReplaySubject` has an internal buffer that will store a specified number of values that it has observed. Like `Subject`,\n * `ReplaySubject` \"observes\" values by having them passed to its `next` method. When it observes a value, it will store that\n * value for a time determined by the configuration of the `ReplaySubject`, as passed to its constructor.\n *\n * When a new subscriber subscribes to the `ReplaySubject` instance, it will synchronously emit all values in its buffer in\n * a First-In-First-Out (FIFO) manner. The `ReplaySubject` will also complete, if it has observed completion; and it will\n * error if it has observed an error.\n *\n * There are two main configuration items to be concerned with:\n *\n * 1. `bufferSize` - This will determine how many items are stored in the buffer, defaults to infinite.\n * 2. `windowTime` - The amount of time to hold a value in the buffer before removing it from the buffer.\n *\n * Both configurations may exist simultaneously. So if you would like to buffer a maximum of 3 values, as long as the values\n * are less than 2 seconds old, you could do so with a `new ReplaySubject(3, 2000)`.\n *\n * ### Differences with BehaviorSubject\n *\n * `BehaviorSubject` is similar to `new ReplaySubject(1)`, with a couple of exceptions:\n *\n * 1. `BehaviorSubject` comes \"primed\" with a single value upon construction.\n * 2. `ReplaySubject` will replay values, even after observing an error, where `BehaviorSubject` will not.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n * @see {@link shareReplay}\n */\nexport class ReplaySubject extends Subject {\n private _buffer: (T | number)[] = [];\n private _infiniteTimeWindow = true;\n\n /**\n * @param _bufferSize The size of the buffer to replay on subscription\n * @param _windowTime The amount of time the buffered items will stay buffered\n * @param _timestampProvider An object with a `now()` method that provides the current timestamp. This is used to\n * calculate the amount of time something has been buffered.\n */\n constructor(\n private _bufferSize = Infinity,\n private _windowTime = Infinity,\n private _timestampProvider: TimestampProvider = dateTimestampProvider\n ) {\n super();\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n\n next(value: T): void {\n const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._trimBuffer();\n\n const subscription = this._innerSubscribe(subscriber);\n\n const { _infiniteTimeWindow, _buffer } = this;\n // We use a copy here, so reentrant code does not mutate our array while we're\n // emitting it to a new subscriber.\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i] as T);\n }\n\n this._checkFinalizedStatuses(subscriber);\n\n return subscription;\n }\n\n private _trimBuffer() {\n const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this;\n // If we don't have an infinite buffer size, and we're over the length,\n // use splice to truncate the old buffer values off. Note that we have to\n // double the size for instances where we're not using an infinite time window\n // because we're storing the values and the timestamps in the same array.\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n\n // Now, if we're not in an infinite time window, remove all values where the time is\n // older than what is allowed.\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n // Search the array for the first timestamp that isn't expired and\n // truncate the buffer up to that point.\n for (let i = 1; i < _buffer.length && (_buffer[i] as number) <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Subscription } from '../Subscription';\nimport { SchedulerAction } from '../types';\n\n/**\n * A unit of work to be executed in a `scheduler`. An action is typically\n * created from within a {@link SchedulerLike} and an RxJS user does not need to concern\n * themselves about creating and manipulating an Action.\n *\n * ```ts\n * class Action extends Subscription {\n * new (scheduler: Scheduler, work: (state?: T) => void);\n * schedule(state?: T, delay: number = 0): Subscription;\n * }\n * ```\n */\nexport class Action extends Subscription {\n constructor(scheduler: Scheduler, work: (this: SchedulerAction, state?: T) => void) {\n super();\n }\n /**\n * Schedules this action on its parent {@link SchedulerLike} for execution. May be passed\n * some context object, `state`. May happen at some point in the future,\n * according to the `delay` parameter, if specified.\n * @param state Some contextual data that the `work` function uses when called by the\n * Scheduler.\n * @param delay Time to wait before executing the work, where the time unit is implicit\n * and defined by the Scheduler.\n * @return A subscription in order to be able to unsubscribe the scheduled work.\n */\n public schedule(state?: T, delay: number = 0): Subscription {\n return this;\n }\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetIntervalFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearIntervalFunction = (handle: TimerHandle) => void;\n\ninterface IntervalProvider {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n delegate:\n | {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n }\n | undefined;\n}\n\nexport const intervalProvider: IntervalProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setInterval(handler: () => void, timeout?: number, ...args) {\n const { delegate } = intervalProvider;\n if (delegate?.setInterval) {\n return delegate.setInterval(handler, timeout, ...args);\n }\n return setInterval(handler, timeout, ...args);\n },\n clearInterval(handle) {\n const { delegate } = intervalProvider;\n return (delegate?.clearInterval || clearInterval)(handle as any);\n },\n delegate: undefined,\n};\n", "import { Action } from './Action';\nimport { SchedulerAction } from '../types';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncAction extends Action {\n public id: TimerHandle | undefined;\n public state?: T;\n // @ts-ignore: Property has no initializer and is not definitely assigned\n public delay: number;\n protected pending: boolean = false;\n\n constructor(protected scheduler: AsyncScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (this.closed) {\n return this;\n }\n\n // Always replace the current state with the new state.\n this.state = state;\n\n const id = this.id;\n const scheduler = this.scheduler;\n\n //\n // Important implementation note:\n //\n // Actions only execute once by default, unless rescheduled from within the\n // scheduled callback. This allows us to implement single and repeat\n // actions via the same code path, without adding API surface area, as well\n // as mimic traditional recursion but across asynchronous boundaries.\n //\n // However, JS runtimes and timers distinguish between intervals achieved by\n // serial `setTimeout` calls vs. a single `setInterval` call. An interval of\n // serial `setTimeout` calls can be individually delayed, which delays\n // scheduling the next `setTimeout`, and so on. `setInterval` attempts to\n // guarantee the interval callback will be invoked more precisely to the\n // interval period, regardless of load.\n //\n // Therefore, we use `setInterval` to schedule single and repeat actions.\n // If the action reschedules itself with the same delay, the interval is not\n // canceled. If the action doesn't reschedule, or reschedules with a\n // different delay, the interval will be canceled after scheduled callback\n // execution.\n //\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n\n // Set the pending flag indicating that this action has been scheduled, or\n // has recursively rescheduled itself.\n this.pending = true;\n\n this.delay = delay;\n // If this action has already an async Id, don't request a new one.\n this.id = this.id ?? this.requestAsyncId(scheduler, this.id, delay);\n\n return this;\n }\n\n protected requestAsyncId(scheduler: AsyncScheduler, _id?: TimerHandle, delay: number = 0): TimerHandle {\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n\n protected recycleAsyncId(_scheduler: AsyncScheduler, id?: TimerHandle, delay: number | null = 0): TimerHandle | undefined {\n // If this action is rescheduled with the same delay time, don't clear the interval id.\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n // Otherwise, if the action's delay time is different from the current delay,\n // or the action has been rescheduled before it's executed, clear the interval id\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n\n return undefined;\n }\n\n /**\n * Immediately executes this action and the `work` it contains.\n */\n public execute(state: T, delay: number): any {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n // Dequeue if the action didn't reschedule itself. Don't call\n // unsubscribe(), because the action could reschedule later.\n // For example:\n // ```\n // scheduler.schedule(function doWork(counter) {\n // /* ... I'm a busy worker bee ... */\n // var originalAction = this;\n // /* wait 100ms before rescheduling the action */\n // setTimeout(function () {\n // originalAction.schedule(counter + 1);\n // }, 100);\n // }, 1000);\n // ```\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n\n protected _execute(state: T, _delay: number): any {\n let errored: boolean = false;\n let errorValue: any;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n // HACK: Since code elsewhere is relying on the \"truthiness\" of the\n // return here, we can't have it return \"\" or 0 or false.\n // TODO: Clean this up when we refactor schedulers mid-version-8 or so.\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n\n unsubscribe() {\n if (!this.closed) {\n const { id, scheduler } = this;\n const { actions } = scheduler;\n\n this.work = this.state = this.scheduler = null!;\n this.pending = false;\n\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n\n this.delay = null!;\n super.unsubscribe();\n }\n }\n}\n", "import { Action } from './scheduler/Action';\nimport { Subscription } from './Subscription';\nimport { SchedulerLike, SchedulerAction } from './types';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * An execution context and a data structure to order tasks and schedule their\n * execution. Provides a notion of (potentially virtual) time, through the\n * `now()` getter method.\n *\n * Each unit of work in a Scheduler is called an `Action`.\n *\n * ```ts\n * class Scheduler {\n * now(): number;\n * schedule(work, delay?, state?): Subscription;\n * }\n * ```\n *\n * @deprecated Scheduler is an internal implementation detail of RxJS, and\n * should not be used directly. Rather, create your own class and implement\n * {@link SchedulerLike}. Will be made internal in v8.\n */\nexport class Scheduler implements SchedulerLike {\n public static now: () => number = dateTimestampProvider.now;\n\n constructor(private schedulerActionCtor: typeof Action, now: () => number = Scheduler.now) {\n this.now = now;\n }\n\n /**\n * A getter method that returns a number representing the current time\n * (at the time this function was called) according to the scheduler's own\n * internal clock.\n * @return A number that represents the current time. May or may not\n * have a relation to wall-clock time. May or may not refer to a time unit\n * (e.g. milliseconds).\n */\n public now: () => number;\n\n /**\n * Schedules a function, `work`, for execution. May happen at some point in\n * the future, according to the `delay` parameter, if specified. May be passed\n * some context object, `state`, which will be passed to the `work` function.\n *\n * The given arguments will be processed an stored as an Action object in a\n * queue of actions.\n *\n * @param work A function representing a task, or some unit of work to be\n * executed by the Scheduler.\n * @param delay Time to wait before executing the work, where the time unit is\n * implicit and defined by the Scheduler itself.\n * @param state Some contextual data that the `work` function uses when called\n * by the Scheduler.\n * @return A subscription in order to be able to unsubscribe the scheduled work.\n */\n public schedule(work: (this: SchedulerAction, state?: T) => void, delay: number = 0, state?: T): Subscription {\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Action } from './Action';\nimport { AsyncAction } from './AsyncAction';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncScheduler extends Scheduler {\n public actions: Array> = [];\n /**\n * A flag to indicate whether the Scheduler is currently executing a batch of\n * queued actions.\n * @internal\n */\n public _active: boolean = false;\n /**\n * An internal ID used to track the latest asynchronous task such as those\n * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\n * others.\n * @internal\n */\n public _scheduled: TimerHandle | undefined;\n\n constructor(SchedulerAction: typeof Action, now: () => number = Scheduler.now) {\n super(SchedulerAction, now);\n }\n\n public flush(action: AsyncAction): void {\n const { actions } = this;\n\n if (this._active) {\n actions.push(action);\n return;\n }\n\n let error: any;\n this._active = true;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()!)); // exhaust the scheduler queue\n\n this._active = false;\n\n if (error) {\n while ((action = actions.shift()!)) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\n/**\n *\n * Async Scheduler\n *\n * Schedule task as if you used setTimeout(task, duration)\n *\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\n * in intervals.\n *\n * If you just want to \"defer\" task, that is to perform it right after currently\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\n * better choice will be the {@link asapScheduler} scheduler.\n *\n * ## Examples\n * Use async scheduler to delay task\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * const task = () => console.log('it works!');\n *\n * asyncScheduler.schedule(task, 2000);\n *\n * // After 2 seconds logs:\n * // \"it works!\"\n * ```\n *\n * Use async scheduler to repeat task in intervals\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * function task(state) {\n * console.log(state);\n * this.schedule(state + 1, 1000); // `this` references currently executing Action,\n * // which we reschedule with new state and delay\n * }\n *\n * asyncScheduler.schedule(task, 3000, 0);\n *\n * // Logs:\n * // 0 after 3s\n * // 1 after 4s\n * // 2 after 5s\n * // 3 after 6s\n * ```\n */\n\nexport const asyncScheduler = new AsyncScheduler(AsyncAction);\n\n/**\n * @deprecated Renamed to {@link asyncScheduler}. Will be removed in v8.\n */\nexport const async = asyncScheduler;\n", "import { AsyncAction } from './AsyncAction';\nimport { Subscription } from '../Subscription';\nimport { QueueScheduler } from './QueueScheduler';\nimport { SchedulerAction } from '../types';\nimport { TimerHandle } from './timerHandle';\n\nexport class QueueAction extends AsyncAction {\n constructor(protected scheduler: QueueScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (delay > 0) {\n return super.schedule(state, delay);\n }\n this.delay = delay;\n this.state = state;\n this.scheduler.flush(this);\n return this;\n }\n\n public execute(state: T, delay: number): any {\n return delay > 0 || this.closed ? super.execute(state, delay) : this._execute(state, delay);\n }\n\n protected requestAsyncId(scheduler: QueueScheduler, id?: TimerHandle, delay: number = 0): TimerHandle {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n\n if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n\n // Otherwise flush the scheduler starting with this action.\n scheduler.flush(this);\n\n // HACK: In the past, this was returning `void`. However, `void` isn't a valid\n // `TimerHandle`, and generally the return value here isn't really used. So the\n // compromise is to return `0` which is both \"falsy\" and a valid `TimerHandle`,\n // as opposed to refactoring every other instanceo of `requestAsyncId`.\n return 0;\n }\n}\n", "import { AsyncScheduler } from './AsyncScheduler';\n\nexport class QueueScheduler extends AsyncScheduler {\n}\n", "import { QueueAction } from './QueueAction';\nimport { QueueScheduler } from './QueueScheduler';\n\n/**\n *\n * Queue Scheduler\n *\n * Put every next task on a queue, instead of executing it immediately\n *\n * `queue` scheduler, when used with delay, behaves the same as {@link asyncScheduler} scheduler.\n *\n * When used without delay, it schedules given task synchronously - executes it right when\n * it is scheduled. However when called recursively, that is when inside the scheduled task,\n * another task is scheduled with queue scheduler, instead of executing immediately as well,\n * that task will be put on a queue and wait for current one to finish.\n *\n * This means that when you execute task with `queue` scheduler, you are sure it will end\n * before any other task scheduled with that scheduler will start.\n *\n * ## Examples\n * Schedule recursively first, then do something\n * ```ts\n * import { queueScheduler } from 'rxjs';\n *\n * queueScheduler.schedule(() => {\n * queueScheduler.schedule(() => console.log('second')); // will not happen now, but will be put on a queue\n *\n * console.log('first');\n * });\n *\n * // Logs:\n * // \"first\"\n * // \"second\"\n * ```\n *\n * Reschedule itself recursively\n * ```ts\n * import { queueScheduler } from 'rxjs';\n *\n * queueScheduler.schedule(function(state) {\n * if (state !== 0) {\n * console.log('before', state);\n * this.schedule(state - 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * console.log('after', state);\n * }\n * }, 0, 3);\n *\n * // In scheduler that runs recursively, you would expect:\n * // \"before\", 3\n * // \"before\", 2\n * // \"before\", 1\n * // \"after\", 1\n * // \"after\", 2\n * // \"after\", 3\n *\n * // But with queue it logs:\n * // \"before\", 3\n * // \"after\", 3\n * // \"before\", 2\n * // \"after\", 2\n * // \"before\", 1\n * // \"after\", 1\n * ```\n */\n\nexport const queueScheduler = new QueueScheduler(QueueAction);\n\n/**\n * @deprecated Renamed to {@link queueScheduler}. Will be removed in v8.\n */\nexport const queue = queueScheduler;\n", "import { AsyncAction } from './AsyncAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nimport { SchedulerAction } from '../types';\nimport { animationFrameProvider } from './animationFrameProvider';\nimport { TimerHandle } from './timerHandle';\n\nexport class AnimationFrameAction extends AsyncAction {\n constructor(protected scheduler: AnimationFrameScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n protected requestAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle {\n // If delay is greater than 0, request as an async action.\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Push the action to the end of the scheduler queue.\n scheduler.actions.push(this);\n // If an animation frame has already been requested, don't request another\n // one. If an animation frame hasn't been requested yet, request one. Return\n // the current animation frame request id.\n return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(() => scheduler.flush(undefined)));\n }\n\n protected recycleAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle | undefined {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n if (delay != null ? delay > 0 : this.delay > 0) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n // If the scheduler queue has no remaining actions with the same async id,\n // cancel the requested animation frame and set the scheduled flag to\n // undefined so the next AnimationFrameAction will request its own.\n const { actions } = scheduler;\n if (id != null && id === scheduler._scheduled && actions[actions.length - 1]?.id !== id) {\n animationFrameProvider.cancelAnimationFrame(id as number);\n scheduler._scheduled = undefined;\n }\n // Return undefined so the action knows to request a new async id if it's rescheduled.\n return undefined;\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\nexport class AnimationFrameScheduler extends AsyncScheduler {\n public flush(action?: AsyncAction): void {\n this._active = true;\n // The async id that effects a call to flush is stored in _scheduled.\n // Before executing an action, it's necessary to check the action's async\n // id to determine whether it's supposed to be executed in the current\n // flush.\n // Previous implementations of this method used a count to determine this,\n // but that was unsound, as actions that are unsubscribed - i.e. cancelled -\n // are removed from the actions array and that can shift actions that are\n // scheduled to be executed in a subsequent flush into positions at which\n // they are executed within the current flush.\n let flushId;\n if (action) {\n flushId = action.id;\n } else {\n flushId = this._scheduled;\n this._scheduled = undefined;\n }\n\n const { actions } = this;\n let error: any;\n action = action || actions.shift()!;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n\n this._active = false;\n\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\n\n/**\n *\n * Animation Frame Scheduler\n *\n * Perform task when `window.requestAnimationFrame` would fire\n *\n * When `animationFrame` scheduler is used with delay, it will fall back to {@link asyncScheduler} scheduler\n * behaviour.\n *\n * Without delay, `animationFrame` scheduler can be used to create smooth browser animations.\n * It makes sure scheduled task will happen just before next browser content repaint,\n * thus performing animations as efficiently as possible.\n *\n * ## Example\n * Schedule div height animation\n * ```ts\n * // html:
\n * import { animationFrameScheduler } from 'rxjs';\n *\n * const div = document.querySelector('div');\n *\n * animationFrameScheduler.schedule(function(height) {\n * div.style.height = height + \"px\";\n *\n * this.schedule(height + 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * }, 0, 0);\n *\n * // You will see a div element growing in height\n * ```\n */\n\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\n\n/**\n * @deprecated Renamed to {@link animationFrameScheduler}. Will be removed in v8.\n */\nexport const animationFrame = animationFrameScheduler;\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\n/**\n * A simple Observable that emits no items to the Observer and immediately\n * emits a complete notification.\n *\n * Just emits 'complete', and nothing else.\n *\n * ![](empty.png)\n *\n * A simple Observable that only emits the complete notification. It can be used\n * for composing with other Observables, such as in a {@link mergeMap}.\n *\n * ## Examples\n *\n * Log complete notification\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n *\n * EMPTY.subscribe({\n * next: () => console.log('Next'),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Outputs\n * // Complete!\n * ```\n *\n * Emit the number 7, then complete\n *\n * ```ts\n * import { EMPTY, startWith } from 'rxjs';\n *\n * const result = EMPTY.pipe(startWith(7));\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // 7\n * ```\n *\n * Map and flatten only odd numbers to the sequence `'a'`, `'b'`, `'c'`\n *\n * ```ts\n * import { interval, mergeMap, of, EMPTY } from 'rxjs';\n *\n * const interval$ = interval(1000);\n * const result = interval$.pipe(\n * mergeMap(x => x % 2 === 1 ? of('a', 'b', 'c') : EMPTY),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following to the console:\n * // x is equal to the count on the interval, e.g. (0, 1, 2, 3, ...)\n * // x will occur every 1000ms\n * // if x % 2 is equal to 1, print a, b, c (each on its own)\n * // if x % 2 is not equal to 1, nothing will be output\n * ```\n *\n * @see {@link Observable}\n * @see {@link NEVER}\n * @see {@link of}\n * @see {@link throwError}\n */\nexport const EMPTY = new Observable((subscriber) => subscriber.complete());\n\n/**\n * @param scheduler A {@link SchedulerLike} to use for scheduling\n * the emission of the complete notification.\n * @deprecated Replaced with the {@link EMPTY} constant or {@link scheduled} (e.g. `scheduled([], scheduler)`). Will be removed in v8.\n */\nexport function empty(scheduler?: SchedulerLike) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\n\nfunction emptyScheduled(scheduler: SchedulerLike) {\n return new Observable((subscriber) => scheduler.schedule(() => subscriber.complete()));\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport function isScheduler(value: any): value is SchedulerLike {\n return value && isFunction(value.schedule);\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\n\nfunction last(arr: T[]): T | undefined {\n return arr[arr.length - 1];\n}\n\nexport function popResultSelector(args: any[]): ((...args: unknown[]) => unknown) | undefined {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\n\nexport function popScheduler(args: any[]): SchedulerLike | undefined {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\n\nexport function popNumber(args: any[], defaultValue: number): number {\n return typeof last(args) === 'number' ? args.pop()! : defaultValue;\n}\n", "export const isArrayLike = ((x: any): x is ArrayLike => x && typeof x.length === 'number' && typeof x !== 'function');", "import { isFunction } from \"./isFunction\";\n\n/**\n * Tests to see if the object is \"thennable\".\n * @param value the object to test\n */\nexport function isPromise(value: any): value is PromiseLike {\n return isFunction(value?.then);\n}\n", "import { InteropObservable } from '../types';\nimport { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being Observable (but not necessary an Rx Observable) */\nexport function isInteropObservable(input: any): input is InteropObservable {\n return isFunction(input[Symbol_observable]);\n}\n", "import { isFunction } from './isFunction';\n\nexport function isAsyncIterable(obj: any): obj is AsyncIterable {\n return Symbol.asyncIterator && isFunction(obj?.[Symbol.asyncIterator]);\n}\n", "/**\n * Creates the TypeError to throw if an invalid object is passed to `from` or `scheduled`.\n * @param input The object that was passed.\n */\nexport function createInvalidObservableTypeError(input: any) {\n // TODO: We should create error codes that can be looked up, so this can be less verbose.\n return new TypeError(\n `You provided ${\n input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`\n } where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`\n );\n}\n", "export function getSymbolIterator(): symbol {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator' as any;\n }\n\n return Symbol.iterator;\n}\n\nexport const iterator = getSymbolIterator();\n", "import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being an Iterable */\nexport function isIterable(input: any): input is Iterable {\n return isFunction(input?.[Symbol_iterator]);\n}\n", "import { ReadableStreamLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport async function* readableStreamLikeToAsyncGenerator(readableStream: ReadableStreamLike): AsyncGenerator {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n return;\n }\n yield value!;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function isReadableStreamLike(obj: any): obj is ReadableStreamLike {\n // We don't want to use instanceof checks because they would return\n // false for instances from another Realm, like an