최근, 오픈 세계 애플리케이션 보안 프로젝트(OWASP)는 2016년 이후 처음으로 모바일 애플리케이션에 대한 상위 10가지 위험을 업데이트했습니다. 이번에 가장 높은 보안 위험은 무엇일까요? “부적절한 자격 증명 사용.”
이는 하드코딩된 자격 증명과 전반적인 나쁜 비밀 관리의 위험에 대해 모바일 앱 제공자에게 경각심을 일깨우는 신호입니다.
비밀을 잘못 다루는 것은 특히 모바일 앱에서 보안 위반으로 이어질 수 있습니다. 우리의 애플리케이션을 보호하기 위한 새로운 초점과 이러한 문제를 함께 해결하기 위해 우리가 할 수 있는 일들을 자세히 살펴보겠습니다.
부적절한 비밀 처리의 증가하는 위협
부적절한 자격 증명 사용은 비밀번호나 토큰과 같은 비밀이 적절하게 보호되지 않아 공격자에게 도난당할 위험이 있는 경우 발생합니다. 특히 모바일 앱은 비밀 유출로 악명이 높습니다. CyberNews의 연구에 따르면, Google Play 스토어와 같은 플랫폼에서 50% 이상의 모바일 앱이 하드코딩된 비밀을 가지고 있어 이 민감한 정보가 악의적인 행위자에 의해 쉽게 노출될 수 있습니다.
OWASP에서 제공한 정의를 살펴보면, 이 위험이 특히 우려되는 이유를 빠르게 이해할 수 있습니다:
비밀이 노출되면 공격자가 그것을 사용하여 서비스, 데이터 또는 전체 시스템에 무단으로 액세스할 수 있습니다. 이로써 비밀 관리는 앱 개발자와 보안 팀 모두에게 중요한 관심사가 됩니다.
왜 비밀이 주요 타깃인가?
비밀은 공격자에게 매력적인 타깃이 됩니다. 왜냐하면 그들에게 중요한 시스템에 직접 액세스할 수 있는 권한을 부여하기 때문입니다. 다른 취약점과 달리 추가적인 악용을 필요로 하지 않으며, 공격자가 API 키 또는 비밀번호에 액세스하면 종종 가치 있는 자원에 대한 명확한 경로를 갖게 됩니다.
예를 들어, 모바일 앱에 하드코딩된 API 키는 정적 분석 도구를 통해 추출되어 무단 API 요청을 만드는 데 사용될 수 있습니다. 이는 사용자 데이터를 침해할 뿐만 아니라, 특히 이러한 키가 사용량에 따라 요금을 부과하는 서비스에 연결되어 있는 경우 금전적 손실을 초래할 수 있습니다.
클라이언트 측 비밀은 어렵습니다
비밀 관리를 이해하는 중요한 점은 클라이언트 측 비밀은 사실상 불가능하다는 것입니다. 모바일 앱에서 비밀이 어떻게 난독화되거나 암호화되었든, 충분한 자원을 가진 공격자는 앱을 역공학화하고 그것들을 검색할 수 있습니다. 이는 비밀이 어떤 시점에는 앱의 메모리에서 사용 가능해야 하기 때문입니다. 동적 분석을 통해 공격자는 이러한 비밀을 검색하고 악용할 수 있습니다.
결과적으로, 비밀을 안전하게 관리하는 유일한 방법은 클라이언트 측에서 완전히 비밀을 유지하는 것입니다. 앱에 API 키나 자격 증명을 포함하는 대신, 개발자는 이러한 민감한 정보를 백엔드로 이동하여 액세스와 보안을 더욱 효과적으로 관리해야 합니다.
비밀 관리를 위한 모범 사례
비밀 유출 문제를 해결하기 위해 개발팀은 다양한 모범 사례를 구현해야 합니다.
1. 비밀을 하드코딩하지 마세요
비밀은 앱의 코드에 직접 저장해서는 안 됩니다. 여기에는 API 키, 인증 토큰 및 기타 민감한 데이터가 포함됩니다. 비밀을 하드코딩하는 것은 유출되는 가장 일반적인 방법 중 하나이며, 심각한 보안 위반으로 이어질 수 있습니다.
2. 안전한 저장소 API 사용
사용자 비밀(예: 비밀번호, 토큰)의 경우, 개발자는 모바일 운영 체제에서 제공하는 안전한 저장 메커니즘을 사용해야 합니다. 예를 들어, iOS는 키체인(Keychain)을 제공하고, 안드로이드는 키스토어(Keystore)를 제공합니다. 이러한 API는 민감한 데이터의 안전한 저장 및 접근 제어를 허용합니다.
3. 비밀을 백엔드로 이동
클라이언트 측에서 비밀을 처리하는 대신, 모바일 앱은 서버 측 로직을 사용하여 API 키 및 기타 민감한 데이터를 관리해야 합니다. 이러한 작업을 백엔드에서 수행하면 비밀 유출 위험이 크게 줄어듭니다.
4. 비밀을 정기적으로 교체하고 무효화
적절한 비밀 관리가 이루어지더라도, 비밀은 정기적으로 교체해야 하며, 유출된 키는 즉시 무효화해야 합니다. 이는 공격자가 비밀에 접근하더라도 무한정 사용할 수 없도록 보장합니다.
5. 인증서 고정
비밀이 앱에 런타임 중에 전송될 때, 개발자는 통신이 안전하도록 인증서 고정을 사용해야 합니다. 이는 연결 중 서버의 신원을 확인하여 추가적인 보호 계층을 제공합니다.
6. SDLC 전반에 Secrets 감지 구현
개발 주기에서 비밀을 관리하는 것은 언젠가는 실수와 유출을 야기합니다. OWASP는 “포괄적인 보안 테스트 프로세스”의 필요성을 강조합니다. 커밋, 푸시 및 빌드 단계에서 여러 계층의 감지를 강제하고 사건 발생 시 효율적인 복구를 허용해야 합니다.
하드코딩된 비밀이 생산 환경에 도달하지 않아도 중대한 취약점이 될 수 있음을 명심하는 것이 중요합니다.
유출된 비밀의 결과
비밀이 유출되면 결과가 심각할 수 있습니다. 공격자는 노출된 자격 증명을 사용하여 민감한 데이터에 액세스하거나 비즈니스 로직을 조작하거나 전체 시스템을 손상시킬 수 있습니다. 예를 들어, 결제 시스템에 연결된 API 키가 유출되면 공격자가 사기 거래를 시작하여 비즈니스와 고객 모두에게 금전적 손실을 초래할 수 있습니다.
“Adversaries can exploit vulnerabilities in both hardcoded credentials and improper credential usage. Once these vulnerabilities are identified, an attacker can use hardcoded credentials to gain unauthorized access to sensitive functionalities of the mobile app. They can also misuse credentials, for instance, by gaining access through improperly validated or stored credentials, thereby bypassing the need for legitimate access.”
게다가 유출된 비밀은 모바일 앱의 무결성을 훼손시키고 비용이 많이 드는 법적 및 평판 피해를 가져올 수 있습니다. 예를 들어, 의료 앱이 환자 데이터에 액세스할 수 있는 API 키를 유출하면 중대한 규제 위반금을 초래하고 고객 신뢰를 훼손할 수 있습니다.
Secrets 감지 도구
비밀 유출 문제를 해결하기 위해 비밀 감지 도구는 현대 앱 개발에 필수적으로 사용되고 있습니다. 이러한 도구는 코드 저장소, CI/CD 파이프라인 및 생산 환경을 스캔하여 노출된 비밀을 감지하고 취약점이 악용되기 전에 팀이 발견하는 데 도움을 줍니다.
이러한 도구 및 플랫폼은 코드 변경 사항의 실시간 모니터링을 허용하여 개발 프로세스 중에 비밀 정보가 실수로 하드코딩되지 않도록 보장합니다. 이러한 도구를 개발 라이프사이클에 통합함으로써 조직은 비밀 정보 누출의 위험을 크게 줄일 수 있습니다.
비밀 정보 보안은 우리 모두가 진행 중인 여정입니다.
비밀 관리는 단순히 기술적 문제가 아니라 제대로 처리되지 않으면 심각한 보안 도전이 될 수 있는 중요한 문제입니다. 조직은 부적절한 자격 증명 사용의 위험을 이해하고, 비밀 정보를 안전하게 보호하기 위한 모범 사례를 시행하며, 누출을 감지하기 위해 설계된 도구를 사용함으로써 민감한 데이터를 보호하고 비용이 많이 드는 침해의 가능성을 줄일 수 있습니다.
사이버 공격과 침해가 여전히 주요 이슈로 대두됨에 따라, 비밀 정보를 안전하게 보호하는 것이 조직과 시스템을 안전하게 유지하는 가장 중요한 보호 전략입니다. 우리를 항상 변화하는 사이버 보안 환경과 맞설 수 있도록 도와주는 OWASP 자원봉사자들에게 감사드립니다.
참고문헌
- 모바일 애플리케이션을 위한 최상위 10위 위협, 오픈 월드와이드 애플리케이션 보안 프로젝트(OWASP)
Source:
https://dzone.com/articles/secrets-security-important-issue-mobile-apps