POSA_LEAKSMS/docs/SECURITY_PLAN_ATTACHMENT_GUIDE.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

12 KiB

보안대책서 첨부·제공자료 가이드

작성일: 2026-05-20
대상: HWP 보안대책서의 4. HWP에 반드시 추가해야 할 보안통제 매트릭스

1. 먼저 정리

보안통제 매트릭스는 사용자가 따로 첨부해야 하는 파일이 아니라, HWP 본문에 들어갈 표입니다.

사용자가 준비해야 하는 것은 표의 마지막 열인 확인 증적입니다.
즉, 심사자가 “그 보안대책이 실제로 적용됐나요?”라고 물었을 때 보여줄 자료입니다.

소스코드, API 인증, 측정값 검증, 관리자 로그인, 비밀값 분리처럼 코드에서 설명 가능한 항목은 SOURCE_SECURITY_EVIDENCE.md에 별도로 정리했습니다.

프로젝트에는 보안대책서 첨부용 증적을 바로 만들기 위한 산출물도 포함되어 있습니다.

산출물 용도
php/security_evidence.php 운영 점검 결과와 보안통제 매트릭스를 화면으로 확인
php/security_evidence.php?format=md HWP에 붙여넣을 Markdown 보안 증적 보고서 다운로드
STM32 USART3 부팅 콘솔 로그 캡처 단말 링크업/DHCP/SNTP/TLS 핸드셰이크/서버 200 OK 증적 확인
docs/SECURITY_EVIDENCE_PACKAGE.md 제출 첨부자료 패키지 구성 순서
docs/OPERATIONS_SECURITY_CHECKLIST.md 월간 운영·보안 점검표
docs/SOURCE_SECURITY_EVIDENCE.md 소스코드 기반 기술통제 설명
docs/evidence/security_plan_mfa_evidence.html 관리자 MFA, 감사로그, 보관기간·백업 증빙 문구와 화면 캡처
php/retention_cleanup.php SMS 로그, 센서 로그, 온습도 측정 이력, 관리자 감사로그 보관기간 정리
scripts/backup_evidence.php 백업 파일 목록과 복구 테스트 결과 Markdown 증빙 생성

2. 결론: 사용자가 지금 제공해야 할 것

최소로는 아래 8가지만 있으면 HWP 보완이 가능합니다.

우선순위 제공자료 왜 필요한가
1 실제 구축 범위 확정 화재/누수/전원 이상을 넣을지, 온습도/오프라인만 넣을지 결정해야 문서 범위가 맞음
2 서버 접속 URL HTTPS 적용, API URL, 대시보드 URL을 문서에 정확히 적기 위함
3 Cafe24 서버 설치 경로 PHP 파일 위치를 증적으로 쓰기 위함
4 STM32 단말 설치 위치와 장비 정보 장비 식별, 설치 위치, 자산대장 항목 작성
5 기관망 연결 방식 단말이 업무망에 붙는지, 별도 인터넷인지, 방화벽 정책이 있는지 확인
6 운영 담당자 역할 누가 점검하고, 누가 SMS를 받고, 누가 경보를 조치하는지 명확화
7 보관기간 기준 SMS 로그, 센서 로그, 측정 이력을 며칠/몇 년 보관할지 결정
8 캡처 가능한 운영 화면 설치 점검, 대시보드, 월간 보고서, SMS 테스트 결과 증적

반대로 아래 항목은 사용자가 일일이 설명하지 않아도 됩니다. 프로젝트 소스코드에서 근거를 뽑아 문서화할 수 있습니다.

항목 처리 방식
API 서명 검증 코드 근거와 HWP 문구 작성 가능
JSON API 필수값 검증 코드 근거와 HWP 문구 작성 가능
측정값 범위 검증 코드 근거와 HWP 문구 작성 가능
서버 임계 판정·쿨다운 config.php METRIC_* 근거와 HWP 문구 작성 가능
관리자 TOTP MFA 코드 근거, 등록 화면 캡처, HWP 문구 작성 가능
관리자 감사로그 코드 근거와 운영 점검 증빙 작성 가능
보관기간 정리 retention_cleanup.php --dry-run 결과로 증빙 가능
백업·복구 증빙 scripts/backup_evidence.php 결과로 증빙 가능
관리자 로그인/세션 보호 코드 근거와 HWP 문구 작성 가능
비밀값 분리 구조 코드 근거와 HWP 문구 작성 가능
보안 헤더 .htaccess 근거 제시 가능
HTTPS URL 구조 코드/설정 예시는 제시 가능. 단 실제 적용 증적은 운영 화면 필요

3. 자료별로 정확히 무엇을 주면 되는가

3.1 실제 구축 범위

아래 중 하나로 답하면 됩니다.

