관리자 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 등록 화면이다. 운영 환경에서는 실제 운영 비밀키를 별도로 생성하여 사용한다.

Google Authenticator MFA 등록 화면 캡처

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

4. 보안 흐름도

관리자 ID/PW 입력 비밀번호 검증 bcrypt 해시 확인 TOTP MFA 검증 6자리 일회용 코드 관리자 세션 접근 허용 MFA 최초 등록 MFA_SETUP_TOKEN 임시 접근 인증 앱 등록 Base32 키 / otpauth URI 외부 API 전송 없음 운영 설정 반영 ADMIN_TOTP_SECRET 등록 토큰 제거 비인가 접근 차단 감사 로그 및 보존기간 관리

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 검증만 수행