iOS 앱에서 SSL 고정을 수행하는 방법

게시 됨: 2020-02-24

사람들은 집에서 나오는 순간 개방형 Wi-Fi 네트워크를 탐색합니다. 공항에서 기다리든 카페에 앉아 있든 주요 의제는 개방형 Wi-Fi 연결을 찾는 것입니다.

무섭게도 해커들도 같은 길을 걷고 있습니다. 그들 역시 사용자가 피싱 두뇌를 작동시키고 민감한 데이터 또는 더 나쁜 것은 은행 계좌의 돈을 박탈하기 전에 개방형 네트워크에서 연결 요청을 시작하기를 기다립니다.

HTTPS는 어느 정도 효과적이지만, 깨지지 않고 대체로 안전하여 사용자를 안전하게 만드는 것으로 알려진 SSL 프로토콜입니다. 그러나 MITM(Man-In-The-Middle) 공격 이를 위반할 수 있는 방법을 찾았습니다.

여기에서 SSL Pinning 기술모바일 앱 보안 모범 사례 중 하나로 등장합니다 . 특히 플랫폼에 대해 이야기하면 문제를 해결하는 놀라운 일을 수행하는 이상적인 iPhone 앱 보안 솔루션입니다.

이 기사에서는 이러한 Man In The Middle 공격을 방지하기 위해 iOS 앱에 SSL Pinning을 통합 하는 유형과 프로세스를 살펴보겠습니다. OWASP 모바일 보안 테스트 실행 의 활성 부분인 프로세스입니다 .

SSL 인증서 고정 방법 유형

SSL Pinning 테스트에는 아래와 같이 크게 두 가지 방법이 있습니다.

SSL 고정

SSL-certificate

  • 인증서 고정 – 서버의 인증서를 다운로드하여 앱에 번들로 묶을 수 있습니다. 런타임 시 앱은 서버 인증서를 포함된 인증서와 비교합니다.
  • 공개 키 고정 – 코드에서 인증서의 공개 키를 문자열로 검색할 수 있습니다. 런타임에 애플리케이션은 인증서의 공개 키를 코드에 하드 코딩된 키와 비교합니다.

두 가지 SSL 고정 iOS 방법 중에서 선택하는 것은 서버 구성 및 개별 요구 사항에 따라 다릅니다. 첫 번째 옵션을 선택하면 서버가 인증서를 변경할 때 앱을 업로드해야 하며 그렇지 않으면 작동 중지됩니다. 두 번째 옵션을 선택하면 공개 키가 변경되지 않으므로 키 교체 정책 위반할 수 있습니다.

이제 iOS 앱에서 SSL Pinning을 구현하는 단계를 살펴보겠습니다.

*참고: 아래에 언급된 단계는 iOS 인증서를 Swift로 고정하는 프로세스를 따릅니다.

iOS 앱에서 SSL 고정을 구현하는 방법

1. NSURL세션

NSURLSession의 경우 SSL 고정을 처리하는 기본 방법은 URLSession:didReceiveChallenge:completionHandler:delegate입니다. 개발자는 URLSessionDelegate를 준수하도록 클래스를 설정하고 이 함수를 클래스에 붙여넣어야 합니다.

이 기능은 " 원격 서버의 인증 요청에 대한 응답으로 대리인에게 자격 증명을 요청합니다 . " 그런 다음 iPhone 앱 개발자 는 서버의 인증서를 앱 번들에 저장된 인증서와 비교합니다. 두 인증서가 동일한 것으로 확인되면 인증을 통해 인증서가 통과되고 클라이언트가 서버에 연결할 수 있습니다.

2. Alamofire 인증서 고정

Alamofire 는 Swift 언어에서 HTTP 네트워킹을 위한 가장 유명한 라이브러리 중 하나입니다. iOS Swift의 SSL 고정 기능이 내장되어 있으며 사용이 매우 쉽습니다. Alamofire 인증서 고정 으로 안전한 iOS 앱 을 만드는 방법은 다음과 같습니다 .

SSL 고정 구현과 관련된 일반적인 문제 및 해결 방법

평판이 좋은 앱 개발 기관 품질 보증 전문가 는 전체 네트워크 침투를 포함하여 보안 취약점에 대해 모바일 앱을 정기적으로 테스트합니다. 그러나 같은 열정 으로 이러한 영역 에 집중하지 않는 많은 앱 테스트 대행사가 있습니다. 그들은 이 특정 iPhone 보안 솔루션 을 앱에 구현할 때 꺼려하는 것 같습니다 .

