Advertisement
  1. Code
  2. Mobile Development

Apple refuerza la seguridad con App Transport Security

Scroll to top
Read Time: 7 min

Spanish (Español) translation by steven (you can also view the original English article)

La importancia y la atención para la seguridad en la web ha aumentado sustancialmente en los últimos años. Durante la WWDC de este año, Apple dejó en claro que planea liderar con el ejemplo mejorando la seguridad de sus sistemas operativos a través de una nueva característica, App Transport Security.

Por supuesto, la seguridad de una plataforma es tan sólida como la seguridad de sus componentes y eso incluye aplicaciones de terceros. En otras palabras, Apple espera que los desarrolladores adopten App Transport Security en sus aplicaciones.

En este artículo, explicaré qué implica App Transport Security, cómo afectará a tus aplicaciones y cómo puedes actualizar tus aplicaciones para cumplir con las pautas y recomendaciones de Apple.

¿Qué es App Transport Security?

App Transport Security, o ATS para abreviar, es una nueva característica de iOS 9 y OS X El Capitan. Si bien Apple no mencionó watchOS, podemos suponer que App Transport Security también se aplica a watchOS 2. App Transport Security tiene como objetivo mejorar la seguridad de los sistemas operativos de Apple y cualquier aplicación que se ejecute en estos sistemas operativos.

Las solicitudes de red que se realizan a través de HTTP transmiten datos como texto sin formato. No hace falta decir que esto plantea un riesgo de seguridad significativo. Apple hace hincapié en que cada desarrollador debe esforzarse por mantener seguros los datos de sus clientes, incluso si esos datos no parecen importantes o confidenciales.

App Transport Security fomenta activamente la seguridad al imponer una serie de mejores prácticas de seguridad, siendo la más importante el requisito de que las solicitudes de red deben enviarse a través de una conexión segura. Con App Transport Security habilitada, las solicitudes de red se realizan automáticamente a través de HTTPS en lugar de HTTP.

Existen otros requisitos para mejorar aún más la seguridad. Por ejemplo, App Transport Security requiere TLS (Transport Layer Security) 1.2 o superior. Si bien es posible que no estés familiarizado con TLS, estoy seguro de que has oído hablar de SSL (Secure Sockets Layer). TLS es el sucesor de SSL y es una colección de protocolos criptográficos para hacer cumplir la seguridad en las conexiones de red.

Apple publicó recientemente una nota técnica pública de prelanzamiento sobre App Transport Security para dar a los desarrolladores la oportunidad de planificar App Transport Security. El documento describe lo que App Transport Security espera de tus aplicaciones y los servicios web con los que esto interactúa.

Excepciones

Espera un segundo. Mi aplicación utiliza una CDN (Content Delivery Network) sobre la que no tengo control y no es compatible con HTTPS. No te preocupes Apple te cubre. Con respecto a App Transport Security, una aplicación se divide en una de cuatro categorías. Repasemos cada categoría para ver cómo impacta una aplicación.

Sólo HTTPS

Si tu aplicación solo interactúa con servidores que admiten HTTPS, entonces tienes suerte. Tu aplicación no tendrá que hacer ningún cambio. Sin embargo, ten en cuenta que App Transport Security requiere TLS 1.2 y espera que el dominio use cifrados que admitan el secreto directamente. El certificado también debe cumplir con los requisitos impuestos por ATS. Por lo tanto, es importante verificar que los servidores con los que se comunica tu aplicación cumplan con los requisitos de ATS.

Mezclar y combinar

Es posible que tu aplicación se comunique con servidores que no cumplen con los requisitos de ATS. En ese caso, debes informar al sistema operativo qué dominios están involucrados y especificar en Info.plist de tu aplicación qué requisitos no se cumplen.

Esto significa que App Transport Security se aplica para cada punto final con el que se comunica tu aplicación, con la excepción de las especificadas en la lista de Info.plist de tu aplicación. Puedes configurar las excepciones utilizando una serie de claves predefinidas. En la siguiente lista de información, definimos tres excepciones.

1
<?xml version="1.0" encoding="UTF-8"?>
2
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
<plist version="1.0">
4
<dict>
5
    ...
6
	<key>NSAppTransportSecurity</key>
7
	<dict>
8
		<key>NSExceptionDomains</key>
9
		<dict>
10
			<key>api.insecuredomain.com</key>
11
			<dict>
12
				<key>NSExceptionAllowsInsecureHTTPLoads</key>
13
				<false/>
14
			</dict>
15
			<key>cdn.somedomain.com</key>
16
			<dict>
17
				<key>NSThirdPartyExceptionMinimumTLSVersion</key>
18
				<string>1.1<string/>
19
			</dict>
20
			<key>thatotherdomain.com</key>
21
			<dict>
22
				<key>NSIncludesSubdomains</key>
23
				<true/>
24
				<key>NSExceptionRequiresForwardSecrecy</key>
25
				<false/>
