OWASP Mobile Top 10 2024 – 모바일 앱 보안을 위한 가장 확실한 취약점 보완 가이드

2024년 OWASP가 새롭게 발표한 모바일 애플리케이션 10대 취약점에 대해 알아보고 모바일 보안 취약점을 개선할 수 있는 방법에 대해 알아봅니다

OWASP mobile top 10 risks

 

OWASP Mobile Top 10 2024
– 모바일 앱 보안을 위한 가장 확실한 취약점 보완 가이드 

 

애플리케이션의 직관적인 기능과 세련된 인터페이스는 높은 사용자 경험을 제공하는 동시에 제작사의 수익을 극대화하는 데 필수적입니다. 하지만 화려해 보이는 기능과 디자인 이면에 사용자의 개인 정보는 아주 쉽게 노출되고 있습니다. 성공적인 앱 출시와 지속적인 운영도 중요하지만, 보안을 개선하는 것 또한 앱을 구축하는 사람이나 사용하는 사람에게 중요한 리소스입니다.  

하지만 보안에 대한 어설픈 접근은 오히려 치명적인 결과를 초래할 수 있습니다. 애플리케이션에 잘못된 모바일 보안을 적용할 경우, 사용자들은 오히려 비즈니스에 대한 신뢰를 잃게 됩니다. 이에 미국의 비영리단체 OWASP(Open Worldwide Application Security Project)는 조직이 보안 태세를 강화할 수 있도록 지원하는 다양한 무료 오픈 소스 도구, 문서, 리소스를 제공하고 있습니다. 이 중 가장 잘 알려진 프로젝트는 OWASP Mobile Top 10으로 애플리케이션 보안 위험에 대한 인식을 제고하는 데 중요한 역할을 하고 있습니다. 

아래는 2024년 OWASP가 새롭게 발표한 모바일 애플리케이션 10대 취약점입니다.  

 

OWASP Mobile Top 10 2024 

M1: Improper Credential Usage (부적절한 자격 증명 사용) 

M2: Inadequate Supply Chain Security (불충분한 공급망 보안) 

M3: Insecure Authentication/Authorization (안전하지 않은 인증 및 권한 부여) 

M4: Insufficient Input/Output Validation (불충분한 입력/출력 검증) 

M5: Insecure Communication (안전하지 않은 통신) 

M6: Inadequate Privacy Controls (불충분한 개인 정보 보호 제어) 

M7: Insufficient Binary Protections (부족한 바이너리 보호) 

M8: Security Misconfiguration (잘못된 보안 구성) 

M9: Insecure Data Storage (안전하지 않은 데이터 저장) 

M10: Insufficient Cryptography (불충분한 암호화) 

 

 1. 부적절한 자격 증명 사용 

개발자가 작성하는 코드와 스크립트에는 여러 리소스에 액세스하고 다른 애플리케이션과 툴에 상호작용하는 자격 증명(SSH 키와 API 토큰 등)과 비밀번호가 필요한 경우가 많습니다. 개발자들은 시간을 절약하기 위해 종종 민감한 정보를 코드에 포함합니다. 이렇게 하드코딩 된 자격 증명을 사용할 경우 중요 정보들은 이 코드에 대한 액세스 권한을 가진 모든 사용자에게 그대로 노출됩니다.  

안전한 자격증명 관리를 위해서는 하드코딩 된 자격 증명을 사용하지 않아야 하며, 다음과 같은 관리 방안이 필요합니다. 

<적절한 대응 방안> 

* 전송 중 자격 증명을 암호화합니다. 

* 장치에 사용자 자격 증명을 저장하지 마십시오. 안전하게 취소할 수 있는 액세스 토큰을 사용하는 것이 좋습니다. 

* 강력한 사용자 인증 프로토콜을 구현합니다. 

* 사용된 API 키 또는 토큰을 정기적으로 업데이트하고 교체해야 합니다. 

 

2. 불충분한 공급망 보안 

모바일 앱 공급망이 취약할 경우, 해커는 코드베이스에 악성코드를 삽입하거나 빌드 프로세스 중 코드를 수정하여 백도어, 스파이웨어 또는 기타 악성 코드를 삽입해 데이터를 훔치거나, 사용자를 감시하거나, 모바일 장치를 제어할 수 있습니다.  

