안드로이드 어플리케이션 취약점 진단을 할 때`Burp Suite를 주로 사용한다. 안드로이드 기기에서 Burp Suite를 사용하여 패킷을 잡아보는 방법은 다음과 같다.

일단 나는 주로 진단할 때 내 실 휴대폰을 사용하기에는 이런저런 제약사항과 불편함이 많아서 Nox Player를 사용한다. (쓸데없는 어플 잔뜩 깔았다 지우기, 루팅, 업데이트 이슈 등) Nox Player는 아래 링크에서 다운받을 수 있다.

https://www.bignox.com/


참고)

설치 후 실행 한 다음에는 Nox 상단의 설정에서 ROOT켜기를 선택 해 주면 루팅 된 에뮬레이터를 사용할 수 있다.


Burp Suite를 사용하기 위해서는 일단 네트워크의 프록시 설정을 해 주어야 한다. 에뮬레이터 내에서 설정 > Wi-Fi > WiredSSID를 선택한다. 이 때, WiredSSID는 길게 눌러 주어야 프록시 설정 화면으로 넘어갈 수 있으며, 만약 실 휴대폰을 사용 할 경우 사용하고 있는 와이파이 네트워크를 길게 눌러 주면 된다.

WiredSSID를 길게 누르면 아래와 같은 설정 화면이 나타난다. 여기에서 네트워크 수정을 선택하고, 아래와 같이 설정 해 준다.

  • 고급 옵션 체크
  • 프록시 : 수동
  • 프록시 호스트 이름 : Burp Suite를 실행 할 PC의 IP 주소. 같은 네트워크에 존재해야 함
  • 프록시 포트 : 프록시 서버의 포트. Burp Suite에도 같은 포트를 설정 해 주어야 함

휴대폰에서의 설정이 끝난 후에는 Burp Suite에서 에뮬레이터 혹은 안드로이드 휴대폰의 패킷을 잡기 위해 설정을 해 주어야 한다. Burp Suite에서 Proxy > Options를 선택하면 Proxy Listeners라는 메뉴가 있다. 여기에서 어디를 지나가는 패킷을 잡을 지 설정할 수 있다. Add를 눌러 모바일 기기에서의 패킷을 잡을 수 있는 Listeners를 추가 한다.

Bind to port는 앞서 모바일 기기의 프록시 포트에 설정 한 포트 번호를 입력한다. Bind to addressAll interfaces를 선택한 후 OK를 눌러 준다.

Proxy Listeners에 방금 입력 한 Listener가 추가되어 있는 것을 확인할 수 있다. Running에 체크가 되어 있어야 패킷을 잡을 수 있다.

여기까지 하면 기본 설정은 끝이 난다. HTTP를 사용하는 곳만 방문 할 경우에는 아무런 오류가 나지 않을 것이다. 하지만 HTTPS를 사용하는 페이지에 접속을 시도하면 아래와 같은 보안 경고가 나온다.

인증서가 없어 오류가 나는 것이므로, http://burp를 방문하여 인증서를 설치 해 주면 된다.

http://burp

http://burp를 주소창에 입력하면 아래와 같은 페이지에 접속할 수 있다.

만약 접속할 수 없다면 아래 내용들을 확인 해 보면 된다.

  • Wi-Fi 설정에서 프록시 설정을 했는가
  • Burp Suite가 켜져 있는가
  • Burp Suite에 Listener가 Running 상태인가
  • Proxy 메뉴에서 Intercept On으로 해 두었을 때 패킷이 잡히는가

접속 후에는 오른쪽 상단의 CA Certificate을 눌러 인증서를 다운받아 준다. 그런데 여기서 다운받는 인증서는 cacert.der로, Windows PC에서 설치할 수 있는 형태이다. 안드로이드 기기에서 설치하기 위해서는 .cer 확장자여야 하기 때문에 이름 변경이 필요하다.

이를 위해 adb를 사용한다. Nox Player를 설치한다면 adb는 함께 설치되어 있다. Nox Player가 설치 된 폴더(내 경우 C:\Program Files (x86)\Nox\bin)에 adb.exe가 존재한다.


참고)

만약 adb.exe가 있는 폴더가 아니라 다른 경로에서도 adb를 실행하고 싶은 경우 환경 변수에 등록 해 주면 된다. 시작 메뉴에 환경 변수를 검색 해 보면 시스템 환경 변수 편집이 있다. 이를 선택한 후 고급 탭 > 환경 변수 메뉴를 선택한다.

하단의 시스템 변수를 살펴 보면 Path가 있는데, 이를 선택하고 편집 버튼을 클릭한다.

이미 등록되어 있는 환경 변수들이 있을텐데, 가장 마지막에 adb.exe가 존재하는 경로 즉, Nox Player가 설치되어 있는 경로를 입력한 후 확인을 선택한다.

등록 후 재부팅을 하면 어느 위치에서든 adb를 실행할 수 있다.


adb가 정상적으로 동작하는지 확인하기 위해 adb devices를 입력 해 보았다. 아래와 같이 디바이스 정보가 뜨면 정상적으로 adb를 사용할 수 있다.

다운 받은 인증서의 이름을 변경하기 위해 디바이스의 쉘을 실행 시켰다. adb shell을 입력하면 연결된 모바일 기기의 쉘을 실행시킬 수 있다. 모든 명령어는 리눅스와 동일하기 때문에 어렵지 않게 사용할 수 있다. 다운받은 인증서는 기본적으로 mnt/sdcard/Download 폴더에 저장되어 있다. 해당 경로로 들어 가 cacert.dercacert.cer로 변경 해 주었다.

1
2
3
4
5
$ adb shell
$ cd mnt/sdcard/Download/
$ ls
cacert.der
$ mv cacert.der cacert.cer

만약 PC에서 인증서를 다운받아 adb push를 통해 인증서를 넣는경우에도 아래와 같이 mnt/sdcard/ 경로에 저장하면 된다.

1
> adb push [인증서경로] /mnt/sdcard/cacert.cer

인증서 저장이 완료 되면 설정 > 보안 > SD 카드에서 설치 > 내부 저장소를 선택 해 인증서를 저장 한 경로로 이동한다.

나는 mnt/sdcard/Download 아래에 저장 해 두었는데, SD 카드에서 설치 > 내부 저장소를 선택했을 때 보이는 경로는 mnt/sdcard이다. 따라서 나는 Download를 선택하고 해당 폴더 안의 cacert.cer를 선택 해 주었다. 인증서 선택 시 인증서 이름을 지정하라고 하는데 나는 그냥 burp로 설정 해 주었다.

확인을 눌러 주면 인증서 설치가 완료 될 것이다. 다시 Burp Suite로 패킷을 잡아 보면 정상적으로 모바일 기기에서의 패킷이 잡히는 것을 확인할 수 있으며, 경고창도 뜨지 않는다.

예시는 브라우저만 실행 해 보았는데, 만약 어플리케이션이 HTTP 혹은 HTTPS 통신을 하는 경우에도 Burp Suite를 통해 확인할 수 있다.