Integración de Ostorlab con Bitbucket
Descripción general
En esta guía, exploraremos cómo integrar fácilmente pruebas de seguridad y privacidad en las builds del pipeline de sus aplicaciones móviles usando Bitbucket Pipeline.
Demostración en video
Mire este breve video para ver un recorrido visual del proceso de integración.
Generar una Clave API:
El primer paso es generar una nueva clave API. En el panel de su organización, haga clic en el botón del menú.

A continuación, haga clic en "Integrations/API" para expandir.

Y elija API keys.

Desde aquí, haga clic en "New" (Nuevo).

Copie la clave API. También puede agregar un nombre y una fecha de caducidad a su clave.

No olvide hacer clic en el botón de guardar (save) para guardar su clave.

Agregar la Clave API a las Variables de Bitbucket:
Una vez que haya generado su clave API, agréguela a sus variables de Bitbucket.

Actualizar su Pipeline:
Ahora, debe actualizar su pipeline de Bitbucket para incluir un paso de Ostorlab para desencadenar el escaneo de seguridad. Esta es una configuración de muestra que realiza un escaneo rápido (fast scan) en un APK de Android y hace que falle el pipeline para las vulnerabilidades con una calificación de severidad alta (HIGH).

- step:
name: Ostorlab Security Scan
caches:
- pip
script:
- pip install ostorlab[cli]
- export OSTORLAB_API_KEY=$SECRET_OSTORLAB_API_KEY
- export SCAN_TITLE="Test Bitbucket CI workflow"
- export SCAN_PROFILE='fast_scan'
- export BREAK_ON_RISK_RATING="HIGH"
- export MAX_WAIT_MINUTES=15
- export TARGET="oxo_insecure.apk"
- export ASSET_TYPE="android-apk"
- export EXTRA="--test-credentials-login test_login --test-credentials-password test_pass"
- ostorlab --api-key="$OSTORLAB_API_KEY" ci-scan run --title="$SCAN_TITLE" --scan-profile="$SCAN_PROFILE" --break-on-risk-rating="$BREAK_ON_RISK_RATING" --max-wait-minutes="$MAX_WAIT_MINUTES" $EXTRA $ASSET_TYPE
Exploremos cada línea en esta configuración:
Primero, necesitaremos instalar el paquete ostorlab y sus componentes de interfaz de línea de comandos usando pip.

A continuación, cree una variable para almacenar la clave API. Asegúrese de que el nombre de la variable coincida con el que se agregó a su repositorio como un secreto o variable de entorno.

Agregue una variable de título (title) para su escaneo.

Agregue otra variable para el perfil de escaneo (scan profile). Elija entre Fast Scan para un análisis estático rápido o Full Scan para un análisis integral, incluyendo estático, dinámico y backend.

Luego, una variable para definir el tiempo máximo que el build debería esperar (en minutos) para terminar el análisis de seguridad.

Agregue una variable de destino (target) para especificar la ruta a su aplicación.

Defina el tipo de activo (asset type) ya sea Android o iOS. En mi caso, elijo Android ya que tengo la intención de escanear una aplicación de Android.

El parámetro adicional (extra) le permite proporcionar sus archivos Lock para un análisis de escaneo mejorado.

La siguiente lista describe los archivos SBOM/Lock compatibles:
SPDX
CycloneDX
gradle.lockfile
pubspec.lock
buildscript-gradle.lockfile
pnpm-lock.yaml
package-lock.json
packages.lock.json
pom.xml
Gemfile.lock
yarn.lock
Cargo.lock
composer.lock
conan.lock
mix.lock
go.mod
requirements.txt
Pipfile.lock
poetry.lock
Además, le permite suministrar credenciales simples o credenciales personalizadas para habilitar pruebas autenticadas.
Para compatibilidad con 2FA, puede agregar las siguientes credenciales:
- SMS 2FA: --sms-2fa-sender <sender_name> (Conozca más sobre SMS 2FA)
- Email 2FA: --email-2fa-sender-email-address <sender_email> --email-2fa-email-address <email_address> --email-2fa-password <email_password> (Conozca más sobre Email 2FA)
- TOTP 2FA: --totp-2fa-seed <seed> (Conozca más sobre TOTP 2FA)

También puede proporcionar prompts de la interfaz de usuario (UI prompts) para guiar al escáner a través de la UI de su aplicación. Los prompts de UI son una característica poderosa que le permite utilizar el lenguaje natural para indicarle al escáner cómo navegar por la aplicación. Por ejemplo, puede especificar prompts como "haga clic en el botón de inicio de sesión" o "ingrese el nombre de usuario y la contraseña".
--ui-prompt-name accept-terms --ui-prompt-action "Scroll down and tap the 'Accept Terms' checkbox."
--ui-prompt-name submit --ui-prompt-action "Tap the 'Submit' button to complete the login process."
Puede agregar múltiples banderas --ui-prompt-name y --ui-prompt-action para los diferentes pasos en el flujo de su aplicación.
Adicionalmente, puede usar la bandera --ui-prompt-id para referenciar flujos de prompts de UI existentes por sus IDs. Esto le permite reutilizar flujos de prompts de UI previamente definidos. Puede agregar múltiples banderas --ui-prompt-id según lo necesite. Por ejemplo:
--ui-prompt-id 123 --ui-prompt-id 456
Finalmente, ejecute el comando de Ostorlab de la siguiente manera:

Después de actualizar el pipeline, verifique el progreso aquí.

Revise los registros (logs) del pipeline para obtener detalles, recupere el ID del escaneo y monitoree su escaneo dentro de la cuenta de su organización en Ostorlab.

Por ejemplo, este es el reporte para el escaneo actual.

Conclusión
Esta guía cubre los pasos requeridos para integrar efectiva y fácilmente las pruebas de seguridad autónomas de Ostorlab para aplicaciones móviles Android e iOS en su Bitbucket Pipeline.