본문으로 건너뛰기

앱 보안 가이드

이 문서는 Pleos Connect 앱 개발 시 준수해야 할 보안 가이드를 제공합니다. 본 가이드라인은 단순한 권고를 넘어, 앱 사용자의 개인정보와 민감한 차량 데이터를 보호하기 위한 필수 기준을 제시합니다. 모든 앱은 높은 보안 수준을 유지해 사용자가 안심하고 서비스를 이용할 수 있도록 개발되어야 합니다. 본 가이드라인을 준수하지 않을 경우 앱 심사를 통과하지 못할 수 있습니다.

민감 데이터 관리​

앱 개발 시 개인 식별 정보(PII), 금융 정보, 민감한 차량 데이터, 인증 토큰, 보안상 비밀로 관리해야 하는 API 키 및 암호화 키 등 민감한 정보가 노출되지 않도록 보호해야 합니다. 불필요한 민감정보 저장을 줄이고, 기능상 저장이 필요한 경우에는 다음 원칙을 준수해 주시기 바랍니다.

  • 데이터 암호화: 기기에 저장하는 민감정보는 저장 위치와 관계없이 암호화하여 보호해야 합니다. 앱 내/외부 저장소, 캐시, SQLite 데이터베이스, SharedPreferences 등에 동일한 원칙이 적용됩니다. 내부 저장소의 샌드박스 보호와 함께 앱 수준의 암호화를 적용해야 하며, 암호화 과정에서 생성되는 임시 파일이나 사본에도 민감정보가 평문으로 남지 않도록 관리해야 합니다. 암호화 구현 시에는 아래 「안전한 암호화 사용」을 참고해 주시기 바랍니다.
  • 로그 데이터 관리: 개발/테스트 단계의 디버깅 로그에 민감한 정보가 기록되지 않도록 주의하고, 앱 출시 전에는 관련 로그 출력을 비활성화하거나 민감정보를 마스킹 처리해야 합니다.
  • 캐시 데이터 관리: 민감정보는 캐시에 저장하지 않는 것을 권장합니다. 기능상 캐시 저장이 필요한 경우에는 암호화하여 보호해야 하며, 사용 목적이 끝난 캐시와 임시 파일은 삭제하는 것을 권장합니다.
  • 자동 백업 비활성화: 현재 Pleos Connect의 non-GAS AAOS 환경에서는 Google 기반 앱 데이터 자동 백업이 동작하지 않습니다. 다른 Android 환경에도 동일한 앱을 제공하는 경우를 고려하여, 사용하지 않는 자동 백업 기능을 비활성화할 것을 권장합니다. 백업 기능을 사용하는 환경에서는 민감 데이터가 포함된 파일이나 디렉터리를 백업 대상에서 제외하는 것을 권장합니다.
  • 외부 저장소 사용 주의: 민감정보는 앱 전용 내부 저장소에 보관하는 것을 권장합니다. 부득이하게 외부 저장소에 저장하는 경우에는 「안전한 암호화 사용」에 따라 암호화해야 합니다. 앱에서만 사용하는 파일은 공용 영역보다 앱 전용 저장 영역을 사용하는 것을 권장하며, 앱이 관리하는 임시 파일은 사용 후 삭제하는 것을 권장합니다.
  • URL 내 민감정보 노출 방지: 인증 토큰, 세션 정보, 비밀번호 등 민감정보가 URL의 경로나 쿼리 파라미터에 포함되지 않도록 해야 합니다. URL은 서버나 프록시 등의 로그에 기록될 수 있으므로, 인증 토큰은 Authorization 헤더 등 URL에 노출되지 않는 적절한 방식으로 전달해야 합니다.

안전한 암호화 사용​

