# 관리자 MFA 및 운영 보안 보완 증빙

작성일: 2026-05-28 / 대상: SHT30 온습도 모니터링 시스템 관리자 웹 기능

## 1. 보안대책서 삽입 문구

### 관리자 접근통제 보완

본 시스템은 관리자 페이지 접근 시 단일 비밀번호 인증에 의존하지 않도록 TOTP(Time-based One-Time Password) 기반의 다중인증(MFA)을 적용하였다. 관리자 계정은 비밀번호 검증 후 Google Authenticator, Microsoft Authenticator, Authy 등 표준 TOTP 인증 앱에서 생성한 6자리 일회용 인증코드를 추가로 검증해야 한다. TOTP 검증은 서버 내부에서 수행되며, 비밀키는 외부 Google API 또는 외부 QR 생성 서비스로 전송하지 않는다.

최초 등록 또는 담당자 변경 시에는 임시 설정 토큰인 `MFA_SETUP_TOKEN`을 사용하여 등록 화면에 접근한다. 등록 화면은 Base32 수동 입력 키와 `otpauth://` 표준 등록 URI를 제공하고, 운영자는 인증 앱에 등록한 뒤 6자리 코드를 검증한다. 검증 완료 후 발급된 `ADMIN_TOTP_SECRET` 값을 서버 설정에 반영하며, 등록 완료 즉시 `MFA_SETUP_TOKEN`은 삭제 또는 빈 값으로 변경한다.

관리자 인증 성공, 실패 및 MFA 등록 검증 이벤트는 감사 로그에 기록되도록 하여 비인가 접근 시도 및 계정 운영 이력을 사후 확인할 수 있도록 하였다. 운영 로그는 보존기간 정책에 따라 정리할 수 있도록 정리 스크립트와 백업 증빙 생성 절차를 마련하였다.

## 2. 구현 항목 요약

구분 | 구현 내용 | 보안 효과
--- | --- | ---
관리자 MFA | `ADMIN_TOTP_SECRET` 기반 TOTP 6자리 코드 검증 | 관리자 비밀번호 유출 시에도 추가 인증 없이는 관리자 페이지 접근 차단
MFA 등록 절차 | `setup_mfa.php`에서 Base32 키와 `otpauth://` URI 제공 | Cafe24 웹호스팅 환경에서도 별도 Google API 없이 인증 앱 등록 가능
임시 등록 토큰 | `MFA_SETUP_TOKEN`으로 최초 등록 화면 접근 제한 | MFA 설정 페이지의 임의 접근 및 비인가 등록 시도 방지
감사 로그 | 로그인 성공/실패 및 MFA 등록 검증 이벤트 기록 | 비인가 접근 시도 추적 및 운영 이력 증빙 가능
보존기간/백업 증빙 | 보존기간 정리 스크립트와 백업 증빙 생성 스크립트 추가 | 운영 로그 최소 보관, 복구 가능성 및 운영 증빙 확보

## 3. 실제 화면 캡처

아래 화면은 로컬 증빙용 임시 토큰과 임시 TOTP 키를 사용하여 렌더링한 Google Authenticator 호환 MFA 등록 화면이다. 운영 환경에서는 실제 운영 비밀키를 별도로 생성하여 사용한다.

캡처 파일: `docs/evidence/mfa_setup_page_capture.png`
증빙용 URL: `/setup_mfa.php?token=증빙용임시토큰`

## 4. 보안 흐름도

## 5. Mermaid 원문

보안대책서 또는 별도 Markdown 문서에서 재렌더링할 수 있도록 Mermaid 원문을 함께 첨부한다.

    flowchart LR
        A[관리자 ID/PW 입력] --> B[비밀번호 bcrypt 검증]
        B --> C{TOTP MFA 코드 검증}
        C -- 성공 --> D[관리자 세션 발급]
        C -- 실패 --> E[로그인 차단 및 감사 로그 기록]

        F[MFA 최초 등록] -- MFA_SETUP_TOKEN 임시 접근 --> G[setup_mfa.php]
        G -- Base32 키 / otpauth URI 제공 --> H[Google Authenticator 등록]
        H -- 6자리 코드 검증 --> I[ADMIN_TOTP_SECRET 운영 설정 반영]
        I -- 등록 후 --> J[MFA_SETUP_TOKEN 삭제 또는 빈 값 처리]

        D -- 운영 이력 --> M[관리자 감사 로그]
        D -- 보존기간 정책 --> N[로그 정리 및 백업 증빙]

## 6. 검증 결과

검증 항목 | 결과
--- | ---
MFA 등록 화면 실제 렌더링 | Chrome headless 캡처 완료: `mfa_setup_page_capture.png`
보안 하드닝 회귀 테스트 | `php tests\security_hardening_test.php` 통과
PHP 문법 검사 | `admin_security.php`, `setup_mfa.php`, `config.php`, `config.local.example.php` 통과
외부 비밀키 전송 여부 | 외부 Google API 또는 외부 QR 생성 API 미사용. 서버 내부 TOTP 검증만 수행