본문 바로가기

모바일 앱 해킹

모바일 앱 해킹 에필로그

모바일 앱 해킹을 공부하기 전 어떻게 공부하면 좋은 지와 기본 지식 정도를 정리하려고 합니다.

 

모바일 앱 해킹 vs 모바일 해킹

먼저, 모바일 앱 해킹과 모바일 해킹은 다르다는 점을 알아야합니다.

기본적으로 착각할 수 있는 휴대폰을 감염시키고 제어하는 등의 해킹은 모바일의 운영체제에 대한 공격으로 모바일 해킹입니다.

모바일 앱 해킹은 우리가 다운받는 앱 등, 운영체제 위에서 동작하는 프로그램에 대한 취약점을 찾는 것입니다.

 

모바일 앱 해킹의 취약점은 크게 두가지 서버측과 앱 단말기 측 취약점입니다.

서버측 취약점은 웹 애플케이션 취약점과 마찬가지로 앱 이용 시 서버가 앱에서 보낸 요청을 처리하면서 발생하는 취약점입니다.

예를 들어, 모바일 앱에서 로그인을 실시할 때 로그인 처리를 하기위해 서버와 통신을 합니다. 만약 SQL 문으로 데이터베이스에서 데이터를 가져와 인증을 구현한다면 웹 취약점과 똑같이 SQL Injection 공격도 가능합니다.

 

단말기 측 취약점은 단말기에 설치된 앱으로 인해 단말기 내에서 발생하는 취약점입니다.

예를 들어, 모바일 앱에서 사용자의 주요 정보가 평문으로 저장되어 있으면, 해당 앱을 통해 사용자의 정보를 확인할 수 있습니다. 당연히 주요 정보가 평문으로 저장되어 있더라도 공격자는 사용자의 앱에 접근을 할 수 없으면 확인할 수 없습니다. 그렇기 때문에 단말기 측 취약점 단말기가 공격자에게 탈취되거나 감염되었다는 가정하에 발생할 수 있는 취약점을 찾는 것입니다.

공격자가 단말기를 장악하였다면 해당 모바일 앱 취약점을 통해 사용자 정보를 확인할 수 있는 것입니다.

 

모바일 앱은 통신방법에 따라 분류할 수 있습니다.

1. 모바일 웹 앱

모바일 웹 앱은 우리가 웹 브라우저를 통해 웹을 이용하는 것처럼 모바일에서 웹 브라우저로 서비스를 이용하는 형태입니다. 그렇기 때문에 따로 앱 설치가 필요하지 않으며, 앱 변경 시 서버의 업데이트로 사용자에게 적용시킬 수 있습니다. 앱 설치가 필요없기 때문에 서버가 단말기의 하드웨어 접근에 제한이 있습니다.

 

2. 모바일 네이티브 앱

네이티브 앱은 모바일 특정 운영체제(Android, ios)의 고유한 언어와 도구로 앱이 개발되어 사용자에게 맞는 운영체제의 앱 다운로드가 필요합니다. 앱 설치를 하기때문에 서버가 단말기의 하드웨어에 직접적인 접근이 가능합니다. 통신을 할 때 TCP 프로토콜을 사용하여 통신한다는 특징이 있습니다.

 

3. 모바일 하이브리드 앱

하이브리드 앱은 웹 앱과 네이티브 앱을 조합한 방식입니다. 웹 앱의 사용자에게 동일한 서비스를 제공할 수 있다는 장점과 앱 설치를 통해 네이티브 앱의 하드웨어 접근할 수 있는 장점을 조합한 형태입니다. 

 

그럼 이제 어떻게 취약점을 찾을 지 알아보겠습니다.

1. 서버측 취약점

- 웹 앱

웹 앱은 웹 해킹과 똑같이 구현됩니다. 그렇기 때문에 Burp를 사용하여 진행하면 됩니다.

웹 서버

 

위의 사진은 웹 서버입니다. 이때 개발자도구에 들어가 화면을 모바일 버전으로 바꿔줍니다.

모바일 버전

 

Elements 부분 왼쪽의 모니터 버튼을 클릭하면 변경할 수 있습니다.

모바일 웹 앱 접속

 

그 후 모바일 웹 앱 주소로 들어가주면 모바일 웹 앱과 똑같은 형태로 컴퓨터에서 사용할 수 있습니다.

그럼 이제 웹 해킹과 똑같이 취약점을 찾아주면 됩니다.

 

- 하이브리드 앱