사용자 데이터를 안전하게 보호하기 위해서는 암호화에 사용되는 알고리즘의 안전성과 올바른 구현 방식을 함께 고려하는 것이 중요합니다. 다음 사항을 참고하여 암호화 기능을 구현해 주시기 바랍니다.

  • 안전한 암호 알고리즘 사용: 안전성이 검증된 표준 암호 알고리즘을 사용하는 것을 권장합니다. 전자서명이나 보안 목적의 무결성 검증에는 알려진 충돌 취약점이 있는 해시 알고리즘(예: MD5, SHA-1) 대신 SHA-256 등 적절한 알고리즘을 사용하는 것을 권장합니다.
  • 안전한 블록 암호 모드 적용: 데이터의 기밀성과 무결성을 함께 보호할 수 있는 AES-GCM 등 검증된 암호 모드를 사용하는 것을 권장합니다. 동일한 평문 블록의 패턴을 드러낼 수 있는 ECB 모드는 사용을 피하는 것이 좋습니다.
  • 안전한 패딩 방식 적용: 패딩이 필요한 암호화에는 알고리즘과 용도에 적합한 표준 패딩 방식을 사용하는 것을 권장합니다. 예를 들어 RSA 암호화에는 SHA-256을 사용하는 OAEP 패딩을 고려할 수 있습니다. AES-GCM은 별도의 블록 패딩이 필요하지 않은 암호 모드입니다.
  • 안전한 초기화 벡터 사용: 초기화 벡터(IV)는 암호 알고리즘과 모드에서 요구하는 길이 및 생성 조건에 맞게 사용하는 것을 권장합니다. 특히 AES-GCM에서는 동일한 키로 같은 IV 또는 nonce를 재사용하지 않도록 관리하는 것을 권장합니다.
  • 안전한 난수 생성기 사용: 암호화 키나 난수가 필요한 초기화 벡터 등을 생성할 때는 암호학적으로 안전한 난수 생성기를 사용하는 것을 권장합니다. 예측 가능한 일반 난수 생성기로 암호화 관련 값을 생성하는 방식은 피하는 것이 좋습니다.
  • 암호화 키의 안전한 관리: 암호화 키는 Android Keystore 등 안전한 키 저장 및 관리 기능을 이용하여 보호해야 합니다. 키를 소스코드, 리소스 또는 설정 파일에 하드코딩하거나, 보호 대상 데이터와 함께 평문으로 저장하는 방식은 사용하지 않아야 합니다.

안전한 통신 환경 구축​

앱은 외부 네트워크와 통신하는 과정에서 민감한 정보가 노출되거나 변조될 수 있습니다. 사용자를 보호하고 신뢰할 수 있는 서비스를 제공하기 위해 다음 보안 원칙을 준수해 주시기 바랍니다.

  • 안전한 프로토콜 사용: 외부 통신에는 HTTPS 등 암호화가 적용된 안전한 프로토콜을 사용해야 합니다. 기능상 다른 통신 방식이 필요한 경우에도 민감정보가 평문으로 노출되지 않도록 전송 데이터를 보호해야 합니다.
  • 안전한 암호화 프로토콜 버전 사용: TLS를 사용하는 통신에는 최소 TLS 1.2 이상을 사용해야 하며, TLS 1.3 사용을 권장합니다. 사용 가능한 프로토콜 버전을 안전한 범위로 구성하여 SSL 및 TLS 1.0, 1.1 등 취약한 구버전으로 연결되지 않도록 해야 합니다.
  • 안전한 Cipher Suite 사용: 통신에는 안전성이 검증된 Cipher Suite를 사용하는 것을 권장합니다. 특히 TLS 1.2를 사용하는 경우에는 Cipher Suite 구성도 함께 검토하는 것이 좋습니다.
  • 신뢰할 수 있는 서버와의 통신: 앱에서 연결하는 서버는 서비스 제공에 필요한 신뢰할 수 있는 대상이어야 합니다. 악성 서버나 앱의 정상적인 기능과 무관한 서버와 통신하지 않도록 해야 합니다.
  • 서버 원격 명령의 안전한 처리: 서버로부터 전달받은 명령을 실행하는 기능이 있는 경우에는 명령의 출처, 유효성 및 무결성을 확인해야 합니다. 실행 가능한 명령과 동작 범위를 서비스 제공에 필요한 범위로 제한해야 합니다.

컴포넌트 및 권한 관리​