이런 위협은 특히 서드파티(3rd-party)에서 개발한 모바일 애플리케이션을 사용하거나 타사 라이브러리 및 구성 요소에 의존하는 경우 발생합니다. 앱 개발자가 타사 구성 요소를 제대로 검사하지 않거나 업데이트하지 않으면 해당 공격에 취약할 수 있습니다.  

<적절한 대응 방안> 

* 모바일 앱 개발 주기 전반에 걸쳐 보안 코딩 관행과 코드를 검토하고 테스트하여 보안 취약점을 사전에 파악합니다. 

* 해커가 악성 코드에 서명하고 배포하는 것을 방지하기 위해 안전한 앱 서명과 배포 프로세스를 마련합니다. 

* 신뢰할 수 있고 검증된 타사 라이브러리 또는 구성 요소만 사용합니다. 

* 해커가 앱의 취약점을 악용하는 것을 방지하기 위해 앱 업데이트, 패치와 배포에 대한 보안 제어를 설정합니다. 

* 보안 테스트, 스캔 또는 기타 기술을 통해 공급망 보안 사고를 모니터링하고 사고에 신속하게 대응합니다. 

  

3. 안전하지 않은 인증 및 권한 부여 

해커는 인증 또는 권한 부여 체계의 취약점을 파악해 모바일 앱의 인증을 위조하거나 우회할 수 있습니다. 인증 체계가 잘못되거나 누락되면 공격자가 백엔드 서버에서 익명으로 모바일 기능을 실행할 수 있습니다. 이렇게 사용자의 신원을 확인할 수 없게 되면 공격 소스를 탐지할 수 없어 위험이 직접적으로 노출되게 됩니다. 

모바일 애플리케이션 보안을 평가하기 위해서는 인증과 권한 부여의 차이점을 이해하는 것이 가장 중요합니다. 인증은 개인을 식별하고, 권한은 특정 작업에 필요한 권한이 있는지 확인합니다. 다음은 모바일 앱에서 안전하지 않은 인증과 권한의 예시입니다. 

<인증이 취약한 경우> 

* 출처가 불분명한 백엔드 API 실행 

* 비밀번호의 로컬 저장 

* 단순한 비밀번호 입력 프로세스 

* FaceID 혹은 Touch ID와 기능 사용 

<권한 부여가 취약한 경우> 

* 안전하지 않은 IDOR(Insecure Direct Object Reference, 부적절한 권한) 

* 개발자가 특수한 목적으로 만들어 놓은 인증 확인 절차가 없는 숨겨진 기능의 경우 

* 앱이 사용자의 역할이나 권한을 백엔드 시스템에 전송하는 경우 

 <적절한 대응 방안> 

* 웹 응용 프로그램을 모바일로 이전하는 경우, 인증 요구사항이 서로 일치해야 합니다. 

* 가능한 모든 인증 요청을 서버 측에서 수행해야 합니다 

* 클라이언트 측 데이터 저장이 필요한 경우, 사용자의 로그인 자격 증명에서 안전하게 파생된 암호화 키를 사용하여 데이터를 암호화합니다. 

* 사용자가 비밀번호를 장치에 저장하지 않도록 유도해야 합니다. 

* 인증과 권한 제어는 서버 측에서 강화해야 합니다. 

* 오프라인 환경에서 로컬 인증 또는 권한 확인을 수행할 경우, 무단 코드 변경을 감지하기 위해 로컬 무결성 검사를 수행해야 합니다. 

* 백엔드 시스템은 인증된 사용자의 권한과 승인을 독립적으로 확인해야 합니다. 또한, 모든 클라이언트 측 인증을 우회할 수 있다고 가정하여 가능할 때마다 서버 측 인증 및 권한 부여 활동을 강화합니다. 

   

4. 불충분한 입력/출력 검증 

모바일 앱에서 사용자의 입력이나 네트워크 데이터와 같은 외부 소스의 데이터에 대한 유효성 검사를 제대로 수행하지 않으면 SQL 인젝션, 커맨드 인젝션, 그리고 XSS 공격 등 모바일 환경에 특화된 공격에 취약할 수 있습니다. 해커는 시스템에 액세스하여 앱에서 승인되지 않은 코드를 실행하거나 무단으로 데이터를 추출할 수 있으며, 앱 기능 및 전체 모바일 시스템을 제어할 수 있습니다. 

