앱에서 통신과 관련된 취약점을 진단하기 위해서 패킷을 수집하고 변조를 하기 위해서는 단말의 프록시 연결이 필요하다.
여기서는 중간자공격을 한다고 가정하고 통신하는 패킷을 분석해볼 것이다.
우선 윈도우에 burp suite를 설치하자
https://portswigger.net/burp/communitydownload
Download Burp Suite Community Edition - PortSwigger
Burp Suite Community Edition is PortSwigger's essential manual toolkit for learning about web security testing. Free download.
portswigger.net
중간자 공격을 하기 위해서 공격자가 인증서를 등록해야 한다.
이것은 안드로이드 운영체제 정책을 무시하고 프록시 서버의 인증서를 단말에 설치하여 프록시 서버를 신뢰하도록 하기 위함이다.
설치가 끝났다면 burp suite를 실행시키자
시작하기 전에 설정해야 할것이 있다. 바로 프록시 도구의 인증서를 생성해야 한다.
Proxy를 누르고 Proxy setings에 들어가자.
위의 사진처럼 Import/ export CA certificate 버튼을 클릭하고 위와 같이 체크해주면 된다.
그 후에 인증서 저장위치를 정해주면 끝이다.
이렇게 하면 프록시 도구의 인증서를 생성했다.
이 인증서는 안드로이드 운영체제가 식별할 수 없으므로 식별할 수 있도록 인증서 형식을 변경시켜줘야 한다.
인증서 형식 변경을 위해 OpenSSL 도구를 사용해야 한다.
https://slproweb.com/products/Win32OpenSSL.html
Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions
Minimum system requirements: Windows XP or later 32MB RAM 200MHz CPU 30MB hard drive space Recommended system requirements: Windows XP or later 128MB RAM 500MHz CPU 300MB hard drive space April 11, 2024 - OpenSSL 3.3 is available. Users should currently in
slproweb.com
여기 접속해서 Win64 OpenSSL v3.3.2 Light를 설치해주면 된다.
실행해서 아래와 같이 명령어를 입력하자.
안드로이드 7 버전 이후에는 시스템 경로에 등록된 CA 인증서만 신뢰한다.
일반 권한으로는 외부로부터 다운로드한 인증서를 설치할 수 없기 때문에 루트 권한으로 직접 복사해서 사용해야 한다.
시스템 인증서에 복사하기 위해서는 파일명을 인증서의 해시값으로 변경해야 한다.
cacert.pem파일을 해시값.0으로 변경해야 한다.
이렇게 변경했다면 안드로이드 시스템 경로로 넣었을 때 인증서인식이 가능하다.
이제 인증서를 안드로이드 디바이스로 보내보자
이렇게 하면 ADB를 활용해서 인증서 파일 시스템 경로로 복사가 끝났다.
그럼 성공적으로 인증서가 복사됐는지 확인해 보자.
복사한 경로로 들어가서 확인해 보니 성공적으로 들어가져 있다.
이제 단말기의 네트워크 설정에서 프록시 연결 설정을 진행하자.
우선 버프스위트에서 외부 장치에서 접속할 수 있도록 다음과 같이 수정하자.
그 후에 nox 플레이어에서 와이파이 설정창으로 들어가자.
여기서 왼쪽 마우스를 쭉 누르면 설정창이 나온다.
프록시 호스트 이름은 cmd에서 ipconfig명령어를 입력해서 현재 PC의 IP주소를 입력해 주면 된다.
이러면 모든 설정이 끝이다.
이제 Nox에서 검색을 한다던가 다른 작업을 할 때 burp suite를 통해서 패킷을 분석할 수 있게 되었다.
이렇게 프록시 도구를 사용해서 패킷을 확인할 수 있고 변조도 가능하다면 심각한 위험이 발생할 수 있다.
발생할 수 있는 점
이번에는 위의 과정을 통해서 패킷을 분석할 수 있게 된다면 어떤 일이 발생할 수 있는지 정리해 보자.
- 안드로이드 앱은 백엔드와 통신하기 위해서 HTTP/HTTPS 프로토콜을 사용하기 때문에 안드로이드 앱의 백엔드에도 이러한 취약점이 발생할 수 있다.
- RESTful API를 사용하는 경우에는 앱과 서버가 데이터를 주고받는데 이 부분에서 SQL injection이나 인증 우회 공격 등 추가 공격이 가능하다.
해결 방법?
안드로이드 앱에서는 SSL 인증서 검증을 강제로 하지 않기 때문에 에러 방지를 위해 공인 인증서가 아니더라도 에러를 무시하도록 개발하는 경우가 있다. 그래서 앱과 서버가 통신 중에 인증서가 변경이 되더라도 통신이 가능하다는 문제점이 발생한다. 이를 방지하기 위해서 아래와 같이 진행할 수 있다.
- X.509 인증서의 주체인 CN(Common Name)이 URL과 일치하는지 확인
- 인증서가 신뢰할 수 있는 CA에 서명됐는지 확인
- 서명값이 정확한지 확인
'안드로이드 모의해킹 > 동적 분석' 카테고리의 다른 글
프리다를 이용한 후킹2 (1) | 2024.09.13 |
---|---|
프리다를 이용한 후킹 (2) | 2024.09.13 |
TCP 패킷 스니핑 (0) | 2024.09.13 |
앱 코드 패치 (0) | 2024.09.10 |