Cómo crear una aplicación y protegerse de ciberestafas con el API de SIM Swap
¿Qué es SIM Swap?
Vamos a comenzar con una explicación de por qué esto es importante. SIM Swap es un evento de red que ayuda a detectar un tipo de ciberestafa en el que un atacante obtiene un duplicado de la tarjeta SIM de una víctima, mediante un engaño o una portabilidad entre empresas de telecomunicaciones fraudulenta, lo que le permite acceder a su línea de teléfono y recibir tanto llamadas de teléfono como mensajes SMS, lo que le da acceso a los códigos OTP de autenticación de segundo factor (2FA), o incluso realizar llamadas en nombre del usuario.
Sandbox de Telefónica Open Gateway
Antes de acceder a los datos reales, es fundamental probar la aplicación en un entorno seguro. Aquí es donde entra en juego el modo mock del Sandbox de Telefónica Open Gateway, un entorno de pruebas que simula el comportamiento real de la API sin comprometer datos de usuarios. Antes de empezar a programar, hay que dirigirse al sandbox para crear la aplicación. Aquí encontraremos las APIs disponibles con las que podemos trabajar, estando actualmente Device Location Verification, Device Status, Number Verification y SIM Swap.
Para la demo, se va a hacer uso de la API de SIM Swap. Tras seleccionar esta API y darle al botón de crear aplicación, se encuentra un formulario para rellenar información sobre esta. Desde aquí se puede seleccionar el modo de trabajo (producción o mock), indicar el nombre que se le quiere asignar a la aplicación, la URL de redirección (si es necesario) y una pequeña descripción.
El siguiente paso es para aceptar los términos y condiciones de uso.
En el último paso se muestra un resumen con toda la información anterior y el botón para confirmar y terminar con creación de la aplicación.
Ahora, en el apartado de “Mis aplicaciones”, se puede ver la nueva aplicación creada, aunque podría estar pendiente de validación.
Ejemplo de aplicación SIM Swap en Python
Para comenzar a crear la aplicación en Python se tienen dos opciones:
- Revisar la API e implementar todas las llamadas para conseguir la autorización y las llamadas a la API de SIM Swap usando alguna librería como puede ser requests.
- Hacer uso del SDK que está preparado para trabajar con el sandbox.
pip install opengateway-sandbox-sdk
Ahora, se crea un nuevo script de Python y vamos a definir una función que, dado un número de teléfono, cree una instancia de Simswap con los datos de nuestra aplicación (Client ID y Client Secret que se encuentran en la información de nuestra aplicación creada en el sandbox), así como el número de teléfono (en formato E.164) que se desea consultar.
Este sería el código más básico para poder hacer uso de SIM Swap a través del SDK. Vamos a ampliar un poco el código para poner validación del número de teléfono y que se pueda pasar un número de teléfono o un fichero con un listado de número a través de parámetros al iniciar el script. Creamos una nueva función que, pasado un número de teléfono, compruebe a través de una expresión regular que cumple con el formato E.164. ->
La expresión regular que aparece en re.compile(r"^\+[1-9]\d{9,14}$") está diseñada para validar números de teléfono en formato internacional. Veamos en que consiste cada parte:
- <->^: Marca el inicio de la cadena, asegurando que no haya caracteres antes del número.->
- <->\+: Busca el símbolo "+" al principio del número, que es obligatorio en los formatos internacionales.->
- <->[1-9]: Busca un dígito entre 1 y 9, lo que impide que el código de país comience con 0 (en números internacionales, los códigos de país nunca empiezan por cero).->
- <->\d{9,14}: Busca entre 9 y 14 dígitos después del código de país, representando el número de teléfono.->
- <->\d significa cualquier dígito (0-9).->
- <->{9,14} especifica que debe haber un mínimo de 9 dígitos y un máximo de 14 después del código de país.->
- <->$: Marca el final de la cadena, asegurando que no haya caracteres adicionales después del número.->
- <->Empieza con un símbolo +.->
- <->Tiene un código de país que comienza con un dígito entre 1 y 9.->
- <->El número de teléfono contiene entre 9 y 14 dígitos después del código de país.->
Figura 11: Libros de Python para Pentesters y Hacking con Python de Daniel Echeverri publicados en 0xWord. |
->
La función emplea un grupo de argumentos mutuamente excluyentes, lo que significa que el usuario debe elegir entre una de estas dos opciones, pero no ambas al mismo tiempo. Esto simplifica el manejo de los datos y asegura que la herramienta sea flexible pero a la vez fácil de usar. ->
Cuando se pasa un número de teléfono, este se valida usando la función phone_validator(), y, si todo va bien, se procesa con la función sim_swap(). Si se utiliza un archivo, la función intenta leer los números de teléfono línea por línea, y si encuentra algún error (como que el archivo no exista o no se pueda leer), gestiona las excepciones e informa al usuario. Esta estructura permite que la herramienta sea robusta y manejable, garantizando una buena experiencia de usuario con el manejo de errores y validaciones necesarias para evitar problemas.
Para finalizar se debería realizar la llamada a la función main(), algo que se puede integrar dentro del condicional if __name__ == “__main__": típico de Python. Sólo una cosa más, ¿recuerdas que en la llamada a SIM Swap había que indicar el Client ID y Client Secret? En el código mostrado anteriormente, estos valores aparecían en la función sim_swap() en las constantes CLIENT_ID y CLIENT_SECRET. ->
->
Las APIs de Telefónica Open Gateway son una puerta abierta para que los desarrolladores puedan explorar nuevas formas de enriquecer sus aplicaciones con capacidades avanzadas, como el ejemplo visto con la detección de SIM Swap. El acceso a estos servicios no solo refuerza la seguridad de las aplicaciones, sino que también te permite crear experiencias más confiables para los usuarios.
->