선택 의미 문서 반영
A 이번 구축은 온습도 모니터링만 한다 화재/누수/전원 이상은 향후 확장으로 분리
B 온습도 모니터링 + 장비 오프라인 감지만 한다 현재 프로젝트와 가장 잘 맞음
C 화재/누수/전원 이상도 이번 범위에 포함한다 추가 센서, 코드, 증적이 더 필요

권장 답변:

이번 1차 구축 범위는 서버실 온습도 모니터링, 임계 SMS 경보, 정상복귀 알림, 장비 오프라인 감지, 대시보드/월간보고까지로 한정한다.
화재·누수 및 전원 이상 감지는 향후 확장 범위로 분리한다.

3.2 서버 정보

비밀번호나 API 키 원문은 주면 안 됩니다. 아래처럼 마스킹해서 주면 됩니다.

서비스 도메인: https://example.com
설치 경로: public_html/sht30_monitor/
API URL: https://example.com/sht30_monitor/api/sensor_data.php
대시보드 URL: https://example.com/sht30_monitor/dashboard.php
HTTPS 적용 여부: 적용 / 미적용 / 확인 필요
DB 종류: Cafe24 MySQL

첨부하면 좋은 증적:

  • Cafe24 파일 관리자에서 sht30_monitor 폴더가 보이는 화면
  • setup_wizard.php 점검 화면
  • dashboard.php 로그인 화면 또는 대시보드 화면
  • monthly_report.php 화면

3.3 단말 정보

장비명: STM32 보드 (SHT30 온습도 센서 연계)
장비 ID: stm32-sht30-01
설치 위치: 서버실 / 서버랙 주변 / 기타
센서 모델: SHT30 온습도 센서
측정 주기: 5분 (펌웨어 기본)
네트워크 방식: 유선 LAN / Wi-Fi / 기타
단말 접속 방식: 현장 직접 접속 / SSH / 기타

첨부하면 좋은 증적:

  • 단말과 센서 설치 사진
  • STM32 USART3(PD8/PD9, 115200) 부팅 콘솔 로그(링크업/DHCP/SNTP/TLS 핸드셰이크) 캡처
  • 동일 콘솔에서 서버 200 OK 응답이 보이는 정상 보고 로그 캡처

3.4 네트워크 연결 방식

이 부분이 심사에서 중요합니다. 아래 질문에 답이 필요합니다.

1. 단말이 기관 업무망에 연결되는가?
2. 단말이 별도 인터넷망 또는 별도 Wi-Fi를 사용하는가?
3. 기관 방화벽에서 Cafe24 서버로 나가는 443 포트만 허용하는가?
4. 외부에서 단말로 접속할 수 있는 포트가 열려 있는가?
5. 단말 원격관리는 어떻게 하는가?

권장 구조:

단말은 기관 업무망으로 들어오는 인바운드 접속을 허용하지 않고,
승인된 Cafe24 서버로 HTTPS 아웃바운드 통신만 수행한다.

첨부하면 좋은 증적:

  • 네트워크 구성도
  • 방화벽 허용 정책
  • 단말에서 ss -lntup 실행 결과
  • 기관망 미연결 또는 분리 운영 확인 문구

3.5 운영 담당자 정보

개인 이름을 꼭 문서에 넣을 필요는 없습니다. 역할 중심으로 적으면 됩니다.

사업총괄: 혁신전략실장
사업관리: 정보기반팀
사업수행: 우편혁신AI연구팀
보안검토/점검: 정보보안센터
SMS 수신자: 전산실 운영 담당자 2명
월간 점검 담당: 정보기반팀 담당자

첨부하면 좋은 증적:

  • 운영 담당자 지정표
  • SMS 수신자 현행화 확인표
  • 월간 점검표 양식

3.6 보관기간 기준

기관 내부 기준이 없으면 아래 권장안을 쓰면 됩니다.

데이터 권장 보관기간
SMS 발송 로그 1년
센서 이벤트 로그 1년
온습도 측정 이력 1년
관리자 감사로그 1년
백업 파일 1년 또는 기관 기준

사용자가 결정해서 제공할 내용:

SMS 로그 보관기간: 1년
센서 로그 보관기간: 1년
온습도 측정 이력 보관기간: 1년
관리자 감사로그 보관기간: 1년
기관 내부 규정 우선 적용 여부: 예 / 아니오

3.7 백업·복구 정보

DB 백업 주기: 매일 / 매주 / 매월
설정파일 백업 위치: 운영자 보관 / 암호화 저장소 / 기타
복구 테스트 주기: 월 1회 / 분기 1회 / 필요 시

첨부하면 좋은 증적:

  • DB 백업 파일 목록
  • 복구 테스트 결과표
  • 백업 담당자 지정표