<적절한 대응 방안> 

* 엄격한 검증 기술을 사용하여 사용자 입력을 검증하고 삭제합니다. 입력 길이를 제한해 예상치 못한 데이터나 악의적인 데이터는 거부할 수 있도록 합니다. 

* XSS(교차 사이트 스크리팅) 공격을 방지하기 위해 출력 데이터를 보안합니다. 

* 데이터 컨텍스트(파일 업로드, 데이터베이스 쿼리 등)를 기반으로 검증을 수행하여 path traversal 및 injection과 같은 공격을 방어합니다. 

* 데이터에 대한 무결성 체크를 통하여 인가되지 않은 변조행위를 방어 합니다. 

* 보안 코딩 방법을 준수합니다.  Ex) SQL Injection파라미터화된 쿼리와 prepared statements를 사용하여 SQL Injection을 방지 

* 침투 테스트 및 코드 검토 등 정기적으로 보안 평가를 수행합니다. 

 

5. 안전하지 않은 통신 

모바일 애플리케이션은 하나 이상의 원격 서버와 데이터를 교환합니다. 일반적으로 모바일 장치는 네트워크나 인터넷 등(TCP/IP, WiFi, Bluetooth/Bluetooth-LE, NFC, 오디오, 적외선, GSM, 3G, SMS 등 모바일 장치에서 사용할 수 있는 모든 통신 기술이 포함)을 이용해 데이터 전송을 하는데, 로컬 네트워크가 공유되거나 네트워크 장치나 모바일 장치의 악성 코드가 삽입되어 있다면 계정 탈취, 사용자 사칭, PII 데이터 유출 등의 피해가 생길 수 있습니다. 

특히 눈에 띄는 특징은 일종의 민감한 데이터(암호화 키, 비밀번호, 개인 사용자 정보, 계정 세부정보, 세션 토큰, 문서, 메타데이터, 바이너리 등)를 패키징하여 장치 간 서로 교환할 때, 일부 데이터가 탈취된다는 것입니다.  

<적절한 대응 방안> 

* 모바일 앱에 백엔드 API 또는 웹 서비스 데이터 전송 채널에 SSL/TLS를 적용합니다. 애플리케이션이 브라우저/웹킷을 통해 루틴을 실행할 때 SSL 버전을 사용하여 제3자 분석 회사, 소셜 네트워크 등과 같은 외부 엔터티를 설명합니다. 사용자의 세션 ID가 노출될 수 있으므로 혼합 SSL 세션을 피합니다. 

* 적절한 키 길이를 갖춘 업계 표준 암호화 제품군을 사용해야 합니다. 신뢰할 수 있는 CA 공급자가 서명한 인증서를 사용하며, 잘못된 인증서(자체 서명, 만료된 인증서, 신뢰할 수 없는 루트, 해지, 잘못된 호스트 등)를 허용하지 않습니다. 

* 대체 채널(예: SMS, MMS 또는 알림)을 통해 민감한 데이터를 전송하지 않습니다. 가능하다면 민감한 데이터가 SSL 채널에 제공되기 전에 별도의 암호화 계층을 적용하십시오. 향후 SSL 구현에서 취약점이 발견되는 경우 암호화된 데이터는 기밀 위반에 대한 2차 방어 수단을 제공합니다. 개발 주기 중에는 신뢰할 수 없는 인증서를 허용하기 위해 SSL 확인 방법을 재정의하지 말고, 대신 자체 서명된 인증서나 로컬 개발 인증 기관(CA)을 사용합니다. 

 

6. 불충분한 개인 정보 보호 제어 

개인 식별 정보(PII) 보호는 이름, 주소, 신용카드 정보, 이메일 및 IP 주소, 건강, 종교, 성적 취향 및 정치적 견해에 대한 정보를 보호하는 것입니다. 해커들은 해당 정보를 이용해 피해자를 사칭하여 사기를 저지르거나 결제 데이터 사용, 민감한 정보로 피해자를 협박하거나 피해자의 중요한 데이터를 파괴하거나 조작하는 등의 피해를 줍니다. 만약, 해커가 PII를 얻으려면 먼저 네트워크나 파일 시스템, 로그 접근 등 다른 수준의 보안을 침해해야 합니다.  

