Intégration d'Ostorlab avec Jenkins
1. Générer une nouvelle clé API
La première étape consiste à générer une clé API. Pour ce faire, suivez simplement les étapes suivantes :
Accédez à report.ostorlab.co
Cliquez sur le bouton Menu

Cliquez sur Integrations/API pour développer

Cliquez sur API Keys

Cliquez sur New pour générer une nouvelle clé API

Copiez la clé API. Vous pouvez également ajouter un nom et une date d'expiration à votre clé.

N'oubliez pas de cliquer sur le bouton enregistrer pour sauvegarder votre clé.

2. Ajouter la clé API d'Ostorlab aux identifiants Jenkins
Depuis le tableau de bord principal de Jenkins, cliquez sur le bouton Add Credentials.

Dans la liste déroulante Kind, sélectionnez Secret text.

Entrez apiKey dans le champ ID.

Entrez votre clé API dans le champ Secret.

Entrez une description pour identifier la clé

Cliquez sur create pour enregistrer les identifiants.

Projet Freestyle
Pour définir un job Jenkins dans votre projet freestyle, suivez les étapes suivantes :
Dans votre Build Environment, ajoutez une liaison Secret text à la configuration de votre projet Jenkins et entrez les informations suivantes :

Ajoutez une étape de build "Run Ostorlab Security Scanner" à la configuration de votre projet Jenkins.

Et entrez les informations suivantes :
le file_path vers le fichier de l'application mobile que vous souhaitez scanner.

Cliquez sur Advanced settings pour configurer votre exécution :

Entrez le scan_title.

Sélectionnez si la platform est Android ou iOS.

Sélectionnez le scan_profile à utiliser pour le scan. Vous pouvez choisir entre Fast Scan pour une analyse statique rapide ou Full Scan pour une analyse complète statique, dynamique et backend.

wait_for_results qui suspend le job jusqu'à ce que l'analyse de sécurité soit terminée ou expire.

max_wait_minutes qui est la durée d'attente avant que le job n'expire.

break_build_on_higher_security_risk_threshold, si sélectionné, le job Jenkins échouera si le risque des vulnérabilités découvertes est égal ou supérieur aux seuils spécifiés.

security_risk_threshold, le seuil de risque minimum qui entraînera l'échec d'un build.

credentials, à utiliser pendant les tests dynamiques.
Le nom correspond à l'ID ou à l'étiquette du champ dans la vue (Par exemple username ou password).
La valeur correspond à l'entrée à taper dans le champ.

Lancez vos builds mobiles et vous verrez le risque du scan dans le dossier artifacts.

Pipeline Jenkins
De plus, vous pouvez également effectuer l'intégration dans le cas d'un Jenkins Pipeline.
Voici un exemple d'étape pour exécuter le scan :

pipeline {
agent any
environment {
apiKey = credentials('apiKey')
jsonCredentials = "${params.Credentials}"
}
parameters { string(name: 'Credentials', defaultValue: '[{"name": "username", "value": "MyUsername"}, {"name": "password", "value": "MyPassword"}]', description: '') }
stages {
stage('security-test') {
steps {
step([$class: 'OPlugin', apiKey:env.apiKey, Jsoncredentials:env.jsonCredentials, filePath: '/home/asasas/IdeaProjects/ostorlab-plugin/work/workspace/as/InsecureBankv2.apk',
scanProfile: 'Fast Scan', platform: 'android'])
}
}
}
}
La liste des paramètres pris en charge :
- filePath : (Obligatoire) Entrez le chemin de l'application mobile.
- apiKey : (Obligatoire) Entrez la clé API pour authentifier les requêtes API.
- scanProfile : Sélectionnez le profil de scan à exécuter. Vous pouvez choisir entre Fast Scan pour une analyse statique rapide ou Full Scan pour une analyse complète statique, dynamique et backend.
- platform : Définissez le type de plateforme [android, iOS].
- waitForResults : (Optionnel) Suspend le job jusqu'à ce que l'analyse de sécurité soit terminée ou expire.
- waitMinutes : (Optionnel) Durée d'attente avant que le job n'expire.
- breakBuildOnScore : (Optionnel) S'il est défini sur vrai, l'étape échouera si le risque des vulnérabilités découvertes est égal ou supérieur aux seuils.
- riskThreshold : (Optionnel) Le seuil de risque minimum qui entraînera l'échec d'un build.
- JsonCredentials : (Optionnel) Identifiants à utiliser pour les tests dynamiques. Cela doit être une chaîne au format JSON valide :
[{"name": "username", "value": "MyUsername"}, {"name": "password", "value": "MyPassword"}] - title : (Optionnel) Entrez le titre du scan.