티스토리 뷰
Android P에서 TLS 기본지원으로 인한 보안 강화
이 글은 https://android-developers.googleblog.com/2018/04/protecting-users-with-tls-by-default-in.html 에 올려진 글을 개인적인 공부를 위해 번역 한 글입니다.
혹시 오역을 발견하시면 kimhc999@gmail.com으로 알려주시면 감사하겠습니다.
안드로이드 보안팀 Senior Software Engineer, Chad Brubaker에 의해 작성 됨.
Android는 사용자, 기기 및 데이터를 안전하게 유지하기 위해 노력하고 있습니다. 우리가 데이터를 안전하게 유지하는 방법의 하나는 안드로이드 장치를 출입하는 모든 데이터를 전송 중인 TLS (Transport Layer Security)에서 보호하는 것입니다. Android P developer preview에서 발표했듯이 Android P를 대상으로 하는 앱이 기본적으로 암호화되지 않은 연결을 허용하지 않도록하여 이러한 보호 기능을 더욱 향상하고 있습니다.
이는 안드로이드 사용자들에게 더욱 더 나은 보안을 제공하기 위해 수년간 우리가 해온 다양한 노력에 따른 것입니다. 우발적인 암호화되지 않은 연결을 방지하기 위해 안드로이드 마시멜로(6.0)부터 android : usesCleartextTraffic를 메니페스트에 추가했습니다. 안드로이드 누가(7.0)에서는 Network Security Config (네트워크 보안 구성)기능을 통해 이 속성을 확장했습니다. 이 기능을 사용하면 앱이 암호화 없이 네트워크에 데이터를 전송하는 것을 의도적으로 막을 수 있습니다. 안드로이드 누가 및 오레오(8.0)에서는 여전히 평문(cleartext, 이하 평문) 전송은 허용했습니다.
내 앱을 어떻게 업데이트 해야 하나요?
앱에서 모든 네트워크 연결을 TLS를 사용해서 한다면, 아무것도 하지 않아도 됩니다. 그렇지 않다면, TLS를 사용하여 모든 연결을 암호화하도록 앱을 업데이트하십시오. 평문 연결을 계속 사용해야 하는 경우, 아래에 제시된 모범사례를 읽어보세요.
왜 TLS를 사용해야 하나요?
안드로이드는 모든 네트워크가 잠재적으로 위험하다고 전재하기 때문에, 모든 네트워크와의 연결에 대해 항상 암호화된 트래픽을 사용해야 합니다. 모바일 장치는 카페에서의 와이파이와 같이 다양한 네트워크에 지속해서 연결되기 때문에 특히 위험합니다.
암호화되지 않은 연결을 사용하여 콘텐츠를 주입, 잠재적으로 취약한 클라이언트 코드로의 공격 경로를 증가, 사용자를 추적에 암호화되지 않은 트래픽들이 사용될 수 있으므로, 내용과 관계없이 암호화되어야 합니다. 자세한 내용은 지난 블로그 게시물 및 Developers Summit talk를 참조하세요.
TLS가 느리지는 않나요?
내 앱에서 TLS를 사용하려면 어떻게 해야합니까?
서버가 TLS를 지원한다면, 앱과 서버 응답 URL을 http://에서 https://로 변경하면 됩니다. 그러면 HTTP스택에서 하던 일을 TLS에서 처리하게 됩니다.
소켓을 직접 작성하는 경우는, SocketFactory 대신에 SSLSocketFactory를 사용합니다. 특히 SSLSocket이 호스트 이름 확인을 수행하지 않기 때문에, 소켓을 올바르게 사용하도록 주의하십시오. 앱에서 hostname을 검증해야 합니다. 연결해야 하는 hostname을 getDefaultHostnameVerifier()에 넘겨주어 호출함으로써 검증하는 것을 권장합니다. 또한 HostnameVerifier.verify()가 오류 시 Exception을 발생시키지 않고, boolean을 리턴 해 주기 때문에, 앱에서 명시적으로 확인하게 해야 합니다.
전 꼭 평문을 전송해야 해요...
모든 연결에 대해 TLS를 사용해야만 하지만, 몇몇 레거시 서버들에 연결하기 위해서는 평문 트래픽을 사용해야 할 수도 있습니다. 그래야만 한다면, 평문 연결을 허용하도록 앱의 네트워크 보안 설정을 변경하면 됩니다.
여기에서 몇몇 예제들을 보여드리겠습니다. 좀 더 자세히 알기 위해서는 network security config 문서를 참조하세요.
특정 도메인에 대한 평문 접근 허용
특정 도메인들에 대해서 연결을 허용해야 하는 경우, 다음 config를 참조하면 됩니다.
<network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">insecure.example.com</domain> <domain includeSubdomains="true">insecure.cdn.example.com</domain> </domain-config> </network-security-config>
모든 안전하지 않은 도메인에 대한 연결 허용
만약 앱이 안전하지 않은 연결을 통해 URL에서 임의의 콘텐츠를 열 수 있도록 지원하는 경우 임의 호스트에 대한 일반 텍스트 연결을 지원하면서 자신의 서비스에 대한 일반 텍스트 연결을 비활성화해야 합니다. 안전하지 않은 연결을 통해 수신된 데이터는 전송 중에 변조된 데이터일 수 있으므로 조심해야 합니다.
<network-security-config> <domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">example.com</domain> <domain includeSubdomains="true">cdn.example2.com</domain> </domain-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
내 라이브러리는 어떻게 업데이트 하면 되나요?
라이브러리가 안전하지 않은 연결을 직접 생성하는 경우 평문를 연결하기 전에 isCleartextTrafficPermitted를 확인하여 앱의 평문 설정을 준수하는지 확인해야 합니다.
'Android > etc' 카테고리의 다른 글
오류수정, UnknownServiceException: CLEARTEXT communication to example.com not permitted by network security policy 이슈 (0) | 2018.10.21 |
---|---|
android와 .Net의 Visibility (0) | 2017.02.12 |
안드로이드, text 사이즈 지정 시 sp와 dp (0) | 2017.02.12 |
- Total
- Today
- Yesterday
- bundletool
- ListView
- 범블비 번역
- Windows SDK version 8.1
- 자마린
- Droid Knights
- Account.b
- 블로거 영세율
- aab 테스트
- Android Studio bumblebee
- Xamarin
- 안드로이드 스타일
- 영세율 채널주소
- 안드로이드 테마
- aab qa
- 유튜버 영세율
- 안드로이드
- 앱개발자 영세율
- 안드로이드 스튜디오 범블비
- Flutter
- 플루터
- cleartext
- target version 31
- 영세율 채널이름
- gmail 이슈
- 안드로이드 P
- 31 업데이트 후 오류
- Android
- 내부 앱 공유
- 드로이드 나이츠
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |