앱 보안 가이드
Pleos App Market에 앱을 등록하는 개발자가 준수해야 할 보안 가이드입니다. 본 가이드라인은 단순한 규칙을 넘어, 앱 사용자의 개인 정보와 민감한 차량 데이터를 보호하기 위한 필수적인 기준을 제시합니다. 모든 앱이 높은 보안 수준을 유지함으로써 사용자가 안심하고 서비스를 이용할 수 있도록 하는 것이 목적입니다.
민감 데이터 관리
앱 개발 시 개인 식별 정보(PII), 금융 정보, API 키, 암호화 키 등 민감한 정보는 절대 평문으로 저장해서는 안 됩니다. 부득이하게 데이터를 기기에 저장해야 할 경우, 다음 원칙들을 준수해야 합니다.
- 데이터 암호화: 민감 데이터는 저장 전 강력한 암호화 알고리즘을 사용해 보호해야 합니다.
- 로그 데이터 관리: 개발/테스트 단계의 디버깅 로그에 민감한 정보가 기록되지 않도록 주의하고, 앱 출시 전에는 관련 기능을 비활성화하거나 정보를 마스킹 처리해야 합니다.
- 캐시 데이터 관리: 민감 정보가 포함된 캐시 데이터는 앱 종료 또는 백그라운드 전환 시 즉시 삭제하는 정책을 적용해야 합니다.
- 자동 백업 비활성화: 안드로이드의 자동 백업 기능 사용 시, 민감 데이터가 포함된 파일이나 디렉터리는 백업에서 제외하도록 설정해야 합니다.
- 외부 저장소 사용 주의: 공용으로 접근 가능한 외부 저장소에는 민감 정보를 저장하지 않아야 합니다. 부득이하게 저장해야 한다면 반드시 암호화하고, 적절한 접근 제어 설정을 적용해야 합니다.
안전한 암호화 사용
사용자 데이터를 안전하게 보호하기 위해서는 강력한 암호화 적용이 필수적입니다. 단순히 데이터를 암호화하는 것을 넘어, 암호화에 사용되는 알고리즘의 안전성과 올바른 구현 방식 전반에 걸쳐 보안 모범 사례를 준수해야 합니다.
- 안전한 암호화 알고리즘 사용: 현재까지 암호학적 안전성이 검증된 표준 권장 알고리즘을 사용해야 합니다. 널리 알려진 취약점을 가진 알고리즘은 사용해서는 안 됩니다.
- 안전한 블록 암호 모드 적용: 데이터 암호화 시, 반복적인 패턴을 노출시키는 취약한 블록 암호 모드는 사용하지 않아야 합니다. 안전성이 검증된 모드를 적용하여 데이터 블록 간의 연관성을 강화하고 예측 불가능성을 확보해야 합니다.
- 안전한 패딩 방식 적용: 패딩 오라클 공격과 같은 심각한 위협을 방지하기 위해, 데이터의 불완전한 블록을 채우는 데 안전한 패딩 방식을 적용하는 것이 필수적입니다.
- 안전한 난수 생성기 사용: 초기화 벡터를 포함한 암호화 관련 난수 생성에는 반드시 암호학적으로 안전한 난수 생성기를 사용해야 합니다. 취약한 유사 난수 생성기는 예측 가능하여 보안 위협을 초래할 수 있으므로 사용해서는 안 됩니다.
안전한 통신 환경 구축
앱은 외부 네트워크와 통신하는 과정에서 민감한 정보가 노출되거나 악성 코드에 감염될 수 있습니다. 사용자를 보호하고 신뢰할 수 있는 서비스를 제공하기 위해 다음 보안 원칙들을 준수해야 합니다.
- 안전한 프로토콜 사용 필수: 데이터가 암호화되지 않는 취약한 프로토콜은 사용해서는 안 됩니다. 모든 외부 통신에는 반드시 암호화가 적용된 안전한 프로토콜을 사용해야 합니다.
- 취약한 암호화 프로토콜 사용 금지: 취약성이 알려진 암호화 프로토콜은 사용해서는 안 됩니다. 현재 안전성이 검증된 최신 버전의 프로토콜을 적용해야 합니다.
- 안전한 Cipher Suite 사용: 통신 시 사용되는 Cipher Suite는 반드시 안전성이 검증된 것을 사용해야 합니다. 취약한 암호화 알고리즘이 포함된 Suite는 사용하지 않아야 합니다.
- 악성 서버 통신 금지: 앱은 악의적인 C&C 서버와 통신하거나, 알 수 없는 출처의 서버와 연결해서는 안 됩니다. 모든 통신 대상 서버는 사전에 정의되고 검증된 것이어야 합니다.
- 서버 원격 명령 제어: 서버로부터 전달받은 원격 명령을 실행할 때는 반드시 명령의 유효성과 무결성을 검증해야 합니다.
컴포넌트 및 권한 관리
앱과 운영체제 간의 상호작용을 안전하게 관리하는 것은 사용자의 데이터와 기기를 보호하는 핵심 요소입니다. 개발자는 불필요한 권한 요청을 제한하고, 내부 컴포넌트의 외부 노출을 최소화하며, 데이터 접근을 엄격히 제어하는 방식으로 잠재적인 보안 위협을 차단해야 합니다.
- 불필요한 권한 사용 제한: 앱 기능에 필수적이지 않은 권한은 요청해서는 안 됩니다. 권한 최소화 원칙을 적용하여 사용자의 개인 정보를 보호해야 합니다.
- 불필요한 컴포넌트 외부 노출 제한: 외부 앱에서 호출할 필요가 없는 앱 컴포넌트의 외부 노출을 엄격히 제한해야 합니다.
- 안전한 데이터 전송: 중요한 정보를 포함하는 데이터는 수신자를 지정하지 않는 방식으로 외부에 브로드캐스트해서는 안 되며, 반드시 특정 수신자에게만 전달되도록 명시적인 방법을 사용해야 합니다.
- 데이터 접근 제어 강화: 앱이 사용하는 데이터 저장소에 대해 외부 앱이 무단으로 접근하지 못하도록 접근 권한을 명확히 설정해야 합니다.
- 로컬 자원 접근 제한: 공격자가 앱의 내부 저장소에 있는 중요한 파일에 접근하는 경로로 악용될 수 있으므로, 로컬 파일 시스템에 대한 접근을 제한할 것을 권장합니다.
안전한 개발 및 배포
앱 코드는 사용자의 데이터를 직접 처리하는 핵심 요소이므로, 개발 과정에서부터 보안을 최우선으로 고려해야 합니다. 보안에 취약한 코딩 방식은 데이터 유출은 물론, 다양한 공격 경로를 초래할 수 있습니다. 안전하고 신뢰할 수 있는 앱을 제공하기 위해 다음 원칙들을 준수해야 합니다.
- 승인되지 않은 API 사용 금지: Pleos에서 공식적으로 제공하지 않거나 사용이 허가되지 않은 API를 앱에 포함해서는 안 됩니다. 이는 차량 시스템의 안정성과 보안에 심각한 위협을 초래할 수 있습니다.
- 불필요한 API 사용 제한: 앱의 기능과 직접적인 관련이 없는 API를 요청하거나 사용해서는 안 됩니다. 이는 권한 최소화 원칙에 위배되며, 불필요한 데이터 접근으로 이어질 수 있습니다.
- 중요 정보 하드코딩 금지: 중요한 정보를 앱의 소스 코드나 설정 파일에 직접 입력하는 것을 피해야 합니다.
- 취약한 SDK 및 라이브러리 사용 제한: 앱에 사용되는 모든 공개 라이브러리 및 SDK는 알려진 보안 취약점이 없도록 주기적으로 확인하고, 적극적인 조치를 취해야 합니다. 이를 위해 최신 버전으로 유지할 것을 권장합니다.
- 테스트 인증서 사용 금지: 배포용 앱에는 테스트 또는 디버그용 인증서가 아닌, 공식 서명된 인증서를 사용해야 합니다.
- 디버깅 비활성화: 최종 배포 앱에서는 디버깅 기능을 반드시 비활성화해야 합니다. 이를 통해 공격자가 앱의 내부 로직을 분석하거나 메모리상의 중요 정보를 탈취하는 것을 방지할 수 있습니다.