
SecureMarshmallow
iOS 앱 보안 연구 프로젝트 — 탈옥 감지, 스크린샷 방지, Frida 분석
개요
개발자가 프로젝트를 할 때 기능에는 열심히 하지만 보안 측면을 소홀히 하는 경향이 있다고 판단했습니다. 그래서 저희는 보안을 중요시하는 애플리케이션을 개발하기로 결정했습니다. 이 프로젝트의 주요 목표는 공격자가 애플리케이션을 어떻게 공격하는지 이해하고, 개발자가 이를 어떻게 방어할 수 있는지에 대한 연구하는 프로젝트입니다.
역할
프로젝트 PM과 iOS 앱개발 및 iOS 보안을 담당했습니다.
PM
- 일정 관리, 기획, 그리고 팀원 관리
프로젝트를 시작할 때, 워터폴 방법론을 활용하여 철저한 요구사항 분석과 프로젝트 기획을 진행했습니다.
그러나, 프로젝트 팀원 간의 기능 이슈가 발생하면서 애자일 방법론으로의 전환을 결정하게 되었습니다.
이 과정에서, 개별 기능에만 집중하는 것이 아니라 팀원 간의 원활한 소통을 통해 문제를 해결하는 방법의 중요성을 깨달았습니다.
이 경험을 프로젝트의 성공은 효율적인 방법론과 팀원 간의 협력에 기반을 두고 있음을 강조하고자 합니다.
iOS
- 로컬 저장과 보안 관리
- 여러 로컬 DB를 사용해서 텍스트 또는 사진을 저장하는 기능 구현
- 탈옥된 기기에서 앱을 접근 방지하는 기능 구현
- 캡쳐 금지 기능 및 스크린샷 추적 기능 구현
- 앱 내의 캐시 삭제 기능 구현
- 앱 내의 OS 접근 기능 구현
- 앱 위장 아이콘 기능 구현
iOS Security
- 뷰의 에러 찾기와 메모리 접근으로 앱 강제 종료
- 탈옥된 기기를 사용하여 Frida로 앱의 UI 강제 변경
- LLDB를 사용해서 뷰의 에러 발견
- Frida를 사용하여 앱 강제 종료 및 악성 알럿 성공
- UserDefaults 데이터 무단 침입 성공
문제 상황과 해결점
Main CollectionViewController에서 collectionViewCell 이동 문제 해결
1. 가상 Cell 뷰를 활용해서 드래그 중인 Cell 표현하기
시작단계에서 사용자가 Cell을 길게 누르는 것을 감지합니다. 이때 began 메소드를 활동화 시켜서 사용자에게 드래그 중인 셀의 모습을 보여주기 위한 가상의 뷰를 생성합니다.
2. 셀의 위치 변경하기
사용자가 Cell의 위치를 변경하기 시작하면, changed 상태가 활성화되어서 사용자가 Cell을 드래그하는 동안 collectionView의 Cell 위치를 실시간 업데이트 후 리로드를 시켜줍니다.
3. 이동 작업의 완료 처리
사용자가 Cell 이동을 완료하면 ended 상태가 활성화되어 이동 작업이 끝나게 되고, 가상의 Cell 뷰를 화면에서 제거합니다.
UserDefaults 데이터 불투명성 문제 해결
스크린샷 감지 모듈 문제 해결
회고
MVP 아키텍처를 처음 다뤄보면서 낯설었지만, 핵심 원리를 파악하면서 점차 익숙해졌습니다. MVP를 적용하니 개발 속도가 향상되었고, 책임을 분할하여 개발 과정을 보다 체계적으로 관리할 수 있었습니다. 프로젝트를 통해 MVP의 개념과 장점을 직접 경험하면서 이해할 수 있었습니다. iOS 보안을 적용하는 과정에서는 다양한 경험을 쌓을 수 있었습니다. 탈옥 감지 라이브러리 사용부터 코드 난독화까지 경험했고, 앱 내의 캐시를 삭제하는 방법과 OS 접근 등 보안 분야를 도전해 보았습니다. 직접 버전이 낮은 아이폰을 구매하여 직접 탈옥을 시도하였고 Frida를 사용하여 앱에 접근해보았습니다. 위 마시멜로 프로젝트를 통해서 많은 보안 관련 기능을 사용해보면서 앞으로는 안전하고 신뢰할 수 있는 앱을 개발하는 개발자로서 사용자가 안정감을 느낄 수 있도록 최선을 다하자는 생각이 들었습니다.
스크린샷