다음은 이에 대한 일반적인 이유 중 일부입니다.

  • iOS 에서 SSL 고정 가장 큰 단점 중 하나는 구현입니다. 이 프로세스는 복잡하고 개발자가 코드를 계속해서 작성해야 하고 앱 빌드 프로세스를 복잡하게 만들 수 있습니다 .
  • 정기적으로 변경해야 하는 iOS SSL 인증서를 고정하면 개발자가 인증서가 변경될 때마다 앱 바이너리를 업데이트해야 할 수 있습니다.
  • iOS SSL 검증을 우회 하는 방법을 보호하기 위해 여러 노력을 기울여야 합니다.

무대 부재가 가져올 수 있는 영향에 주목하면서 신뢰할 수 있는 iPhone 앱 개발 회사 에서 몇 가지 일반적인 함정을 피하는 방법은 다음과 같습니다 .

핀 테스트

모든 것이 작동하는지 여부를 테스트하는 일반 앱 테스트와 달리 SSL 고정 테스트 방법은 무언가가 실패했는지 확인해야 한다는 것입니다. 앱이 잠재적으로 손상된 연결을 취소하는지 테스트하는 데 집중해야 합니다. 앱이 단일 엔드포인트와의 통신을 가능하게 하는 경우 테스트는 GET 요청을 임의의 상태 로 만드는 것만큼 간단합니다 . 이상적으로는 이 경우 앱이 연결을 취소해야 하며 요청이 실패해야 합니다.

인증서 변경 처리

도메인 인증서를 갱신하면 공개/개인 키 쌍이 유지되지만 항상 그런 것은 아닙니다. 그러나 업데이트 주기를 올바르게 계획하면 최종 사용자의 다운타임을 피할 수 있습니다.

iOS SSL 인증서 가 웹사이트에서 활성화 되기 전에 현재 활성화된 인증서와 함께 앱에 고정한 다음 업데이트를 릴리스해야 합니다. Appinventiv에서 이 단계를 따라 안전한 iOS 앱 만들 임시로 새 인증서로 빠른 테스트를 수행하고 두 인증서를 고정한 상태에서 앱을 테스트합니다.

iOS 애플리케이션의 SSL 고정에 대한 FAQ

1. iOS 앱에서 민감한 데이터를 어디에 저장합니까?

앱의 민감한 데이터는 항상 iOS의 iCloud 또는 Keychain에 저장해야 하며 적절한 암호화 후 데이터베이스에도 저장해야 합니다.

2. SSL은 어떻게 작동합니까?

SSL 고정은 가장 일반적인 iOS 앱 보안 팁 중 하나입니다 . 그러나 이것이 의미하는 바를 이해하려면 먼저 SSL이 어떻게 작동하는지 알아야 합니다.

  • 브라우저가 SSL로 보호된 웹사이트에 연결을 시도합니다. 그런 다음 브라우저는 웹 서버에 자신을 식별하도록 요청합니다.
  • 그런 다음 웹 서버는 브라우저에 SSL 인증서 사본을 보냅니다.
  • 브라우저는 SSL 인증서를 신뢰할 수 있는지 확인합니다. 가능한 경우 메시지가 웹 서버로 전송됩니다.
  • 그런 다음 웹 서버는 SSL 암호화 세션을 시작하기 위해 승인을 다시 보냅니다.
  • 암호화된 데이터는 최종적으로 브라우저와 웹 서버 간에 공유됩니다.

마무리 생각

SSL 고정은 안전한 것으로 간주되어 암호화가 필요할 때마다 널리 사용되지만 고위험 앱을 구축할 때는 항상 다른 보호 계층을 환영합니다. SSL 고정을 사용하면 SSL 신뢰 검증 체인 위에서 서버의 ID를 확인할 수 있습니다.

SSL 고정을 사용하면 SSL 인증서를 로컬 번들에 저장한 지정된 서버와의 연결을 제외한 모든 연결을 거부할 수 있습니다. 이것의 잠재적인 단점은 서버의 SSL 키가 변경될 때마다 앱을 업데이트해야 한다는 것입니다.

SSL 고정으로 iOS 앱도 출시할 계획 이라면 최고의 iOS 앱 개발 회사 에 문의하는 것이 좋은 시작이 될 수 있습니다 .