스마트폰은 이제 일상생활에서 없어서는 안될 필수적인 부분입니다. 스마트폰을 자주 사용하고, 여기에 의존하는 것은 일상생활에 반드시 필요한 애플리케이션이 있기 때문일 것입니다.
이러한 모바일 앱을 통해 매일 공유되는 개인정보와 민감한 데이터의 양은 상당히 방대하며, 2021년 한 해에만 스마트폰 사용자가 60억명을 넘었다는 점을 고려할 때 앱 침해가 일어나면 치명적인 피해를 입게 될 것은 분명한 일입니다. 모바일 앱에 대한 보안은 개발자에게 절대적으로 높은 우선순위입니다.
이번 글에서는 Xamarin 앱 보안을 주제로 Xamarin 앱에 발생 가능한 몇 가지 보안 취약성과 개발자로서 앱을 보호하기 위해 무엇을 할 수 있는지 알아보겠습니다.
Xamarin(자마린)이란?
Xamarin은 마이크로소프트가 소유하고, 관리하는 오픈소스 멀티 플랫폼 모바일 앱 개발 플랫폼입니다.
Xamarin은 단일 개발 플랫폼으로 다양한 운영체제(예: 안드로이드 및 iOS)용 애플리케이션을 개발할 수 있기 때문에 개발자들이 애용하는 플랫폼이 되고 있습니다. iOS 및 안드로이드 운영체제에서 사용되는 고유의 API와 툴킷에 완전한 액세스가 가능하기 때문에 개발자는 네이티브 앱과 거의 동일한 애플리케이션을 개발할 수 있습니다. 또한, 하나의 운영체제용으로 개발된 앱을 다른 운영체제에서 실행되는 앱으로 빠르고 쉽게 복제할 수 있습니다(코드 재사용이 가능하며, 약간의 수정작업만 필요합니다).
통상적으로 안드로이드 애플리케이션은 JAVA나 Kotlin을 사용하여 개발하고, iOS 애플리케이션은 Swift나 Objective-C를 사용하여 개발합니다. 이러한 애플리케이션은 개발이 이루어진 운영체계에서만 구동되기 때문에 ‘네이티브’ 앱이라고 합니다. 예를 들어, 안드로이드용으로 제작된 앱을 iOS에서 구동되도록 복제하려면 Swift 또는 Objective-C를 사용하여 처음부터 개발해야 합니다.
Xamarin에서 앱은 .NET과 C#으로 개발되며, iOS와 안드로이드 기기에서 신속하게 구동할 수 있습니다(플랫폼별로 약간의 수정이 필요합니다). 이를 통해 개발 프로세스를 상당히 줄여나갈 수 있습니다.
Xamarin 앱 보안
네이티브 앱 개발이 아닌 Xamarin으로 개발하는 것에 따르는 한 가지 문제는 보안입니다. 예를 들어, ProGuard나 DashO와 같은 도구를 사용한 코드 난독화를 통해 네이티브 앱을 리버스 엔지니어링으로부터 보호할 수 있습니다. 그러나 이러한 도구는 Xamarin으로 개발된 앱에는 직접 사용할 수 없습니다.
적절한 보호가 이루어 지지 않으면 침해자는 공개 플레이 스토어에서 Xamarin 앱을 다운로드하고, 이를 리버스 엔지니어링한 다음 악용하려는 취약점을 찾을 것입니다.
이에 마이크로소프트는 Xamarin 앱에 내재된 해당 프레임워크 내에서 인증서 고정 및 시스템 프록시 설정 무시 등의 기능을 갖춘 보안 프로토콜을 구현했습니다. 하지만, 개발자는 리버스 엔지니어링과 해킹으로부터 앱을 보호하기 위해 추가적인 보안 조치를 구현해야 합니다.
신뢰할 수 없는 환경에서의 취약성 보호
모바일 앱은 누구나 다운로드할 수 있기 때문에 이러한 앱을 신뢰할 수 없는 환경에서 쉽게 로드하고, 이를 검색해 볼 수 있습니다. Xamarin에서 사용되는 .NET 실행파일은 ILSpy, dotPeek, JustDecompile 등의 무료 도구나 다른 디컴파일러와 디버거를 사용하여 리버스 엔지니어링할 수 있습니다.
침해자가 앱을 분해하면 취약점과 보안을 우회하는 방법을 찾고, 데이터를 탈취하거나 앱을 불법 복제하는 등의 행위를 할 수 있게 됩니다. 대부분의 경우, 개발자와 보안 팀이 앱이 크랙되었다는 사실을 알게 될 때에는 이미 늦은 것입니다.
다행히 Xamarin 앱은 신뢰할 수 없는 환경에서 사용되더라도 보호될 수 있습니다. Xamarin 앱이 리버스 엔지니어링, 디버깅, 스누핑에 탄력적으로 대응 가능토록 하는 Dotfuscator, NETGuard.IO, ArmDot 등과 같은 .NET 난독화 도구가 있습니다.
난독화 도구는 앱이 침해행위에 대한 대응능력을 향상시키도록 난독화, 루트 감지, 암호화 및 변조 방지와 같은 다양한 보안계층을 배치합니다. 이러한 보안 조치와 프로토콜은 Xamarin 앱의 코드에 삽입되기 때문에 보안은 해제할 수 있는 추가 플러그인이 아닌 코드의 일부가 됩니다.
프록시 가로채기로부터 Xamarin 앱 보호하기
애플리케이션은 API를 사용하여 설치된 스마트폰과 요청을 처리하는 서버 간의 통신을 가능하게 합니다. 이를 통해 서버에서 처리와 저장을 실행하며, 사용자 기기에서 사용되는 저장 및 처리능력을 최소화합니다. API는 스마트폰과 백엔드 서버 간 통신채널을 생성하여 인증, 데이터 전송 등의 프로세스를 실행합니다.
이것은 확실하면서도 효율적인 방법이지만 취약점이 생기기도 합니다. 공격자는 로컬 프록시를 사용하여 스마트폰과 서버 간의 API를 통한 통신을 탈취할 수 있습니다. API는 개인정보와 민감한 데이터를 처리하기 때문에 상당히 치명적인 위협이 됩니다. 공격자는 프록시가 설정되면 정보를 탈취하거나 데이터를 수정할 수도 있습니다.
다행히 Xamarin에는 이러한 위협을 차단하기 위한 보안 조치가 내장되어 있습니다. Xamarin 앱은 로컬 디바이스 프록시 설정을 무시하도록 설정할 수 있습니다. 이러한 설정을 통해 앱은 기기의 시스템 프록시 설정을 무시해버리기 때문에 공격자는 프록시를 사용하여 트래픽을 라우팅할 수 없습니다. 이러한 기능이 프록시 공격의 위협을 완전히 없애지는 못하지만 확실하게 제한할 수 있으며, 개발자는 이를 더욱 세부적으로 살펴보아야 합니다.
마무리하며
Xamarin은 다양한 운영체제를 위한 응용 프로그램을 개발하는데 필요한 시간과 노력을 크게 절감하며, 개발자들이 꼭 사용해볼 만한 플랫폼입니다. Xamarin의 편리함을 위해서는 앱이 공개적으로 출시하기 이전에, 앞서 언급한 네이티브 앱에 내재된 보안 문제를 해결해야 합니다. 본 문서에서 제시한 방안이 여러분의 Xamarin 앱의 보안을 강화해나가는데 도움이 되길 바랍니다.