앱과 운영체제 간의 상호작용을 안전하게 관리하는 것은 사용자의 데이터와 기기를 보호하는 핵심 요소입니다. 불필요한 권한 요청을 제한하고, 내부 컴포넌트의 외부 노출을 최소화하며, 데이터와 기능에 대한 접근을 적절히 제어해 주시기 바랍니다.

  • 불필요한 권한 사용 제한: 앱 기능에 필요한 권한만 요청하고, 권한 최소화 원칙에 따라 사용 범위를 제한해야 합니다. 여러 환경에 동일한 앱을 제공하는 경우에도 Pleos Connect에서 실제로 필요한 권한과 사용 목적을 기준으로 관리해야 합니다.
  • 불필요한 컴포넌트 외부 노출 제한: 외부 앱에서 호출할 필요가 없는 Activity, Service, BroadcastReceiver, ContentProvider 등은 외부에 노출되지 않도록 설정해야 합니다.
  • 안전한 데이터 전송: 민감정보를 다른 앱이나 컴포넌트에 전달할 때는 수신 대상을 명확하게 지정해야 합니다. 수신자를 제한하지 않는 암시적 브로드캐스트 등으로 민감정보가 전달되지 않도록 해야 합니다.
  • 데이터 및 기능 접근 제어: 민감정보를 제공하거나 보호된 기능을 실행하는 컴포넌트에는 적절한 접근 제어를 적용해야 합니다. 외부에 공개할 필요가 있는 경우에도 호출자의 인증 상태와 해당 데이터/기능에 대한 접근 권한을 모두 확인해야 하며, 두 조건을 충족하는 경우에만 접근을 허용해야 합니다.
  • 로컬 자원 접근 제한: WebView의 로컬 파일 접근은 앱 기능에 필요한 범위로 제한해야 합니다. 로컬 파일을 사용할 필요가 없는 경우에는 관련 접근 기능을 비활성화해야 합니다. 기능상 로컬 파일을 사용하는 경우에도 외부 콘텐츠가 앱 내부의 민감한 파일이나 데이터에 접근할 수 없도록 보호해야 합니다.
  • URI 검증 및 정규화: 외부에서 전달받은 URI나 파일 경로는 사용 전에 검증하고 정규화하는 것을 권장합니다. URI의 종류, 대상 및 경로가 앱에서 허용한 범위에 속하는지 확인하여 의도하지 않은 파일이나 데이터에 접근하지 않도록 관리하는 것이 좋습니다.

안전한 개발 및 배포​

앱 코드는 사용자의 데이터를 직접 처리하는 핵심 요소이므로, 개발 과정에서부터 보안을 우선적으로 고려하는 것이 중요합니다. 안전하고 신뢰할 수 있는 앱을 제공하기 위해 다음 원칙을 준수해 주시기 바랍니다.

  • 승인된 API 사용: Pleos에서 공식적으로 제공하고 사용을 허용한 API를 사용해야 합니다. 차량 시스템의 안정성과 보안을 위해 사용이 허가되지 않은 API가 앱에 포함되지 않도록 관리해야 합니다.
  • 필요한 API만 사용: 차량 관련 API는 앱의 기능과 직접적인 관련이 있는 범위에서 사용해야 합니다. 불필요한 데이터 접근이나 기능 호출을 줄이도록 구현해야 합니다.
  • 중요 정보 하드코딩 방지: 인증 토큰, 비밀 키 등 보안상 비밀로 관리해야 하는 정보가 소스코드, 리소스 또는 설정 파일에 하드코딩되지 않도록 해야 합니다. 기기에서 관리하는 암호화 키는 「안전한 암호화 사용」의 키 관리 원칙에 따라 보호해야 합니다.
  • 서버 주소 관리: 서버 IP 주소를 소스코드나 리소스에 직접 고정하기보다는 도메인 등 관리 가능한 방식으로 연결 대상을 구성하는 것을 권장합니다. 서버 주소 변경 시에도 안전하게 갱신할 수 있도록 관리하는 것이 좋습니다.
  • 네이티브 라이브러리 보호: 네이티브 라이브러리를 사용하는 경우에는 메모리 보호 기능을 적용하여 취약점이 악용될 가능성을 줄이는 것을 권장합니다. 대표적인 보호 기능으로 RELRO, 스택 카나리(Stack Canary), NX 비트 보호 등을 적용하는 것을 권장합니다.
  • SDK 및 라이브러리의 안전한 사용: 앱에 사용되는 SDK와 라이브러리의 알려진 보안 취약점을 주기적으로 확인하고, 보안 패치가 적용된 버전을 유지하는 것을 권장합니다. 보안상 영향이 큰 취약점은 우선적으로 검토하고 조치하는 것이 좋습니다.
  • 배포용 인증서 사용: 배포용 앱에는 테스트 또는 디버그용 인증서 대신 정식 배포용 서명 인증서를 사용해야 합니다.
  • 디버깅 비활성화: 최종 배포 앱에서는 앱 디버깅, 디버그 빌드 설정 및 WebView 원격 디버깅 기능을 비활성화해야 합니다. 개발/테스트용 설정이 배포 앱에 남지 않도록 확인해야 합니다.

브라우저 및 WebView의 안전한 사용​

