2016-07-08 4 views
0

사용자가 다른 URL을 입력하여 다른 서버와 통신 할 수있는 앱이 있습니다.프로그래밍 방식으로 ATS 설정을 수정할 수 있습니까

사과 앱 전송 보안은 사용자가 URL을 입력 할 수있게하는면에서 조금은 악몽입니다. 내가 지금 알고

내 옵션 : ATS 오프

  1. 켭니다. 모든 트래픽이 보호되지 않으므로이 기능을 사용하지 마십시오.
  2. ATS를 켜고 사용자가 ATS와 호환되지 않는 URL을 입력하면 실패합니다. 이것은 가장 안전하지만 SSL을 제공하지 않거나 약한 SHA를 사용하는 서버로 이동하려는 경우 매우 제한적입니다.

내 사용자가 URL을 입력하고 ATS가 실패하는지 확인하는 것이 좋을 것입니다. 실패 할 경우 사용자에게 서버가 안전하지 않다는 것을 알리는 메시지를 표시 한 다음 확인하면 프로그래밍 방식으로 예외를 추가하는 것이 좋습니다.

질문은 프로그래밍 방식으로 ATS 설정을 변경하고 ATS에 예외를 추가 할 수 있습니까?

답변

0

현재 iOS에서는이 방법이 없습니다. 그리고 더욱 중요한 것은 올해 WWDC에서 애플은 App Store의 모든 앱이 ATS를 올해 말까지 사용할 수 있어야한다고 발표했다. 세션에서 사례별로 예외가 허용되지만 유효한 이유가 필요하다고 명시했습니다. 귀하의 것이 유효한 이유인지 (사용자가 입력 한 서버 이름) 확실하지 않습니다. Apple 만 확실히 알 수 있습니다. 귀하의 질문에 문

한 보정 : ATS 오프

켭니다. 모든 트래픽이 보호되지 않으므로이 기능을 사용하지 마십시오.

옵션 1은 모든 트래픽을 보호받지 못합니다. ATS를 비활성화하는 것은 Apple이 앱의 트래픽을 보호 할 수 없다는 것을 의미합니다. 적절하게 강력한 키와 전달 비밀로 SSL을 사용하는 서버에 연결하는 경우 연결이 안전합니다. 또한 HTTP를 통해 다른 서버에 연결할 수 있으므로 보호 기능이 거의 없습니다. 따라서 옵션 1은 모든 보안을 제거하지 않으며 사용자가 모든 서버 관련 트래픽이 안전하다고 기대할 수 없다는 것을 의미합니다.

Info.plist의 ATS에 도메인 이름 기반 예외를 적용하는 데 사용할 수있는 패턴을 사용자가 입력 한 URL이 제공합니까?

+0

감사합니다. @ 지갑! 파산은 그것이 내가 예상했던 대답이지만, 나는 무엇인가 놓치기를 바라고 있었다. 보호받지 못한 문제는 중간 공격에서 사람을 보호하는 것보다 더 중요합니다. ATS가 꺼져있는 경우에도 SSL을 사용하여 서버를 공격해도 누군가가 해당 서버 인증서를 '가짜'로 만들 수 있으며 내 앱 (ATS 포함)은 '잘못된'연결을 수락합니다. 아무리해도 좋은 생각이 떠오르는 것처럼 보입니다. – lostintranslation

1

이 경우, 나는 ATS의 목적을 잘못 해석하고 있다고 생각하지만, 원하는 것을하기위한 조항이 있습니다. ATS는 조건부 유효성을 검사하도록 설계되지 않았으므로 네트워크 연결의 모든 (또는 적어도 지정된 하위 집합)에 대해 OS 별 모범 사례 세트를 시행해야합니다. 대부분의 간단한 응용 프로그램의 경우 눈에 잘 띄는 사이트 나 제어하는 ​​사이트 중 일부에 액세스 할 때 충분합니다. 귀하의 경우에는 잠재적으로 사용자에게 안전하지 않은 사이트에 연결할지 여부 또는 잘못 구성된 사이트에 대해 내부 또는 호스팅 된 허용 목록을 사용할 것인지 묻는 확인 기능이 필요합니다.

다른 조직에서 설정할 수도있는 임의의 서버에 연결할 수있는 앱이 있으므로 업그레이드주기와 보안에 대한 관점이 매우 다를 수 있습니다.이런 종류의 설정에서는 보안이 취약한 사이트 (또는 사람들이 Let 's Encrypt를 더 많이 사용하기 전까지 자체 서명 된 인증서)를 지원할 수있는 유연성이 필요하기 때문에 화이트리스트 형식 (Apple의 기본값)은 적절하지 않습니다.

우리의 목적을 위해 우리는 ATS에 블랙리스트 스타일을 사용합니다. 기본적으로 우리가 통제하는 사이트와 잘 알려진 사이트는 보안 수준이 더 높아질 것이므로 ATS가 해당 사이트를 강제 적용해야합니다. 다른 모든 사이트의 경우 ATS가 비활성화되어 비 SSL 및 잘못 구성된 SSL을 사용할 수 있습니다.

자신 만의 점검을 수행하려면 NSURLSessionDelegate을 구현하고 URLSession:didReceiveChallenge:completionHandler:을 사용하여 SSL/TLS 연결의 유효성에 대한 자신의 결정을 내려야합니다.

핸들러 내부에서 적절하다고 생각되는 모든 인증을 수행 할 수 있으며 completionHandler 블록이 있으므로 계속하기 전에 사용자에게 메시지를 표시 할 수도 있습니다.

이 메서드는 인증서의 세부 정보를 표시 한 후 사용자가 선택할 수 있도록 허용하고 인증서 고정 용도로 사용합니다. 피닝의 경우 기본적으로 사이트 인증서의 지문을 저장하고이를 사용하여 사용자가 사이트를 확인했는지 확인합니다 (사이트 이름을 사용하는 것보다 훨씬 안전합니다. 사용자가 권한이나 인증서의 유효성을 검사하고 URL을 검증하므로 훨씬 더 안전합니다).).

완성도를 위해서

, 나는 그런 당신의 자신으로 "블랙리스트 스타일"위에서, 나는 YES에에 NSAllowsArbitraryLoads를 사용하여, 특히 당신이 (안전해야 알 도메인을 나열하는 NSExceptionDomains를 사용하여 구체적으로 말하는 겁니다 참조 서버 또는 잘 알려진 서비스). 여기에는 예외 테이블의 항목에 대해 NSExceptionAllowsInsecureHTTPLoads ~ NO을 설정해야합니다.

+0

이 경우 서버에서 사용하는 암호화도 확인할 수 있습니까? IE는 sha1면 경고합니까? – lostintranslation

+0

@lostintranslation 세션 자체는'TLSMinimumSupportedProtocol'을 설정할 수 있습니다. 그러나 현재 상태를 읽는 방법을 알지 못하기 때문에 프로토콜 설정을 시행해야하는 경우 유형을 처리해야 할 수도 있습니다. – gaige

관련 문제