Si eres lector de este blog, seguramente ya habrás leído en más de una ocasión sobre Open Gateway y las enormes posibilidades que ofrece a los desarrolladores. Hoy quiero mostrar cómo crear una aplicación sencilla en Python para comprobar el estado de SIM Swap utilizando las APIs de Open Gateway y aprovechando el Sandbox de Telefónica para hacer pruebas sin riesgo. Figura 1: 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.
Esto facilita el acceso no autorizado a cuentas bancarias, redes sociales u otros servicios sensibles que utilizan el SMS o la llamada como validación de 2FA, además de poder suplantar a la víctima en llamadas de teléfono fraudulentas.
Con la
API de SIM Swap de Open Gateway, podemos verificar si el número de teléfono de un usuario ha sido asociado recientemente a una nueva tarjeta
SIM, lo que permite prevenir fraudes de manera más efectiva.
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.
Figura 5: Formulario de creación de aplicación
El siguiente paso es para aceptar los términos y condiciones de uso.
Figura 6: Confirmación de los términos y condiciones
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.
Figura 7: Resumen de la aplicación y confirmación
Ahora, en el apartado de “
Mis aplicaciones”, se puede ver la nueva aplicación creada, aunque podría estar pendiente de validación.
Figura 8: Información de la aplicación creada
Desde aquí se puede conocer el identificador de la aplicación, así como el secreto que será necesario para autenticarse al realizar llamadas a la API.
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.
Esta última opción es el que se opta por utilizar en este ejemplo para agilizar la creación de la aplicación. Su instalación se puede hacer con
pip, indicando el paquete
opengateway-sandbox-sdk:
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.
Se ejecuta la función
retrieve_date() para obtener la fecha del último cambio de emparejamiento
MSISDN <->
IMSI, o lo que es lo mismo, la última vez que el número de teléfono (
MSISDN) fue vinculado a una nueva tarjeta
SIM (IMSI).
Figura 9: Función para obtener última fecha de cambio de SIM
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. ->
<->
Figura 10: Función para validar que un
número está en formato internacional
->
<->
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.->
En resumen, esta expresión regular valida un número de teléfono internacional que:
- <->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.->
Algunos ejemplo válidos para esto serían: “
+34600123456” (
España) o “
+14155552671” (
EE. UU.). Y un par de ejemplos de números no válidos podrían ser: “
+0123456789” (el código de país no puede empezar con
0) o “
34600123456” (falta el símbolo
+).
->
<->Por último, realizamos la creación de una función principal. La función
main() se encarga de gestionar los argumentos de la línea de comandos para que el usuario pueda verificar el estado de
SIM Swap de uno o varios números de teléfono. Utiliza la librería argparse, que facilita la creación de interfaces de línea de comandos en
Python. A través de esta función, el usuario puede proporcionar un número de teléfono individual utilizando la opción
-p/--phone, o bien un archivo que contenga varios números de teléfono, uno por línea, con la opción
-f/--file.
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. ->
Figura 12: Función principal del programa
<->
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. ->
<->
<->
Figura 13: Recuperando las credenciales desde el entorno
->
->
<->
->
<->Como se trata de valores que contienen información sensible, como buena práctica de programación, se recomienda leerlos del entorno. Para ello se puede hacer uso de la librería python-dotenv y almacenar las credenciales en un archivo .env que contiene las variables del entorno. ->
<->
A continuación comparto un vídeo de ejemplo del uso de la
API de
SIM Swap donde puede apreciarse el código tanto haciendo uso directo de la
API, como del
SDK.
Figura 14: SIM Swap API vs SDK
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.
Con el
sandbox, tienes a tu disposición un entorno seguro para experimentar, probar e integrar estas funcionalidades en tiempo récord, sin necesidad de comprometer datos reales. ->Si buscas llevar tus proyectos al siguiente nivel, esta es tu oportunidad, y puedes comenzar hoy mismo a experimentar con las
APIs de Telefónica Open Gateway, explorar todo su potencial y transformar tus ideas en soluciones reales que impacten de forma positiva a miles de usuarios.
<->
->
<->Developer Hub->
<->
Para que empecéis a experimentar, es necesario que os unáis al
Developer Hub de Telefónica Open Gateway. La inscripción a este programa no tiene ningún coste, por lo que podréis disfrutar del
Sandbox de forma gratuita. En la sección
Technical Toolbox del área privada, una vez que os hayáis registrado y logado, encontraréis el acceso y, una vez dentro, lo primero que veréis es nuestro catálogo completo de
APIs disponibles en el entorno de pruebas.
Seleccionad aquella con la que queráis trabajar, añadid la información general de vuestra aplicación y elegid el modo que deseéis, ya sea de producción o mock, para empezar con vuestros desarrollos. Probad vuestros desarrollos con estas
APIs para llevarlos al siguiente nivel de seguridad antifraude con
OpenGateway.
Y si quieres mantenerte informado con novedades en la iniciativa como más webinars sobre nuestras soluciones, lanzamientos comerciales o nuevas
APIs disponibles, suscríbete a nuestra
newsletter de Open Gateway.
Saludos y->
Happy Coding!