POSA_LEAKSMS/docs/SECURITY_EVIDENCE_PACKAGE.md
유창욱 90f121e14c chore: import codebase with security hardening
SHT30 온습도 모니터링 시스템 전체 소스(서버 PHP, STM32 펌웨어, SQL, 테스트).
전체 코드리뷰에서 도출된 보안 하드닝 10건 반영:
- 요청 서명 HMAC-SHA256 전환(펌웨어 sig.c/서버 config.php/호스트 패리티 동시)
- 재전송 방어 + 기본 API_KEY fail-closed + 디바이스 문자열 정제(api/sensor_data.php)
- 오프라인 SMS 중복 발송 경합 제거(cron_heartbeat.php, 원자적 선점)
- CSV 수식 주입 방지(monthly_report.php), 감사로그 회전 락(retention_cleanup.php)
- 브루트포스 카운터 원자화(login.php), 예시 TOTP 비밀키 무효화, 마이그레이션 멱등화

_backup/(하드코딩 실 비밀값 포함)·config.local.php·런타임 상태는 .gitignore 제외.
2026-06-20 09:37:40 +09:00

87 lines
5.3 KiB
Markdown

# 보안대책서 첨부자료 패키지
작성일: 2026-05-20
목적: HWP 보안대책서에 붙일 증적 자료를 빠짐없이 모으기 위한 패키지 구성안
## 1. 제출 패키지 구성
아래 순서로 첨부하면 심사자가 “통제 항목 → 실제 적용 증적 → 운영 절차”를 따라 확인하기 쉽습니다.
| 순서 | 자료 | 생성/준비 방법 |
|---:|---|---|
| 1 | 보안통제 매트릭스 | `security_evidence.php?format=md` 다운로드 후 HWP 표로 반영 |
| 2 | 서버 운영 점검 결과 | `setup_wizard.php`, `security_evidence.php` 화면 캡처 |
| 3 | 월간 운영 보고서 | `monthly_report.php` PDF 또는 CSV |
| 4 | 단말 운영 증적 | STM32 USART3(PD8/PD9, 115200) 부팅 콘솔 로그(링크업/DHCP/SNTP/TLS/서버 200) 캡처 |
| 5 | 네트워크 증적 | 방화벽 정책, 단말 인바운드 차단 확인, HTTPS 인증서 화면 |
| 6 | 물리 설치 증적 | STM32 보드, SHT30 센서 설치 사진과 장비 ID |
| 7 | 관리자 접근통제 증적 | MFA 등록 화면, 로그인 화면, 감사로그 존재 확인 |
| 8 | 측정/임계 경보 증적 | 측정값 저장(`sensor_metric`), 종류별 경보·정상복귀 SMS(`sms_log`) 화면 |
| 9 | 운영 절차 증적 | 운영·보안 점검표, 보관기간 정리 dry-run, 백업 파일 목록, 수신자 현행화 확인 |
| 10 | 소스코드 기반 설명 | `SOURCE_SECURITY_EVIDENCE.md`의 기술통제 설명 |
> 보안대책서용 구성도/흐름도 PNG는 `scripts/generate_security_plan_images.py`로 생성하며(온습도 흐름으로 갱신됨), **PNG 재생성은 운영자가 `python scripts/generate_security_plan_images.py`로 수행**합니다.
## 2. 프로젝트에서 자동 또는 반자동으로 만들 수 있는 자료
| 자료 | 파일/화면 | 비고 |
|---|---|---|
| 보안 증적 보고서 | `php/security_evidence.php` | 운영 점검 결과와 보안통제 매트릭스 |
| Markdown 증적 | `php/security_evidence.php?format=md` | HWP 붙여넣기용 |
| 단말 증적 | STM32 USART3 부팅 콘솔 로그 캡처 | 비밀값 원문 없이 링크업/DHCP/SNTP/TLS/서버 200 상태만 출력 |
| 월간 보고서 | `php/monthly_report.php` | 생성 시각과 보고 범위 포함 |
| 설치 점검 | `php/setup_wizard.php` | DB, 설정, 권한, SMS 테스트 |
| MFA 등록 증빙 | `docs/evidence/security_plan_mfa_evidence.html` | 보안대책서 삽입 문구, MFA 화면 캡처, Mermaid 흐름도 |
| 기술 설명 | `docs/SOURCE_SECURITY_EVIDENCE.md` | API, HTTPS, 측정값 검증, 세션, 비밀값 분리 설명 |
| 운영 점검표 | `docs/OPERATIONS_SECURITY_CHECKLIST.md` | 월간 점검 양식 |
| 보관기간 정리 결과 | `php/retention_cleanup.php --dry-run` | SMS 로그, 센서 로그, 온습도 측정 이력, 관리자 감사로그 정리 대상 확인 |
| 백업·복구 증빙 | `scripts/backup_evidence.php` | 백업 파일 목록, 설정/감사로그 존재 여부, 복구 테스트 결과 |
## 3. 운영자가 반드시 채워야 하는 자료
코드로 대신 만들 수 없는 실제 운영 증적입니다.
| 항목 | 필요한 내용 |
|---|---|
| 실제 도메인 | HTTPS 접속 화면, 인증서 정보, Cafe24 SSL 설정 |
| 설치 위치 | STM32 보드와 SHT30 센서 설치 사진, 장비 ID, 설치 장소 |
| 네트워크 | 단말이 연결된 망, 방화벽 정책, 외부 인바운드 차단 여부 |
| 운영자 | 점검 담당, SMS 수신자, 장애 대응 담당 역할 |
| 보관기간 | 센서 로그, SMS 로그, 온습도 측정 이력, 감사로그 보관기간 |
| 백업 | DB/설정 파일 백업 주기와 최근 백업 파일 목록 |
| 관리자 MFA | 실제 운영 담당자 인증 앱 등록 확인, 담당자 변경 시 재등록 이력 |
| 감사로그 | 로그인 성공/실패, MFA 등록 검증 로그 파일 존재 여부 |
## 4. 권장 폴더명
보안대책서와 함께 제출할 파일을 아래처럼 묶습니다.
```text
security-evidence-YYYYMMDD/
01_security_control_matrix.md
02_setup_wizard.png
03_security_evidence.png
04_monthly_report.pdf
05_device-security-evidence.md
06_https_certificate.png
07_network_firewall_policy.pdf
08_installation_photos/
09_mfa_evidence.html
10_metric_alert_sms.png
11_retention_cleanup_dry_run.json
12_backup_restore_evidence.md
13_operations_security_checklist.md
```
## 5. 제출 전 점검
- [ ] API 키, SMS secure key, DB 비밀번호, 관리자 원문 비밀번호, `ADMIN_TOTP_SECRET` 원문이 첨부자료에 노출되지 않는다.
- [ ] `security_evidence.php` 점검 결과에 중요 실패 항목이 있으면 조치 결과 또는 예외 사유를 적는다.
- [ ] 단말 증적에는 환경변수 존재 여부만 있고 원문 값은 없다.
- [ ] MFA 증빙은 운영 비밀키가 아닌 증빙용 임시 키 또는 마스킹된 키를 사용한다.
- [ ] 측정/경보 증빙은 측정값 저장(`sensor_metric`)과 종류별 경보·정상복귀 SMS(`sms_log`)를 함께 보여준다.
- [ ] 실제 도메인은 `https://`로 접속되는 화면을 포함한다.
- [ ] 네트워크 증적에는 단말로 들어오는 불필요한 포트가 없다는 근거가 포함된다.
- [ ] 월간 보고서에는 생성 시각과 보고 범위가 보인다.
- [ ] 보관기간 정리는 `--dry-run` 결과를 먼저 보관하고, 실제 삭제는 백업 완료 후 수행한다.
- [ ] 백업 파일 목록과 담당자 역할이 최신이다.