<적절한 대응 방안> 

* 처리되는 PII를 최소화합니다. 

* 꼭 필요한 경우가 아니면 PII를 저장하거나 전송하지 않습니다. 

* 중요한 데이터는 적절한 인증 및 권한 부여를 통해 보호합니다. 

 

불충분한 개인 정보 보호 제어

 

7. 부족한 바이너리 보호 

앱 바이너리에는 상용 API 키나 하드코딩 된 암호화 비밀과 같은 중요한 사항이 포함될 수 있습니다. 또한, 바이너리의 코드는 중요한 비즈니스 로직이나 사전 훈련된 AI 모델을 포함하고 있기 때문에 그 자체로 가치가 있을 수 있습니다. 해커는 정보 수집 외에도 앱 바이너리를 조작하여 유료 기능에 무료로 접근하거나, 최악의 경우 인기 앱을 수정하여 악성 코드를 포함한 앱으로 재배포할 수 있습니다. 

모든 앱은 바이너리 공격에 취약합니다. 바이너리 공격은 앱의 바이너리에 하드코딩된 민감한 데이터나 알고리즘이 있거나, 앱의 인기가 높은 경우 특히 심해집니다. 난독화, 네이티브 코드(Android)의 암호화된 인코딩 또는 이와 유사한 조치가 있는 경우 앱을 보호할 수 있지만, 결코 완벽한 방어 방법은 아닙니다. 

<적절한 대응 방안> 

* 리버스 엔지니어링 대응 : 리버스 엔지니어링을 방지하려면 공격자들이 앱 바이너리를 이해할 수 없어야 합니다. 이는 코드 난독화, 코드 암호화 기술을 활용해 대응할 수 있습니다.  

* 보안 메커니즘 파괴 : 해커는 보안 검사 등을 우회하기 위해 앱 제어의 전반적인 흐름을 이해해야 합니다. 따라서 암호화와 난독화가 큰 도움이 될 수 있습니다. 또한 로컬 보안 검사는 백엔드에서 강화해서 시행해야 합니다. 예를 들어 보호되는 기능에 필요한 리소스는 로컬 및 백엔드에서 확인이 된 경우에만 다운로드해야 합니다. 마지막으로, 무결성 검사를 통해 코드 변조를 감지하고 앱의 재배포 및 수정을 감지합니다. 

 

8. 잘못된 보안 구성 

모바일 앱에서 무단 액세스로 이어질 수 있는 보안 설정, 권한 및 제어의 부적절한 구성을 의미합니다. 예를 들어, 보안 설정, 권한 및 기본 자격 증명을 검토하지 않고 기본 구성을 사용하거나 암호화되지 않은 통신 채널을 사용한 경우, 보안 업데이트나 패치를 적용하지 않은 경우, 안전하지 않은 파일 공급자 경로 설정 등이 있습니다. 

<적절한 대응 방안> 

* 기본 설정과 구성이 보호되는지 확인하고 중요한 정보를 노출하거나 불필요한 권한을 제공하지 않습니다. 

* 하드코드된 기본 자격 증명을 사용하지 않습니다. 

* 애플리케이션이 작동하는 데 필요한 최소한의 권한만 요청합니다. 

* 일반 텍스트 트래픽을 허용하지 않고 인증서 고정을 사용하여 보안 네트워크를 구성합니다. 

* 앱의 프로덕션 버전에서 디버깅 기능을 비활성화합니다. 

* 안드로이드 기기에서 백업 모드를 비활성화해 기기 백업에 앱 데이터가 포함되는 것을 방지합니다. 

 

9. 안전하지 않은 데이터 저장 

데이터가 안전하게 저장되지 않으면 직접적인 데이터 추출부터 민감한 정보의 가로채기까지 해커의 다양한 공격에 노출되게 됩니다. 따라서 암호화와 안전한 전송 프로토콜, 철저한 보안 조치를 통해 해커가 민감한 데이터에 쉽게 액세스할 수 없도록 해야 합니다. 

<안전하지 않은 데이터 저장이 나타날 수 있는 환경> 

