안녕하세요. 파인더갭의 "shiro" 입니다. 이번에는 저희 버그바운티에 참여하실때 사용하는 OpenVPN과 함께 모바일 프록시를 잡는 방법을 정리해보려 합니다. 안드로이드 기준이며 iOS는 추후에 정리하도록 하겠습니다. 일단 해결해야될 문제(?)를 정리해보죠
- 시스템 영역에 인증서 밀어널기
- 위 문제를 해결하시면 "ERR_CERT_VALIDITY_TOO_LONG" 이라는 이상한 에러를 보신적이 있으실 겁니다.
- OpenVPN은 어디에 설치할까 PC? Moblie?
1, 2번 문제를 동시에 진행해 보도록하겠습니다.
"ERR_CERT_VALIDITY_TOO_LONG"이라는 에러는 인증서 유효기간이 비정상적으로 길면 나타나는 오류로 인증서의 기간을 짧게 설정해야합니다. 설명은 Fiddler를 이용하겠습니다. 이유는 제가 요즘 Fiddler를 잘 쓰고 있기 때문이죠.
Fiddler 인증서 기간 설정
(alt + q)를 눌러 QuickExec 창을 활성화 시킨 후 다음 명령어를 수행합니다.
- PREFS SET fiddler.certmaker.validdays 360 // 인증서 유효기간 360일
- PREFS SET fiddler.certmaker.gracedays 1 // 인증서 유효기간 1일전에 시작

Fiddler에서 설정한 내용을 인증서에 반영해줍니다.  이제 인증서를 내려받아서 확인해보면 아래와 같이 인증서 기간이 설정한대로 변경된 것을 확인할 수 있습니다.

이제 인증서가 준비되었으니 안드로이드에 밀어넣어 보죠.
system영역에 인증서 설치
일단 openssl이 설치되어 있어야되니 해당 사이트에 가셔서 PC에 설치해야 합니다.
[PC]
다운받은 Fiddler인증서를 아래와 같은 흐름으로 최종적으로는 <hash값>.0 이라는 파일로 변환해야 합니다.
FiddlerRoot.cer 확장자 der로 변경
openssl x509 -inform DER -in FiddlerRoot.der -out FiddlerRoot.pem // 인증서 포맷 pem으로 변경
openssl x509 -inform PEM -subject_hash_old -in FiddlerRoot.pem // 인증서 해시값 확인
확인한 <hash값>.0 으로 인증서 이름 변경
[Mobile]
이제 해당 인증서를 아래 명령어로 밀어 넣습니다.
adb connect 127.0.0.1:62001(녹스 사용시 port)
adb push 269953fb.0 /data/local/tmp/
chmod 644 269953fb.0
mount -o rw,remount /system
mv 269953fb.0 /system/etc/security/cacerts/
reboot
이제 재부팅하고, 설정에서 인증서 확인하면 Fiddler인증서가 시스템 인증서로 설치되어 있는 것 확인할 수 있습니다.
이제 OPENVPN을 어느 위치에 설치하냐 입니다. 이건 정답은 없으니 제가 설치한 곳을 알려드리겠습니다.
가끔 녹스, 실기기 사용을 병행하셔서 헷갈리는 부분이 있는 것 같습니다.
실기기로 테스트 하실때는 아래와 같이 모바일에 설치하시면 됩니다.
NOX(PC에뮬레이터)를 사용하실 시에는 아래와 같이 PC에 OpenVPN를 설치하시면 됩니다.
이상으로 VPN과 함께 모바일 프록시 잡는 방법에대한 글을 작성해 보았습니다.
도움되셨으면 좋겠네요.
그럼 다음 글에서 뵙겠습니다.