4. 보안통제 매트릭스 행별로 필요한 증적

매트릭스 항목 사용자가 줘야 하는 것 프로젝트에서 이미 준비 가능한 것
사업 범위 이번 구축 범위 확정 문장 HWP 교체 문구
네트워크 단말 네트워크 연결 방식, 방화벽 정책 네트워크 구성도 이미지
전송구간 실제 서비스 URL, HTTPS 적용 여부 API URL 구조, 설치 문서
API 인증 API 키 원문이 아니라 “서버/단말 키 일치 확인” 결과 코드의 서명 검증 설명
비밀값 설정파일 권한 캡처 config.local.php, firmware/common/secrets.h(APP_API_KEY) 구조 설명
관리자 인증 관리자 로그인 화면, MFA 등록 증빙, 감사로그 비밀번호 해시, TOTP MFA, 세션 보호, 실패 제한 코드 설명
측정/임계 임계 운영 기준(METRIC_*) 측정값 범위 검증, 서버 임계 판정·쿨다운 설명
개인정보 SMS 수신자 관리 기준 SMS 설정 구조, 로그 테이블 설명
로그관리 로그 보관기간, 관리자 감사로그 sensor_log, sensor_metric, sms_log, php/var/admin_audit.log 설명
백업 DB/설정 백업 주기, 복구 테스트 결과 backup_evidence.php 결과와 백업·복구 문구
패치 월간 패치 점검 담당자 점검표 양식
물리보안 설치 사진, 자산 정보 자산대장 양식
장애대응 임계 경보/오프라인 대응 담당자 대시보드, 임계 경보, 월간보고 설명

5. 지금 당장 준비할 첨부자료 체크리스트

필수

  • 실제 구축 범위 확정 문장
  • 서버 도메인과 설치 경로
  • 단말 설치 위치와 장비 ID
  • 네트워크 연결 방식 설명
  • SMS 수신자 관리 기준
  • 로그/측정 이력 보관기간 기준
  • 관리자 MFA 등록 확인표
  • 임계 설정(METRIC_*) 확인 화면
  • setup_wizard.php 점검 화면 캡처
  • 대시보드 화면 캡처
  • 단말 서비스 상태 화면 캡처

있으면 통과 가능성을 높이는 자료

  • 방화벽 정책 또는 네트워크 분리 확인 자료
  • 설치 사진
  • 자산관리대장
  • 테스트 SMS 수신 화면
  • 측정값 저장/임계 경보 테스트 결과
  • DB 테이블 생성 화면
  • 월간 보고서 화면
  • 백업 파일 목록
  • 보관기간 정리 dry-run 결과
  • 백업·복구 증빙 Markdown
  • 복구 테스트 결과
  • 월간 보안점검표

6. 사용자에게 요청할 답변 양식

아래 양식만 채워주면 보안대책서에 넣을 표와 첨부자료 목록을 확정할 수 있습니다.

1. 이번 구축 범위:
   예) 서버실 온습도 모니터링 + 임계 SMS 경보 + 장비 오프라인 감지 + 대시보드 + 월간보고

2. 서버 도메인:
   예) https://example.com

3. 서버 설치 경로:
   예) public_html/sht30_monitor/

4. 단말 설치 위치:
   예) 서버실 서버랙 하단

5. 단말 네트워크 방식:
   예) 별도 Wi-Fi / 기관망 / 유선 LAN / 기타

6. 외부에서 단말로 접속 가능 여부:
   예) 불가 / SSH만 가능 / 확인 필요

7. SMS 수신자 수:
   예) 운영 담당자 2명

8. 온습도 임계값:
   예) 고온30/저온10℃, 고습70/저습20%

9. 로그 보관기간:
   예) 센서 1년, SMS 1년, 측정 이력 1년

10. 백업 주기:
   예) DB 주 1회

7. API 키와 비밀번호 제공 금지

다음 값은 문서 작성자에게 원문으로 제공하지 않는 것이 원칙입니다.

  • DB 비밀번호
  • API 키 원문
  • SMS secure key
  • 관리자 원문 비밀번호
  • ADMIN_TOTP_SECRET 원문
  • 서버 FTP/SFTP 비밀번호
  • 단말 로그인 비밀번호

문서에는 다음처럼 마스킹해서 적습니다.

API_KEY: 운영 비밀값으로 서버와 단말에 동일 설정, 원문 미기재
SMS_SECURE: Cafe24 SMS 인증키, 원문 미기재
DB_PASS: config.local.php에만 저장, 원문 미기재
ADMIN_TOTP_SECRET: 운영 비밀값으로 서버에만 저장, 증빙에는 원문 미기재 또는 증빙용 임시 키 사용