* 애플리케이션 내 액세스 제어가 충분하지 않은 경우 

* 민감한 데이터를 암호화하지 않는 경우 

* 모바일 앱 로그, 오류 메시지 또는 디버그 기능을 통해 실수로 민감한 데이터를 노출할 수 있으며, 개인이 이를 보거나 캡처 가능 

* 세션 토큰이나 사용자 인증 정보가 보호되거나 관리되지 않는 경우 

* 부적절한 입력 유효성 검사 및 데이터 삭제 

* 클라우드 스토리지 서비스를 사용하거나 구성이 잘못 관리되는 경우 

* 타사 라이브러리에 의한 데이터 유출 

* 애플리케이션 내 데이터 공유 기능을 잘못 처리한 경우 

<적절한 대응 방안> 

* 강력한 암호화 사용 : 강력한 암호화 알고리즘 방식을 구현하여 저장되거나 전송 중인 중요한 데이트를 보호합니다. 

* 안전한 데이터 전송 : 보안 통신 프로토콜(예:HTTPS, SSL/TLS)을 활용하여 모바일 앱과 백엔드 서버 간에 전송 중인 데이터를 보호합니다. 보안되지 않은 채널을 통해 민감한 데이터를 전송하지 않습니다. 

* 안전한 저장 메커니즘 구현 : 승인되지 않은 사용자가 접근할 수 없는 안전한 저장 위치에 중요한 데이터를 저장합니다. 키체인(iOS) 또는 키스토어(Android)와 같은 모바일 운영 체제에서 제공하는 플랫폼별 보안 저장 메커니즘을 사용합니다. 

* 강력한 액세스 제어 구현 : 중요 정보에 대한 액세스 권한을 부여하기 전에 사용자를 인증하고 사용자 권한을 검증합니다. 

* 입력 검증 및 데이터 삭제 : 악성 코드 삽입이나 의도하지 않은 데이터 유출 위험을 완화하기 위해 사용자 입력을 검증합니다. 

* 보안 세션 관리 : 무작위로 생성된 세션 토큰을 사용하며, 적절한 세션 시간제한 설정, 클라이언트 및 서버 측에 세션 데이터를 안전하게 저장합니다. 

* 정기적인 업데이트 : 모든 라이브러리, 프레임워크 및 타사 종속성은 최신 상태로 유지합니다. 또한, 각 공급업체에서 제공하는 보안 패치 및 업데이트를 정기적으로 적용합니다. 

안전하지 않은 데이터 저장

 

10. 불충분한 암호화 

충분한 암호화가 이뤄지지 않으면 데이터 침해, 사용자 계정에 대한 무단 액세스, 기밀성 손상 또는 데이터 위조, 변조 등이 발생할 수 있습니다.  

<불충분한 암호화가 나타나는 환경> 

* 취약한 암호화 알고리즘 

* 쉽게 추측할 수 있거나 짧은 암호화 키 

* 부적절한 키 관리 

* 결함 있는 암호화 구현 

* 안전하지 않은 데이터, 암호화 키 저장 

* 보안 전송 계층 부족 

* 불충분한 유효성 검사 및 인증 

* 솔팅(Salting-해싱 전 입력값에 임의의 데이터를 추가하는 과정) 부족 

<적절한 대응 방안> 

* 강력한 알고리즘 사용 : AES(Advanced Encryption Standard), RSA(Rivest-Shamir-Adleman) 또는 ECC(Elliptic Curve Cryptography)와 같이 널리 승인되고 안전한 암호화 알고리즘을 구현합니다. 

* 충분한 키 길이 보장 및 보안 키 관리 방법 준수 : 승인된 직원에 대한 액세스 제한, 미사용 키 암호화, 안전한 키 배포 메커니즘 사용 등 무단 액세스로부터 키를 보호합니다. 

* 올바른 암호화 구현 : 기존 암호화 라이브러리 및 프레임워크를 준수하며 모바일 애플리케이션에서 암호화 및 복호화 프로세스를 신중히 구현합니다. 

* 안전한 암호화 키 저장 : 암호화 키가 모바일 장치에 안전하게 저장되어 있는지 확인하며, 일반 텍스트나 쉽게 접근할 수 있는 위치에 키를 저장하지 않습니다. 

