1. 개요
OWASP Mobile Top 10 이 2014년 초 리-릴리즈 되었습니다. 그동안 금융권 및 기업들의 모바일 자산들에 대해 자사의 모바일 모의해킹 방법론과 금융위, 금감원 체크리스트 그리고 OWASP Mobile Top 10 리스트를 포함 하여 다수의 모의해킹 프로젝트를 수행하였습니다. 이번에 OWASP Mobile Top 10 List 에 대해 간단하게 정리할 기회가 생겨 블로그에 작성하게 되었습니다.
<그림1> OWASP Mobile Top 10 List
간단하게 Top 10 Risk를 살펴보면 다음과 같습니다.
○ M1 - 서버사이드에서 발생할 수 있는 취약점
대부분의 앱이 서버와의 통신으로 이루어지고 개발시 하이브리드 앱으로 많이 개발되기 때문에 클라이언트에서 파라미터
값 변조를 통한 웹에서 발생 할 수 있는 취약점들이 도출될 수 있습니다.
○ M2 - 중요정보들이 스마트폰 내에 저장되는 경우
스마트폰 분실 혹은 공격자에 의해 권한 탈취 시 해당 중요정보들 또한 공격자에게 전달됩니다.
○ M3 - 민감한 정보 평문 전송
개인정보 혹은 중요정보들이 네트워크상에서 평문으로 전송될때 발생하게 됩니다.
○ M4 - 의도하지 않은 데이터 누출
타 앱에서 접근 가능한 데이터영역에 민감한 정보를 저장시 발생할 수있는 리스크 입니다.
○ M5 - 인증 및 인가 검증 미흡
클라이언트 내부에서 인증 시 우회 가능하기 때문에 인증 검증을 서버사이드에서 인증 절차를 확인해야 합니다.
○ M6 - 취약한 암호화
개발 시 암호화 기술에 대한 적정성 여부를 판단하여 적용해야 합니다.
○ M7 - 클라이언트 사이드 인젝션
클라이언트에서 발생할 수 있는 인젝션 공격입니다.
○ M8 - 신뢰할 수 없는 입력 값에 의한 보안 의사결정
프로세스간 통신 시 발생 할 수 있는 취약점입니다.
○ M9 - 부적절한 세션 관리
서버에서 부여받은 세션 관리에 대해 나와있습니다.
○ M10 - 바이너리 보호 미흡
앱과 서버와 통신 시 앱에 대한 무결성 검증이 필요합니다.
2. Risk List 상세
2.1 M1: Weak Server Side Controls
모바일 역시 서버와 통신하여 데이터를 받아오게 됩니다. OWASP Mobile top 10에서 첫번째는 Weak Server Side Controls입니다.
해당 방법론은 OWASP에서는 기존 web과 cloud 에 해당되는 OWASP Top 10 취약점을 포함한 서버사이드에서의 취약점을 Mobile Risk top 1으로 꼽았습니다.
자사에서의 방법론 또한 해당 항목을 포괄적으로 적용하여 보고서 및 수행계획서에 포함하여 모의해킹을 진행 합니다.
<그림2> OWASP Top 10 (Web, Cloud)
시큐어 코딩과 중요 로직 등 서버사이드에서 동작할수 있도록 해야하며, 자세한 정보는 OWASP Top 10 web, cloud 프로젝트를 참고합니다.
OWASP Top 10 Web: https://www.owasp.org/index.php/Top10#tab=Main
OWASP Top 10 Cloud: https://www.owasp.org/index.php/Category:OWASP_Cloud_%E2%80%90_10_Project
<그림 3> OWASP에서 보는 모바일 애플리케이션 취약점 리스트
3.2 M2: Insecure Data Storage
두번째 Insecure Data Storage는 기존 금감원, 금융위 점검 체크리스트에도 포함된 스마트폰에 중요정보 저장금지 항목과 동일합니다. 자사에서도 해당 항목에 대해 빠른 점검을 위해 현재 소스코드 및 데이터 안에 중요 문자열 검색 자동화 툴을 제작하고 있습니다.
또한 앱 소스코드안에 하드코딩되어있는 계정정보 혹은 테스트 서버 주소 등 또한 자동화된 툴로 찾아낼수 있도록 하여 컨설턴트가 앱 점검시 보다 효과적이고 빠르게 점검할 수 있도록 프로세스화 할 예정입니다.
중요 데이터 저장 확인 리스트
- SQLite databases
- Log Files
- Plist Files
- XML Data Stores or Manifest Files
- Binary data stores
- Cookie stores
- SD Card
- Cloud synced
대응방안으로는 다음과 같습니다.
기본적으로 중요데이터는 필요한 데이터를 제외하고는 모바일 디바이스 안에 저장하지 않아야 합니다.
iOS
- 계정(자격증명)을 파일시스템 안에 저장해서는 안되며, 웹 또는 api 로그인 방식(https)을 통해 인증하고 세션시간은 사용자의
사용 시간을 고려한 최소한의 시간으로 설정해야합니다.
- 중요정보 저장시 iOS 표준 암호화 방식인 CommonCrypto를 사용하며, whitebox cyptography 솔루션을 이용하는것도 하나의
방법입니다.
- Sqlite data 암호화를 위해 SQLcipher를 사용합니다.
- 개발시 NSUserDefualtes 에 중요정보를 저장하지 않아야 합니다.
- NSManagedObects를 사용하여 데이터를 저장할 경우 암호화 되지 않은 데이터들이 저장되는 것을 주의해야 합니다.
- 중요정보 저장 시 하드코딩된 암호화 또는 암호화 해독키에 의존하지 말아야 합니다.
- OS에서 제공된 기본 암호화 메커니즘 이외 추가적인 암호화 계층을 고려해야 합니다.
Andorid
- 기기관리자 API를 이용하여 local storage에 setStorageEncryption을 사용하여 암호화 할 수 있습니다.
- javax.crypto의 라이브러리를 이용하여 SD카드 저장 시 암호화 할 수 있습니다. 가장 쉬운 방법은 마스터 암호 및 AES 128과
일반 텍스트를 암호화 하는 것입니다.
- 앱사이에 정보공유가 필요하지 않은 경우 공유설정 속성을 NOT MODE_WORLD_READABLE 해야 합니다.
- 중요정보 저장 시 하드코딩된 암호화 또는 암호화 해독키에 의존하지 말아야 합니다.
- OS에서 제공된 기본 암호화 메커니즘 이외 추가적인 암호화 계층을 고려해야 합니다.
3.3 M3: Insufficient Transport Layer Protection
해당 항목은 서버와의 통신시 암호화 여부를 확인하는 항목으로 금감원, 금융위 체크리스트에 포함된 항목으로 중요 정보 전송 시 네트워크 구간에서 암호화 여부를 확인하는 항목입니다. 네트워크 암호화에 대한 정당성 여부를 해당 항목에서 확인합니다.
- 네트워크 계층에 보안 없다면 도청에 취약하다고 가정합니다.
- 민감한정보, 세션토큰등을 전송하기 위해서 SSL/TLS를 적용합니다
- 적절한 키길이와 업계표준의 암호화 방식을 사용합니다.
- 신뢰할 수있는 CA 공급자에 의해 서명 된 인증서를 사용합니다.
- 항상 SSL chain 확인이 필요합니다.
- 모바일 앱이 잘못된 인증서를 발견할 경우 UI를 통해 사용자에게 알려야 합니다.
- 대체 채널 (SMS, MMS, 또는 알림)를 통해 민감한 데이터를 전송하지 않습니다.
- 가능하면 민감한 정보에 대해서는 암호화하고 SSL 통신을 적용합니다. SSL에서 취약점이 발견될 경우 이차적인 방어를
제공합니다.
3.4 M4: Unintended Data Leakage
네번째 항목은 의도치 않은 데이터 누출 입니다. 개발자가 개발 당시 타 앱에서 쉽게 접근 할수 있는 영역에 취약한 앱이 민감한 정보를 저장할때 발생 할 수 있는 취약점 입니다. 개발 시 아래항목에 대해 민감한 정보 저장여부를 확인하여 접근 가능한 타 앱들을 제어하여 민감한 정보 노출을 최소화 해야 합니다.
- URL Caching (Both request and response)
- Keyboard Press Caching
- Copy/Paste buffer Caching
- Application backgrounding
- Logging
- HTML5 data storage
- Browser cookie objects
- Analytics data sent to 3rd parties
3.5 M5: Poor Authorization and Authentication
다섯번째는 취약한 인가 및 인증 입니다.
제한된 앱에 대한 사용, 인증된 유저만 사용 할 수 있는 기능에 대한 우회 등 바이너리 변조를 통해 인증 및 권한을 획들할 수있습니다.
모든 클라이언트 인증은 악의적인 사용자에 의해 우회가 가능합니다. 따라서 가능하다면 서버 측에서 인증 및 권한부여를 해야 합니다. 바이너리 변조에 대한 무결성 검증을 하지 않을 경우 내부 로직 변경으로 인증우회가 가능합니다. M10(Lack of Binary Protections)에 관련되어서도 추가로 확인해야합니다.
3.6 M6: Broken Cryptography
앱에 대한 데이터 보호를 위해 취약한 암호화 방식을 적용할 경우 나타날 수 있는 취약점입니다.
현재 사용하기 불충분한 알고리즘은 다음과 같습니다.
RC2 ,MD4, MD5, SHA1
두번째로는 올바른 알고리즘을 선택하여도 동작하는 프로토콜에 대해 적용 미흡으로 발생합니다.
예를 들어, 컨텐츠와 중요 키를 함께 저장할 경우, 공격자가 해당 키를 이용하여 중요 정보를 해독할 수 있습니다.
해당 항목에 대해서는 암호화 방식이 명시된 개발 명세서(Specification)를 통해 확인 가능합니다.
3.7 M7: Client Side Injection
일곱번째 클라이언트 사이드 인젝션은 모바일 앱 에서 모바일 디바이스에 실행시키기 위해 사용자 입력 값에 악성코드를 삽입하는 취약점입니다.
서버사이드 취약점과 반대로 클라이언트 사이드에서 발생하는 취약점입니다.
위협되는 취약점으로는 다음과 같습니다.
SQLite Injection, Local File Inclusion, XML injection, javascript injection(xss, etc), Binary injection 등등
3.8 M8: Security Decisions Via Untrusted Inputs
여덟번째 내용은 Security Decisions Via Untrusted Inputs(신뢰할수 없는 입력값에 의한 보안 의사결정) 입니다.
프로세스 간의 통신 (IPC) 매커니즘에서 발생할 수 있는 취약점입니다. 민감한 정보는 IPC매커니즘을 사용하지 않아야 하며,
iOS 앱 간의 통신 시 Pasteboard 방식과 handleOpenURL 방식을 지향하며, 필요 시 openURL방식을 통해 앱 간의 통신을 해야 합니다. openURL 방식은 sourceApplication 이 명시되어 있어 제한된 앱에서만 통신할 수 있습니다.
3.9 M9: Improper Session Handling
아홉번째로 Improper Session Handling 입니다.
인증 후 세션을 부여받았을때, 한개의 세션에 한개의 모바일 디바이스가 허용되도록 해야합니다. 또한 모바일 앱 코드에서 사용자 세션을 보호해야 합니다.
아래는 올바른 세션 핸들링 입니다.
- Failure to Invalidate Sessions on the Backend: 많은 개발자들이 세션 파기시 모바일 앱에서만 세션을 파기하는데 해당 세션
탈취 시 서버와 통신을 이어갈 수 있어 서버 측에서 또한 세션을 파기해야 합니다.
- Lack of Adequate Timeout Protection: 세션 timeout을 설정해야 합니다. 세션 timeout설정하여 악의적인 사용자가 존재하는
세션을 탈취 시 타 사용자 권한을 획득하는 것을 막을수 있습니다.
- Failure to Properly Rotate Cookies: 인증 상태 변경 시 이전 세션에서 사용되었던 쿠키가 허용되지 않도록 파기해야 합니다.
- Insecure Token Creation: 토큰 생성시 guessing /anticipation attack 에 노출되지 않도록 개발자는 잘 적립된 암호화
알고리즘을 통해 암호화 해야 합니다.
3.10 M10: Lack of Binary Protections
마지막 열번째는 Lack of Binary Protections 입니다.
금감원, 금융위 점검 시 함께 하는 애플리케이션 무결성 검증과 동일한 항목으로 바이너리 변조를 통해 보안솔루션 우회, 권한상승
등 애플리케이션 로컬에 존재하는 로직들을 공격자가 변조할 수 있게 됩니다. 변조된 애플리케이션은 서버 측에서는 해당 앱에 대해 변조된 앱인지 확인하지 않으면 정상적인 요청으로 인지하여 다양한 종류의 risk가 존재하게 됩니다.
자사에서는 보안솔루션 우회, MDM솔루션 정책 해제, 루팅 및 탈옥탐지 우회, 게임크랙 등 바이너리 변조를 이용한 시나리오 기반 점검 방법론을 통해 모바일 모의해킹을 수행하고 있습니다.
4. 결론
지금까지 OWASP에서 발표한 모바일 Top 10 Risk에 대해 간단하게 살펴 보았으며, 모바일 Top 10 리스크는 취약점 도출뿐만 아니라 개발 시 해당 리스트를 고려하여 개발 할 수 있도록 10가지 위협에 대한 가이드 라인이 나와있습니다.
모의해킹 시나리오는 다양하게 존재하지만, 10가지 위협에 대한 기술 및 정책 수렴을 통해 개발 혹은 취약점 도출 시 기준점을 시사할 수 있겠습니다. 자세한 내용을 살펴보려면 아래 링크를 확인해 주시길 바랍니다.
https://www.owasp.org/index.php/Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Risks
마지막으로 블로그에 간단하게 정리한 내용이 개발자 혹은 모의해킹 컨설턴트들에게 유용한 정보가 되었으면 합니다.
감사합니다.