2011-12-08 8 views
8

Queremos utilizar un servicio web en nuestra aplicación que obviamente requiere llamar a una URL. No es HTTPS, simplemente HTTP antiguo, usando NSURLConnection.¿Qué tan seguro es llamar URLs "secretas" en una aplicación de iOS?

El problema es que este servicio web es MUY caro y cada mil llamadas nos cuesta dinero real. El temor es que alguien pueda descubrir qué URL llamamos y luego hacer un mal uso de ella, dejando que los costos exploten. No hay forma de que podamos rastrear si una llamada a ese servicio web fue legítima.

Estamos calculando en función de la cantidad de aplicaciones que vendemos, multiplicadas por la suposición de la frecuencia con que se utilizará esa aplicación por usuario en promedio. Tenemos algunas buenas estadísticas en las que basamos nuestras suposiciones.

¿Existen formas conocidas de averiguar qué URL está llamando una aplicación en Internet para recuperar información?

+0

Lo que estás haciendo es fundamentalmente inseguro. No podrá ocultar esta información de un atacante. Esto es solo "(en) la seguridad a través de la oscuridad". – rook

Respuesta

2

Sí, hay muchas maneras de hacerlo. Por ejemplo, conecte el iPhone a una red wifi, en la cual el enrutador tiene un proxy transparente. Examine los registros del proxy. Verás todas las URL. Depende de qué tan determinados estén sus usuarios, pero esto es bastante fácil.

4

Si el servicio web no está encriptado, sería trivial usar un proxy para interceptar las solicitudes web realizadas por el teléfono. Si el costoso servicio web no ofrece al menos alguna forma de autenticación básica, seriamente reconsideraría incluir su URL en una aplicación pública.

+0

¿Puedes explicar a qué te refieres con "trivial" y "proxy"? ¿Es eso un enrutador WiFi dando un protocolo de lo que sucede? El servicio web está "protegido" por una identificación de usuario en la solicitud de URL. De esa forma determinan su "cliente". Por supuesto, cualquiera puede copiar esa url y simplemente llamarlo exactamente así en nuestro nombre. – dontWatchMyProfile

+0

Claro. No hay necesidad de ir por ahí con un enrutador. Cada vez que estoy depurando una aplicación de red en la que estoy trabajando, enciendo mi proxy de software de confianza [http://charlesproxy.com] Charles y establezco la configuración de WiFi de mi iPhone para usar la dirección de mi computadora de escritorio como proxy. Con esto, puedo controlar todas las solicitudes http enviadas y recibidas por mi teléfono. Yo recomendaría usar ese software para probarlo usted mismo, podrá ver lo que cualquier otra persona también puede obtener de sus solicitudes de red. –

12

Puede usar fácilmente un sniffer de red mientras el teléfono está en WiFi para descubrir esta información. Parece que es realmente crítico que use SSL con algún tipo de token seguro en la URL.

Si esta no es una opción, ¿quizás puede proporcionar su propio servicio proxy que usaría SSL y tokens de seguridad? Proxy también otorga la capacidad de restringir las solicitudes y bloquear a los usuarios que se sabe que son maliciosos. La limitación pone un límite superior en el gasto en el que cada usuario puede incurrir dentro de un intervalo de tiempo dado. Otro beneficio de un proxy es que permite recopilar estadísticas y medir los costos incurridos por diferentes usuarios facilitando la detección de usuarios maliciosos y la planificación comercial. Proxy también podría ahorrarle algo de dinero si el servicio detrás de él no tiene estado agregando un caché que elimine una gran cantidad de llamadas costosas.

+0

+1 Tenga en cuenta que aún se puede olfatear SSL con un proxy como Charles si su programa confía ciegamente en el certificado. Debe verificar que el certificado esté firmado por * usted *, no solo por "algún firmante de confianza". Además, todavía es posible realizar ingeniería inversa en el programa para determinar la carga útil, pero un proxy SSL verificado elevará significativamente la barra en iOS, dejando principalmente atacantes altamente motivados en lugar de atacantes casuales. –

+1

Tienes razón sobre estos puntos. Una forma de aumentar aún más la seguridad del sistema es usar SSL y un token de seguridad y hacer que el token se derive de un factor externo a la aplicación, como una contraseña conocida solo por el usuario autorizado (se debe considerar la seguridad adecuada para el equilibrio de usabilidad). . Tenga en cuenta que la función utilizada para derivar tokens debe ser unidireccional. Proxy otorga seguridad adicional al permitirle acelerar o bloquear las solicitudes, lo que establece un límite superior en el gasto que puede incurrir un usuario malintencionado en el propietario del sistema dentro de un intervalo de tiempo determinado. –

+1

Me tomó un momento para entender su punto aquí, pero acepté. Si puede vincular el token "por favor déjeme hablar con usted" a una información específica del usuario (como una cuenta), entonces puede limitar fuertemente el abuso. Si no puede, entonces puede limitar débilmente el abuso mediante la regulación basada en IP. –

1

Ignorando el hecho de que las personas que hacen jailbreak en sus dispositivos podrían ver su aplicación, creo que es posible examinar el tráfico como cualquier otro dispositivo (computadora portátil, tableta, etc.) si alguien estaba olfateando el tráfico en un punto de acceso WiFi aplicaciones tales como WireShark. Sin embargo, dudo que haya mucho riesgo de esto a través de una red 3G celular.

1

Buena pregunta.

Como muchos han dicho, sí, es fácil descubrir las URL que su aplicación solicita.

Nota sobre HTTPS: Pero dado que está utilizando HTTPS está bien, porque a través de HTTPS, el dominio se oscureció a la dirección IP, y la gente no puede ver los parámetros de cadena de consulta URL. Por ejemplo, si su URL era https://somewebsite.com?uid=mylogin&pass=mypass, definitivamente no podrán ver "uid = mylogin & pass = mypass", y probablemente solo puedan ver la dirección IP, no el nombre de dominio en sí.(Ver https://serverfault.com/questions/186445/can-an-attacker-sniff-data-in-a-url-over-https)

Nota al margen: podría ser seguro asumir que Apple lleva a cabo algún tipo de solicitud de diagnóstico HTTP en el examen de su aplicación - lo cual tendría sentido, ya que es en su mejor interés para tratar de averiguar lo tu aplicación lo hace desde muchos ángulos.

3

Usar URL simples es una forma segura de dejar que los script kiddies te queden sin trabajo. Si no hay forma de que pueda rastrear si una llamada al costoso servicio web fue legítima, configure su propio servicio web que haga frente al servicio web real para asegurarse de que su propio servicio web pueda verificar la legitimidad de la llamada antes de reenviar el solicitud al servicio web real.

Cuestiones relacionadas