// SECURITY AUDIT

보안 감사 보고서

신뢰하되, 검증하세요 — 모든 감사 결론을 여기에 공개합니다.

감사 개요

공개됨
📅 감사일: 2026-06-01📄 범위: lib/의 전체 159개 .dart 파일 · plugins/의 14개 .html 플러그인 · android/ 설정🔬 방법: 파일 간 교차 검증 + 하향식 계층 감사
0
심각
0
높음
0
중간
0
낮음
0
안전 확인

총평: 프로젝트의 보안 태세는 양호합니다. Hive 민감 데이터 암호화, 샌드박스 격리, HTTPS 강제 등 핵심 메커니즘이 제대로 구현되어 있습니다. 주요 문제는 Android 빌드 머신의 키 관리, 암호화 범위 밖의 일부 Hive Box, 플러그인 계층의 비밀번호 입력 방식에 집중되어 있습니다.

🔧
보고서 발표 후 수정 진행 상황: 이후 버전에서 여러 항목이 순차 수정되었습니다 — API 키를 공급업체별 암호화 버킷에 저장(v1.7.0), 비밀번호 관리자의 가짜 암호화를 진짜 AES-256-GCM으로 재작성(v1.7.0), 2FA 영구화(v1.7.0), 네트워크 도구 SSL 인증서 엄격 검증(v1.7.0), 클립보드 민감 필드 필터링(v1.7.0), 비밀번호 변경 시 자동 재암호화(v1.1.0). 최신 수정 내용은 변경 내역을 참조하세요.

확인된 실제 문제

🔴 심각

심각
#1 Android 서명 키 비밀번호 평문 저장 — 빌드 머신의 서명 키 암호문구가 설정에 평문으로 저장되어 있어, 빌드 머신 유출 = 서명 키 유출입니다.

🟠 높음

높음
#2 ai_plugin_projects Box가 aiApiKey를 암호화 없이 저장 — 프로젝트 단위 AI 키가 Hive에 평문 저장되어 암호화 범위 밖입니다.
높음
#3 플러그인 마켓에 하드코딩된 테스트 라이선스 키 — 테스트 자격 증명이 릴리스 패키지에 포함되어서는 안 됩니다.
높음
#4 REQUEST_INSTALL_PACKAGES 권한 — 알 수 없는 소스에서 앱 설치를 요청하는 권한으로, 사용 범위 최소화가 필요합니다.

🟡 중간

중간
#5 바이두 번역 API 키가 GET URL 파라미터로 전송 — 키가 접근 로그 / 기록에 남을 수 있습니다.
중간
#6 플러그인이 prompt()로 암호화 비밀번호 입력 — 샌드박스 내 비밀번호 입력은 호스트가 제공하는 보안 키보드 채널을 사용해야 합니다.
중간
#7 WebDAV 자동 백업 비밀번호를 Hive에 저장 — 암호화 Box 범위 안인지 확인이 필요합니다.
중간
#8 RECORD_AUDIO 권한 — 녹음 시에만 온디맨드로 요청하고 상주 권한은 피해야 합니다.

🟢 낮음

낮음
#9 sticky_notes Box가 사용자 메모를 암호화 없이 저장
낮음
#10 가계부 플러그인이 재무 데이터를 평문 저장
낮음
#11 requestLegacyExternalStorage 호환 플래그 — targetSdk 업그레이드에 맞춰 제거 권장
낮음
#12 북마크 플러그인이 http:// URL 허용 — 평문 페이지는 기본적으로 다운그레이드 경고를 표시해야
낮음
#13 오류 로그 내보내기가 내부 경로 노출 가능 — 스택 트레이스에 파일 경로와 코드 구조 포함

⚪ 수동 확인 필요 의심 사항

의심
S1 플러그인의 innerHTML 광범위 사용(13/14 플러그인) — 대부분 escapeHtml()을 구현했고 샌드박스 CSP가 외부 스크립트를 제한하지만, 이스케이프 누락 시 DOM XSS 가능성이 있습니다.
의심
S2 플러그인의 console.log / console.error 호출 — 출력이 logcat에 기록되며 내용은 사용자 데이터가 없는 오류 객체뿐, 위험 낮음.

안전 확인된 설계

다음 보안 메커니즘은 파일 간 교차 검증을 통과하여 안전하고 유효함이 확인되었습니다:

#보안 메커니즘검증 경로상태
1Hive 암호화 키 하드웨어 보호FlutterSecureStorage → Android Keystore / iOS Keychain
27/7 민감 Box 전체 암호화main.dart에서 교차 검증, 민감 Box 모두 cipher로 열림
3백업 암호화 강제비밀번호 없음 → UnencryptedBackupException
4백업 암호화 알고리즘PBKDF2(300k 라운드) + AES-256-GCM
5릴리스 로그 오버헤드 제로모든 로그 출력이 kDebugMode 내부
6WebDAV HTTPS 강제HTTP 설정 직접 거부
7샌드박스 eval / Function 비활성화Object.defineProperty 완전 커버
8샌드박스 CSP 주입meta 태그 + HTTP 헤더 이중 경로
9경로 탐색 방지플러그인 가져오기와 백업 복원 모두 보안 검증
10기타 확인 항목백업 암호 v3, 복원 프로세스 원자화, 민감 페이지 FLAG_SECURE 등
🔬
전체 보고서(항목별 코드 위치와 수정 제안 포함)는 오픈소스 리포지토리와 함께 공개됩니다. 현재는 요점판입니다. 보안은 우리의 기반 — 문제가 있으면 피드백으로 알려주세요.
매트릭스 모드: 켜짐 — 다시 입력하거나 ESC로 종료