* 보안 전송 계층 사용 : HTTPS(HTTP Secure)과 같은 보안 전송 계층 프로토콜을 사용합니다. 

* 유효성 검사 및 인증 : 인증에 사용되는 인증서, 디지털 서명 또는 기타 메커니즘에 대한 적절한 유효성 검사를 수행합니다. 

* 정기적인 보안 조치 업데이트 : 암호화 라이브러리, 프레임워크 및 플랫폼 제공업체의 보안 업데이트, 패치 및 권장 사항에 대한 최신 정보를 업데이트합니다. 

* 보안 테스트 수행 : 암호화 취약성 평가, 침투 테스트, 코드 검토를 포함한 철저한 보안 테스트를 수행합니다. 테스트 과정에서 발견된 약점이나 취약점을 식별하고 해결합니다. 

* 업계 표준 및 모범 사례 준수 : NIST(National Institute of Standards and Technology) 및 IETF(Internet Engineering Task Force)와 같은 조직에서는 제공하는 안전한 암호화 방식에 대한 지침과 권장 사항을 준수합니다. 

* 강력한 해시 함수 사용 : SHA-256 또는 bcrypt와 같이 널리 알려져 있고 암호화되어 안전한 해시 함수를 선택합니다. 이러한 알고리즘은 공격에 저항하고 높은 수준의 보안을 제공하도록 설계되었습니다. 

* 솔팅 구현 : 강력한 무작위 솔트를 사용해 비밀번호를 해싱합니다. 솔팅은 공격자가 미리 계산된 테이블을 사용하여 비밀번호를 해독하는 것을 어렵게 만들어 보안 레벨을 강화합니다. 

* KDF(Key Derivation Functions) 사용 : 비밀번호 해싱의 경우 PBKDF2, bcrypt 또는 scrypt와 같은 키 파생 함수를 사용합니다. 이러한 기능은 비밀번호에서 암호화 키를 안전하게 파생하도록 특별히 설계되었으며 무차별 대입 공격을 늦추기 위한 추가 보안 기능을 제공합니다. 

 

조직의 모바일 애플리케이션은 개인정보를 비롯한 민감한 데이터가 많이 포함되어 있기 때문에 악용될 가능성이 많습니다. 이에 OWASP Foundation은 개발자의 보안 취약성에 대한 인식 제고, 보안 사고 방지에 도움이 되는 리소스를 제공하여 보안 위험을 줄이거나 문제를 해결하기 위해 노력하고 있습니다. 

 

락인컴퍼니 또한 강력한 앱 보안 서비스를 위해 다양한 방법과 서비스를 제공하고 있습니다. 모바일 앱 보안 서비스 LIAPP을 통해 소스코드 난독화, 암호화 기능을 제공하여 바이너리 난독화 및 DEX, SO와 같은 중요 코드를 암호화 하여 분석을 하지 못하도록 모바일 앱을 강력하게 보호하고 있습니다. 또한, SSL Pinning 기능을 제공함으로써, 통신 시에 앱이 사용하는 HTTPS 인증서를 검사하여, 인증서 검사 우회를 통한 네트워크 패킷 분석 행위 방지가 가능합니다.  

그리고 모바일 앱 보안 키패드 서비스 LIKEY는 강력한 ONE TIME KEYPAD를 제공함으로써, 매번 새롭게 생성되는 일회성 랜덤 키를 이용하여 사용자의 중요 데이터를 암호화함으로써 사용자의 입력값을 안전하게 보호합니다. 

OWASP Mobile Top 10 리스트의 보안 취약점을 보완하고 싶으신 기업을 위해 LIAPP TEAM은 전문가 컨설팅을 진행하고 있습니다. 저희 LIAPP TEAM에서 언제든지 연락주시면 보다 자세한 상담을 진행해 드리겠습니다. 

 

LIAPP, 최상의 서비스만을 제공합니다. 

 

 #OWASP #mobile_app_protector #android_mobile_app_protector #mobile_game_application_protection #모바일_앱_보안 #모바일_보안_솔루션 #앱_위변조_탐지 #난독화 #암호화 #바이너리 난독화 #인증서_우회 #보안키패드 #LIKEY #LIAPP #리앱