브라우저와 WebView는 웹 콘텐츠를 처리하는 과정에서 악성 사이트, 스크립트 실행 및 민감정보 유출 등의 보안 위험에 노출될 수 있습니다. 앱의 기능과 웹 콘텐츠의 특성에 맞춰 보안 기능을 적용해 주시기 바랍니다.

WebView를 사용하는 앱​

WebView를 사용하는 앱에도 앞서 설명한 안전한 통신, 민감 데이터 관리, 디버깅 비활성화, 로컬 자원 접근 제한 및 데이터/기능 접근 제어 원칙이 적용됩니다.

WebView에서 불러오는 콘텐츠와 이동 가능한 사이트의 범위를 앱 기능에 필요한 수준으로 제한하는 것을 권장합니다. JavaScript 실행이나 웹 콘텐츠와 앱 기능을 연결하는 기능도 필요한 경우에만 사용하고, 신뢰할 수 없는 콘텐츠가 민감정보 또는 보호된 앱 기능에 접근하지 않도록 관리해 주시기 바랍니다.

웹브라우저 앱의 추가 요구사항​

다음 항목은 웹브라우저 앱에 적용됩니다.

  • 신뢰할 수 있는 웹브라우저 사용: Pleos App Market에는 신뢰할 수 있고 보안 업데이트가 지원되는 엔진을 사용하는 웹브라우저만 등록할 수 있습니다. 사용 중인 브라우저 엔진에 보안상 중요한 취약점이 알려진 경우에는 해당 취약점이 조치된 버전을 적용해야 합니다.
  • 악성 사이트 접근 제한: 악성 사이트나 피싱 사이트 등으로부터 사용자를 보호할 수 있도록 위험한 사이트의 접근을 제한하는 기능을 제공할 것을 권장합니다.
  • HTTPS 우선 사용 및 위험 안내: HTTP로 요청한 사이트가 HTTPS를 지원하는 경우에는 HTTPS로 연결되도록 해야 합니다. HTTPS를 지원하지 않는 사이트에 접속하는 경우에는 사용자에게 암호화되지 않은 연결의 위험을 알리는 경고 또는 안내를 제공해야 합니다.
  • 서버 인증서 검증: HTTPS 통신 시 서버 인증서의 신뢰 체인, 유효기간 및 호스트명을 정상적으로 검증해야 합니다. 모든 인증서를 무조건 신뢰하거나 인증서 오류를 무시하는 방식으로 검증 기능을 우회하지 않아야 합니다.
  • 출처 간 접근 보호: 동일 출처 정책(SOP, Same-Origin Policy)과 교차 출처 리소스 공유(CORS, Cross-Origin Resource Sharing) 정책을 정상적으로 적용하여, 허용되지 않은 출처에서 다른 출처의 응답 데이터를 읽을 수 없도록 해야 합니다. 브라우저의 출처 간 접근 제한을 임의로 완화하거나 서버가 지정한 CORS 허용 범위를 우회하지 않아야 합니다.
  • 콘텐츠 보안 정책 지원: 웹브라우저는 CSP(Content Security Policy) Level 2 이상을 지원해야 하며, 웹사이트에서 지정한 콘텐츠 보안 정책을 정상적으로 적용해야 합니다. 앱에서 직접 제공하는 웹 콘텐츠에는 스크립트와 외부 리소스의 출처를 필요한 범위로 제한하는 CSP를 적용하는 것을 권장합니다.
  • HTML 및 JavaScript의 안전한 처리: HTML과 JavaScript를 처리할 때 악성 콘텐츠로 인한 코드 실행이나 정보 유출을 방지할 수 있도록 브라우저의 검증, 필터링 및 보안 기능을 정상적으로 적용해야 합니다.
  • 브라우저 샌드박스 보호: 브라우저에서 제공하는 프로세스 격리와 샌드박스 등의 보호 기능이 정상적으로 동작하도록 유지해야 합니다. 웹 콘텐츠가 허용된 범위를 넘어 앱 내부 데이터나 시스템 자원에 접근하지 않도록 해야 합니다.
  • 개발/설정 기능 제한: 최종 배포 앱에서는 개발자 모드, 임의의 프록시 설정 변경 및 확장 프로그램 설치 기능을 비활성화해야 합니다.
  • 파일 다운로드 제한: 웹브라우저를 통한 파일 다운로드 기능은 제한해야 합니다. 웹 콘텐츠를 통해 차량 내에 불필요한 파일이나 실행 가능한 콘텐츠가 저장되지 않도록 관리해야 합니다.