안드로이드 어플리케이션 취약점 진단을 할 때`Burp Suite를 주로 사용한다. 안드로이드 기기에서 Burp Suite를 사용하여 패킷을 잡아보는 방법은 다음과 같다.
일단 나는 주로 진단할 때 내 실 휴대폰을 사용하기에는 이런저런 제약사항과 불편함이 많아서 Nox Player
를 사용한다.
(쓸데없는 어플 잔뜩 깔았다 지우기, 루팅, 업데이트 이슈 등)
Nox Player
는 아래 링크에서 다운받을 수 있다.
참고)
설치 후 실행 한 다음에는 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 address
는 All interfaces
를 선택한 후 OK
를 눌러 준다.
Proxy Listeners
에 방금 입력 한 Listener
가 추가되어 있는 것을 확인할 수 있다.
Running
에 체크가 되어 있어야 패킷을 잡을 수 있다.
여기까지 하면 기본 설정은 끝이 난다. HTTP를 사용하는 곳만 방문 할 경우에는 아무런 오류가 나지 않을 것이다. 하지만 HTTPS를 사용하는 페이지에 접속을 시도하면 아래와 같은 보안 경고가 나온다.
인증서가 없어 오류가 나는 것이므로, 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.der
를 cacert.cer
로 변경 해 주었다.
|
|
만약 PC에서 인증서를 다운받아 adb push
를 통해 인증서를 넣는경우에도 아래와 같이 mnt/sdcard/
경로에 저장하면 된다.
|
|
인증서 저장이 완료 되면 설정
> 보안
> SD 카드에서 설치
> 내부 저장소
를 선택 해 인증서를 저장 한 경로로 이동한다.
나는 mnt/sdcard/Download
아래에 저장 해 두었는데, SD 카드에서 설치
> 내부 저장소
를 선택했을 때 보이는 경로는 mnt/sdcard
이다.
따라서 나는 Download를 선택하고 해당 폴더 안의 cacert.cer
를 선택 해 주었다.
인증서 선택 시 인증서 이름을 지정하라고 하는데 나는 그냥 burp
로 설정 해 주었다.
확인
을 눌러 주면 인증서 설치가 완료 될 것이다.
다시 Burp Suite로 패킷을 잡아 보면 정상적으로 모바일 기기에서의 패킷이 잡히는 것을 확인할 수 있으며, 경고창도 뜨지 않는다.
예시는 브라우저만 실행 해 보았는데, 만약 어플리케이션이 HTTP 혹은 HTTPS 통신을 하는 경우에도 Burp Suite를 통해 확인할 수 있다.