Security Note
article thumbnail
반응형


모바일 앱을 진행하던 중 Flutter로 개발된 앱이 HTTP 패킷이 캡처되지 않아 진단이 많이 지연되었다.

Flutter로 개발된 모바일 앱에 HTTP 패킷을 캡처하기 위해 해결한 내용을 정리한다.


Flutter

  • Flutter는 google에서 개발한 프레임워크이며 18년 12월에 릴리즈되었으며 해외에서는 많은 사용자가 이용중이라고 한다.
  • 국내에선 자료가 많이 없지만 단일코드로 WEB, Android, iOS를 개발할 수 있어 개발효율이 높다고 한다.
  • Dart라는 개발 언어로 프로그래밍하며 이 역시 google에서 개발한 언어다.
  • 앞으로 Flutter로 개발된 앱이 증가할 거 같고 Burp Suite 와 Charles 등 HTTP 패킷을 캡처하기 위해 정리한다.
  • 추가로 개발자의 경우 디버깅을 목적으로 아래 설명과 같이 코드 추가가 필요할 것이다.

Flutter APP Burp Proxy / Charles Debug

  • Flutter는 HttpOverrides CLASS를 사용하지 않으면 HTTP 패킷 캡처, 프록시 서버 등을 이용하지 못하는거로 확인된다.
  • 개발자 입장에선 Charles 등 디버깅 툴도 사용못하므로 HttpOverrides Class를 사용해야한다.
  • 아래 소스코드를 참고하여 소스코드를 추가한다.

HttpOverrides 추가

  • main.dart에 HttpOverrides Class를 추가한다.
class ProxiedHttpOverrides extends HttpOverrides {
  String _proxy;
  ProxiedHttpOverrides(this. _proxy);

  @override
  HttpClient createHttpClient(SecurityContext context) {
    return super.createHttpClient(context)
      ..findProxy = (uri) {
        return _proxy.isNotEmpty ? "PROXY $_proxy;" : 'DIRECT';
      }
      ..badCertificateCallback = (X509Certificate cert, String host, int port) => Platform.isAndroid;
  }
}

void main 함수 수정

  • 앱을 실행하는 함수에서 runApp 호출 전에 HttpOverrides를 실행해 프록시 서버로 통신하도록 소스코드를 추가
  • HttpOverrides.global ~ 로 시작하는 Line 중 (" ") 안에 내용을 진단환경에 맞춰 작성한다.
  • 진단/Debug PC는 고정IP로 설정하여야한다.
HttpOverrides.global = new ProxiedHttpOverrides("진단/디버깅 PC:Port");
runApp(testApp());

//EX)
HttpOverrides.global = new ProxiedHttpOverrides("192.168.0.10:8080");
runApp(testApp());​

참고 사항

  • 모바일 앱보안사항 중 하나로 허용되지 않은 인증서는 통신이 불가능하도록 설정해야한다.(SSL Pinning 등)
  • 하지만 HttpOverrides Class를 사용하게 되면 이 부분에서 보안상 문제가 발생할 수 있다고 한다.
  • 따라서 스토어에 업로드할 APP이 아닌 테스트용으로 릴리즈된 Android, iOS 등에서만 해당 코드를 추가하도록 한다.
반응형
profile

Security Note

@긴면봉

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!