10장: 로깅, 모니터링 및 사고 대응
FileBolt의 관찰 가능성은 영지식 경계와 일치해야 합니다. 시스템은 결함을 식별하고, 공격을 감지하고, 성능을 정량화해야 합니다. 새로운 민감한 데이터 유출 벡터를 도입하지 않고. 이 장에서는 기록되는 이벤트를 정의하고, 특정 정보 기록을 명시적으로 금지하고, 경고 및 이상 탐지 방법을 간략하게 설명합니다. 보안 사고 대응(IR) 프로세스와 외부 커뮤니케이션 원칙을 자세히 설명합니다.
10.0 요약
- SHOULD: 로그 및 모니터링은 필요한 운영 및 보안 이벤트만 다루고 집계 및 샘플링을 활용하여 원시 세부 정보 보존을 최소화합니다.
- 해서는 안 된다: 모든 로그, APM 또는 오류 보고서에는 CEK, URL 조각(
location.hash) 또는 조각이 포함된 전체 URL입니다. - 해서는 안 된다: 일반 텍스트 콘텐츠, 해독된 청크 또는 파생 가능한 키 자료를 기록하지 마세요.
- MUST: 격리 조치를 통해 열거, 무차별 대입, 트래픽 급증, 변칙적 패턴에 대한 탐지 및 경고를 설정합니다.
- MUST: 사고 대응 프로세스(분류, 격리, 법의학, 교정, 검토, 커뮤니케이션)를 유지합니다.
10.1 기록된 이벤트(미니멀리즘)
시스템 로그 및 모니터링은 "운영 및 보안에 필요한" 이벤트 집합만 다루어야 하며 사용자 콘텐츠나 민감한 자격 증명이 관찰 시스템에 수집되는 것을 방지해야 합니다. 이벤트는 수명주기, 인증, 스토리지/네트워크, 보안 보호로 분류되며 집계가 권장됩니다.
10.1.1 전송 수명주기 이벤트
- 전송 생성(transferId 생성)
- 청크 업로드 완료(일반 텍스트가 아닌 암호 텍스트 수준에서 기록됨)
- 매니페스트 쓰기/업데이트
- 만료 정리, 사용자 삭제/해지(정리 작업 트리거 및 완료 포함)
- 다운로드 시작/완료(암호문 다운로드 수준에서 측정)
10.1.2 인증 및 권한 부여 이벤트
- 세션 토큰 발급, 유효성 검사 실패(범위 불일치, 만료, 취소 등)
- 장기 로그인 토큰 검증 실패(관리자 작업 거부됨)
- 의심스러운 액세스 패턴: 401/403/404의 비정상적인 급증
참고: "결과 및 원인 코드"만 기록하십시오. 해서는 안 된다 토큰 일반 텍스트, 권한 부여 헤더 일반 텍스트 또는 서명 매개변수 일반 텍스트를 기록합니다.
10.1.3 시스템 상태 및 성능 지표
- 요청 지연 시간(p50/p95/p99), 오류율, 처리량
- 객체 스토리지 읽기/쓰기 실패율, 원본 가져오기 실패율, 재시도 횟수
- 엣지 노드 이상, 대기열 백로그, 백그라운드 정리 작업 성공률
- 대역폭 및 트래픽 추세(집계된 측정기준)
10.1.4 보안 보호 이벤트
- 속도 제한 트리거, WAF/방화벽 규칙 적중
- 의심되는 열거/무차별 행동에 대한 임계값 트리거
- 비정상적인 동시성 및 트래픽 패턴(동일 소스의 높은 동시성, 비정상적인 리소스 열)
10.1.5 집계 및 샘플링
- SHOULD: 세분화된 로그를 줄이기 위해 분/시간 단위로 집계 횟수와 지연 시간 분위수를 집계합니다.
- SHOULD: 오류 및 비정상적인 경로에 대해서만 필요한 세부 정보를 유지하면서 성공 빈도가 높은 요청을 샘플링합니다.
- SHOULD: 이상 이벤트에 대한 안정적인 분류 필드(예: eventType, ReasonCode)를 유지하여 감사 및 기계 분석을 용이하게 합니다.
10.2 금지된 정보(CEK, 조각, 자격 증명)
영지식 약속을 유지하는 핵심은 모든 관측 시스템 전반에 걸쳐 "민감한 데이터 금지" 정책을 엄격하게 시행하는 것입니다. 이 정책은 서버 로그, APM, 오류 보고, 제3자 모니터링, 클라이언트 로그 및 브라우저 콘솔 출력을 다루어야 합니다.
10.2.1 서버측에서는 녹화하면 안 됩니다.
- CEK (콘텐츠 암호화 키) 및 파생 가능한 자료
- URL 조각 (
#...),location.hash및 조각이 포함된 전체 URL - 일반 텍스트 콘텐츠: 파일 일반 텍스트, 미리보기 콘텐츠, 해독된 청크 또는 일반 텍스트 요약
- 민감한 자격 증명 일반 텍스트: 세션 토큰, 장기 토큰, 인증 헤더 일반 텍스트, 서명된 URL의 서명 필드 일반 텍스트
디버깅을 위해 로깅 URL이 필요한 경우: MUST 정리(조각 제거, 민감한 쿼리 수정 또는 제거)하고 이를 코드 수준에서 시행합니다(수동 규칙에 의존하지 않음).
10.2.2 클라이언트측에서는 녹음하면 안 됩니다.
- 인쇄하지 않음
location.href(조각이 포함될 수 있음) 프로덕션 환경 - 오류 보고서에 조각, CEK 또는 noncePrefix가 있는 URL을 포함하지 마세요.
- 디버그 로그 및 개발 도구 출력은 기본적으로 비활성화되거나 최소화되어야 합니다.
SHOULD: 출력/보고 전에 내부적으로 URL 삭제 및 민감한 필드 필터링을 수행하는 통합 로그/보고 기능을 프런트엔드에 캡슐화합니다.
10.3 지표 및 경고 모니터링(가용성, 성능, 보안)
10.3.1 가용성 및 성능 경고
- 오류율 경고: 5xx의 급증, 4xx의 비정상적 증가(인증 실패와 남용 구분)
- 지연 시간 경고: p95/p99 임계값 위반, 지역 원본 가져오기 이상
- 스토리지 경고: 객체 스토리지 쓰기 실패 증가, 읽기 시간 초과
- 정리 작업 경고: 만료 정리 백로그, 과도한 삭제 작업 재시도
10.3.2 보안 경고
- 비율제한 적중률 비정상적 상승
- 동일한 출처의 고주파수 401/403/404, 열거/무차별 대입 의심
- 비정상적인 단일 리소스 다운로드 대역폭/동시성, 의심되는 트래픽 플러딩 또는 핫링크
- 중요한 정책 변경(예: WAF 규칙, CSP/헤더 변경)은 변경 감사 및 경고(해당하는 경우)를 트리거해야 합니다.
10.3.3 경보 거버넌스
- SHOULD: 순환/에스컬레이션 경로를 사용하여 알림(P0/P1/P2)을 분류합니다.
- SHOULD: 경고 피로를 방지하기 위해 노이즈가 있는 측정항목에 디바운스/창 집계를 적용합니다.
- SHOULD: 민감한 데이터를 제외하고 각 경고에 최소한의 진단 정보(원인 코드, 추세 차트, 영향을 받는 지역/경로)를 첨부합니다.
10.4 이상 탐지 및 남용 식별
파일 전송 서비스는 당연히 열거, 무차별 공격, 트래픽 범람 및 리소스 남용의 위험에 직면합니다. 이 섹션에서는 감지 가능한 신호와 대응 원칙을 간략하게 설명합니다. 특정 임계값과 전략은 비즈니스 규모와 오탐지 비용에 따라 동적으로 조정되어야 합니다.
10.4.1 일반적인 이상 패턴
- Enumeration: 짧은 시간에 transferId/리소스 경로를 대량으로 조사하고 404/401/403에서 급증합니다.
- 무차별 대입: 단축 코드/비밀번호/토큰에 대한 시도 빈도가 높고, 비정상적인 실패율 곡선.
- 교통 범람: 단일 리소스에 대한 비정상적인 대역폭, 동일한 소스의 대규모 동시 연결, 반복 다운로드.
- 프로토콜 변칙: 불합리한 청크 순서, 중복 업로드, 잦은 인터럽트/재시도, 비정상적인 UA 패턴.
10.4.2 완화 전략(원칙)
- SHOULD: 속도 제한, 계층형 금지, 인증 확인 메커니즘(해당되는 경우), ASN/지역/지문 기반 동적 정책.
- SHOULD: 오탐에 민감한 경로(일반 사용자는 자주 다운로드할 수 있음)에 대해 보다 온화한 전략(예: 지연, 분할된 제한)을 채택합니다.
- MUST: 수행된 작업에 대해 감사 가능한 트리거(원인 코드, 임계값 범주)를 유지하고 지원 채널을 제공합니다(해당하는 경우).
10.5 사고 대응 프로세스
FileBolt는 신속한 피해 관리, 검토 가능성 및 투명한 의사소통을 보장하기 위해 보안 사고 대응(IR) 프로세스를 확립해야 합니다. 영지식 약속에 잠재적으로 영향을 미칠 수 있는 이벤트(예: XSS, 공급망 삽입, 단편 로그 유출)는 가장 높은 우선순위로 처리되어야 합니다.
- Triage: 영향 범위 및 심각도(예: P0/P1/P2)별로 분류하고 에스컬레이션 경로 및 소유자를 정의합니다.
- Containment: 위험 소스를 신속하게 격리합니다(공격 소스 금지, 기능 일시적 비활성화, 정책 강화, 키/토큰 순환).
- 법의학 및 검토: 최소한의 로그 및 지표를 기반으로 타임라인을 재구성합니다. 결정, 영향, 교정 및 개선 사항을 문서화합니다.
- 교정 및 검증: 패치 배포, 회귀 테스트, 보안 검증, 필요한 경우 타사 검사 재테스트.
- 커뮤니케이션 및 공개: 공격 표면을 확대하지 않고 사용자와 대중에게 투명하게 설명합니다. 필요한 경우 상태 페이지 사건 보고서를 게시합니다.
외부 커뮤니케이션에서는 핵심 자료 또는 일반 텍스트가 잠재적으로 노출되었는지 여부, 영향 범위, 취해진 조치, 사용자가 취해야 하는 조치(있는 경우) 등을 명확히 해야 합니다.
10.6 데이터 보존 및 접근 제어
로그 및 모니터링 데이터는 그 자체로 민감한 자산입니다. 유출 및 남용 위험을 최소화하려면 가장 짧은 유용한 보존 기간과 최소 권한 액세스 제어를 적용해야 합니다.
- SHOULD: 로그 유형에 따라 차별화된 보존 기간을 설정합니다(오류 및 보안 이벤트의 경우 약간 더 길고, 성공적인 요청 세부정보의 경우 더 짧거나 보존되지 않음).
- SHOULD: 로그 및 모니터링 플랫폼에 RBAC(최소 권한 액세스)를 사용하고 액세스 감사를 유지합니다.
- SHOULD: 로그 내보내기/공유 시 삭제 및 최소화를 수행합니다(민감한 자격 증명 및 PII 전달 금지).
10.7 제3자 모니터링 및 통합 원칙
타사 APM/오류 추적 도구는 기본적으로 URL, 헤더, 양식 필드 및 장치 정보를 수집할 수 있습니다. 제3자 모니터링을 사용하는 경우 수집 경계가 영지식 약속을 위반하지 않는지 확인하세요.
- MUST: 다운로드/암호 해독 페이지에 타사 스크립트를 로드하지 마십시오(9장과 일치).
- MUST: 타사 컬렉션을 명시적으로 구성합니다. 조각이 없고 민감한 헤더 일반 텍스트가 없으며 일반 텍스트 콘텐츠가 없습니다.
- SHOULD: 보고를 위해 URL 삭제를 통합합니다. 민감한 필드가 포함될 가능성이 있는 페이로드를 금지하거나 강력하게 마스킹합니다.
- SHOULD: 엔드포인트 수집 표면을 줄이기 위해 클라이언트 측 세부 추적보다 서버 측 집계 지표에 우선순위를 둡니다.
10.8 관련 청구 ID(예약됨)
이 장에서는 "민감한 데이터 로깅, 경고 및 IR, 제3자 모니터링 제약 조건 금지"를 다룹니다. 해당 청구 ID가 부록: 청구 ID 마스터 목록 유일한 권위 있는 출처로 사용됩니다.