하이브리드 앱도 마찬가지로 Burp를 사용하여 취약점을 찾아주면 됩니다. 하지만, 앱이 모바일에 존재하기 때문에 휴대폰과 버프 프록시를 설정해주어 휴대폰과 서버 통신을 잡아주어야 합니다. 방법은 웹 해킹 공부 당시 버프 정리할 때 잠깐 스쳐가긴 했는데 정리해보겠습니다. 

 

먼저 버프 프록시 세팅에 들어옵니다.

프록시 세팅

 

프록시 리스너를 통해 휴대폰의 통신이 프록시 서버를 통해 이루어지도록 프록시 서버를 열어줍니다.

프록시 서버 설정

 

Add를 눌러 포트번호와 All Interfaces 를 설정하여 어디서든 프록시서버 9999 포트에 접근할 수 있도록 설정합니다.

리스너 설정

그 후 추가한 설정으로 리스너를 변경합니다.

이제 모바일에서 프록시 설정을 해주어야합니다. 

 

모바일 프록시 설정

 

와이파이에 들어가 프록시 수동 설정에 들어가면 위와 같이 나올 것입니다. 그러면 서버와 포트에 나의 컴퓨터 주소와 포트에 9999를 입력해주면 됩니다. 마지막으로 인증서 설치하여 인증까지 해주면 모바일에서 통신한 것을 버프에서 확인할 수 있으며

그 후 웹 앱과 똑같이 취약점을 찾아주면 됩니다.

 

- 네이티브 앱

네이티브 앱은 HTTP 통신을 하지 않기 때문에 버프를 사용할 수 없습니다. 그렇기 때문에 burp의 nope 모듈을 추가 설치하여 사용할 수 있습니다. 

또한, frida라는 프로그램을 통해서 앱 취약점을 찾을 수 있습니다.

frida는 실행중인 프로세스에 대해 다양한 런타임 분석, 조작 및 리버스 엔지니어링 작업을 수행할 수 있는 도구입니다.

 

아직 frida를 공부하지 않아 공부하게되면 사용법과 실습을 정리하겠습니다.

 

2. 앱 단말기 취약점

앱 단말기 취약점은 앞서 설명한 것처럼  휴대폰이 탈취 당했다는 가정하에 발생할 수 있는 위협입니다.

취약점을 찾을 때 두가지를 중점으로 찾으면 됩니다.

1) 메모리 & 저장공간에 앱으로 인해 사용자 정보가 저장되어 있는지 확인합니다.

2) 앱의 흐름제어를 통해 비정상적인 행동을 할 수 있는지 확인합니다.

 

일단, 모바일 운영체제인 안드로이드와 ios는 리눅스 기반으로 만들어진 운영체제이기 때문에 리눅스 명령어를 그대로 사용할 수 있습니다. 

안드로이드 경우 adb를 설치하여 adb shell을 통해 모바일을 쉘로 제어할 수 있습니다. 그리고 쉘을  통해 모바일을 점검하기위해 root권한으로 실시하면 좋기 때문에 루팅이라는 과정을 통해 root권한을 획득합니다. ios경우 탈옥이라고 검색하면 찾을 수 있습니다.

 

애플리케이션이 있는 폴더는 /data/data 입니다. 애플리케이션은 실행 파일로 바이너리로 되어있어 그냥 확인한다면 어떤 코드인지 알 수 없기때문에 디컴파일과정을 거쳐 우리가 읽을 수 있는 형태로 바꿔줘야합니다.

안드로이드 앱은 대부분 java로 개발되어 jadx라는 도구를 사용하여 디컴파일을 할 수 있습니다. 거의 완벽하게 디컴파일 되므로 앱의 코드를 확인할 수 있을 것입니다.

 

이렇게 쉘과 애플리케이션의 코드를 확인하며 사용자 정보가 저장되어있는지와 앱의 흐름을 제어하면서 원래 개발자의 의도와는 다른 행동을 할 수 있는지 확인하며 취약점을 찾으면 됩니다.

 

일단 이번 블로그는 어떻게 모바일 앱 해킹 공부를 시작하면 좋은지와 하는 법을 간단하게 알아보았습니다. 안드로이드와 ios가 다르긴 하지만 거의 비슷하게 취약점을 찾을 수 있다고 합니다.

아직 공부를 시작하지 못하여 사진이나 실습이 부족하지만 앱 개발도 해보고 모바일 앱 해킹 공부도 시작하게 되면 자세한 내용은 그 때 정리하도록 하겠습니다.