26
			</dict>
27
		</dict>
28
	</dict>
29
	...
30
</dict>
31
</plist>

api.insecuredomain.com

La primera excepción que definimos le dice a ATS que la comunicación con este subdominio anula el requisito de usar HTTPS. Ten en cuenta que esta excepción solo se aplica al subdominio especificado en la excepción. Es importante comprender que la clave NSExceptionAllowsInsecureHTTPLoads no solo se relaciona con el uso de HTTPS. La excepción especifica que, para ese dominio, se anulan todos los requisitos de App Transport Security.

cdn.domain.com

Es posible que tu aplicación se comunique con un servidor que muestra tus datos a través de HTTPS, pero no estás utilizando TLS 1.2 o superior. En ese caso, define una excepción que especifique la versión mínima de TLS que debe usarse. Esta es una opción mejor y más segura que anular por completo App Transport Security para ese dominio en particular.

thatotherdomain.com

La clave NSIncludesSubdomains le dice a App Transport Security que la excepción se aplica a cada subdominio del dominio especificado. La excepción define además que el dominio puede usar cifrados que no admiten el secreto directamente (NSExceptionRequiresForwardSecrecy) al expandir la lista de cifrados aceptados. Para obtener más información sobre el secreto directo, recomiendo leer la nota técnica de Apple sobre el tema.

Optar por salir 

Si estás desarrollando un navegador web, entonces tienes un problema ligeramente mayor. Debido a que no sabes qué páginas web visitarán tus usuarios, no puedes saber si esas páginas web se muestran a través de HTTPS y cumplen con los requisitos de ATS. En ese caso, no hay otra opción más que optar por no participar de App Transport Security por completo.

Es importante que te excluyas explícitamente de App Transport Security. Recuerda que App Transport Security se aplica de forma predeterminada. En el Info.plist de tu aplicación, agrega un diccionario para la clave NSAppTransportSecurity. El diccionario debe incluir una clave, NSAllowsArbitraryLoads, y su valor debe establecerse en YES. Así es como debería verse el archivo Info.plist de tu aplicación si optas por salir de App Transport Security.

1
<?xml version="1.0" encoding="UTF-8"?>
2
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
<plist version="1.0">
4
<dict>
5
    ...
6
	<key>NSAppTransportSecurity</key>
7
	<dict>
8
		<key>NSAllowsArbitraryLoads</key>
9
		<true/>
10
	</dict>
11
	...
12
</dict>
13
</plist>

Optar por salir con excepciones

Hay una cuarta opción en la que tu aplicación se excluye de App Transport Security, pero define una serie de excepciones. Esto es útil si tu aplicación obtiene datos de una variedad de servidores que no controlas, pero también si te comunicas con una API que mantienes. En ese caso, especifica en Info.plis de tu aplicación que se permiten cargas arbitrarias, pero también define una o más excepciones para las cuales App Transport Security está habilitada. Así es como podría verse el Info.plist.

1
<?xml version="1.0" encoding="UTF-8"?>
2
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
<plist version="1.0">
4
<dict>
5
    ...
6
	<key>NSAppTransportSecurity</key>
7
	<dict>
8
		<key>NSAllowsArbitraryLoads</key>
9
		<true/>
10
		<key>NSExceptionDomains</key>
11
		<dict>
12
			<key>api.tutsplus.com</key>
13
			<dict>
14
				<key>NSExceptionAllowsInsecureHTTPLoads</key>
15
				<false/>
16
			</dict>
17
		</dict>
18
	</dict>
19
	...
20
</dict>
21
</plist>

Tiempo

Apple ha enfatizado que las aplicaciones optan automáticamente por App Transport Security si están construidas para iOS 9 u OS X El Capitan. Esto significa que no tendrás que hacer ningún cambio en tus aplicaciones siempre que las compiles con iOS 8 u OS X Yosemite.

Sin embargo, según las versiones anteriores de iOS y OS X, hemos aprendido que Apple requiere que los desarrolladores creen sus aplicaciones para el último SDK poco después de su lanzamiento oficial. En otras palabras, aunque no tendrás que cumplir con App Transport Security cuando se lance iOS 9 y OS X El Capitan a finales de este año, es muy probable que Apple requiera que los desarrolladores compilen para el último SDK en el primero o segundo trimestre de 2016. Por lo tanto, te recomiendo que investigues cómo App Transport Security afectará tus aplicaciones lo antes posible.

Conclusión

Espero que este artículo haya dejado en claro que App Transport Security no es algo que tus aplicaciones puedan adoptar algún día. Es similar al requisito de Apple para el soporte de 64 bits no hace mucho tiempo. A menos que tus aplicaciones solo se comuniquen con servidores a través de HTTPS que cumplan con los requisitos de ATS, debes invertir algo de tiempo para investigar cómo impactará App Security Security en tus aplicaciones. La nota técnica de Apple sobre App Transport Security puede ayudarte con esto.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.