
Static Token And Credential Scanner
Scanner statique de jetons et d'identifiants
STACS est un scanner statique d'identifiants propulsé par YARA qui prend en charge les formats de fichiers binaires, l'analyse d'archives imbriquées, des ensembles de règles et listes d'ignorance composables, ainsi que le rapport SARIF.
Actuellement, STACS prend en charge le dépaquetage récursif de :
Comme STACS fonctionne sur les types de fichiers détectés, les formats de fichiers propriétaires et autres types utilisant ces formats sont automatiquement pris en charge. Cela inclut les images Docker, les APK Android, les fichiers JAR Java, les RPM, les paquets Debian (.deb), les paquets macOS (.pkg), et plus encore !
STACS est conçu pour être utilisé par toute équipe publiant des artefacts binaires. STACS offre aux développeurs la possibilité de vérifier automatiquement l'inclusion accidentelle d'identifiants statiques et de matériel de clé dans leurs versions.
Cependant, cela ne signifie pas que STACS ne peut pas aider avec les applications SaaS, les logiciels d'entreprise, ou même le code source !
Par exemple, STACS peut être utilisé pour trouver des identifiants statiques dans les images Docker téléchargées sur des registres de conteneurs publics et privés. Il peut également être utilisé pour trouver des identifiants compilés accidentellement dans des exécutables, des paquets pour appareils mobiles, et des « archives d'entreprise » - comme celles utilisées par les serveurs d'applications Java.
STACS détecte les identifiants statiques à l'aide de « packs de règles » fournis à STACS lors de son exécution. Ces packs de règles définissent un ensemble de règles YARA à exécuter sur les fichiers fournis à STACS. Lorsqu'une correspondance avec une règle est trouvée, un « constat » (finding) est généré. Ces constats représentent des identifiants potentiels à l'intérieur d'un fichier, et sont signalés pour qu'un développeur les corrige ou les « ignore ».
Si le constat s'avère être un faux positif - c'est-à-dire une correspondance sur autre chose qu'un véritable identifiant - le développeur peut générer un ensemble de « listes d'ignorance » pour garantir que ces correspondances n'apparaissent pas dans les rapports futurs.
La véritable puissance de STACS provient de la détection automatique et du dépaquetage des archives imbriquées, ainsi que des listes d'ignorance et des packs de règles composables.
Afin de permettre une utilisation flexible et collaborative, STACS prend en charge les listes d'ignorance composables. Cela permet à une liste d'ignorance d'inclure d'autres listes d'ignorance, ce qui permet la composition d'un « arbre d'ignorances » basé sur les directives organisationnelles. Ces listes d'ignorance sont particulièrement utiles dans les organisations où de nombreux frameworks ou produits identiques sont utilisés. Si une équipe a déjà marqué un constat comme faux positif, les autres équipes bénéficient du fait de ne pas avoir à trier le même constat.
De la même manière que les listes d'ignorance, les packs de règles sont également composables. Cela permet à une organisation de définir un ensemble de règles de base pour toutes les équipes, tout en permettant aux équipes de maintenir des ensembles de règles spécifiques à leurs produits.
La manière la plus simple d'utiliser STACS est d'utiliser les images Docker publiées sur Docker Hub. Cependant, STACS peut également être installé directement depuis PyPI de Python, ou en clonant ce dépôt. Voir les sections pertinentes ci-dessous pour commencer !
Un service basé sur le cloud arrive bientôt, permettant une intégration directe dans les pipelines de construction et de publication pour permettre la détection des identifiants statiques avant la publication !
En utilisant les images publiées, STACS peut être utilisé pour analyser des artefacts immédiatement ! Les images Docker STACS fournissent un certain nombre de montages de volumes pour que les fichiers à analyser soient montés directement dans le conteneur d'analyse.
Par exemple, pour analyser tout ce qui se trouve dans le dossier courant, la commande suivante peut être exécutée (Docker doit être installé).
docker run \
--rm \
-v "$(pwd):/mnt/stacs/input:ro" \
stacscan/stacs:latest
Si vous souhaitez recevoir une sortie « jolie » lisible, la commande suivante doit être utilisée :
docker run \
--rm \
-e STACS_OUTPUT_PRETTY=1 \
-v "$(pwd):/mnt/stacs/input:ro" \
stacscan/stacs:latest
Par défaut, STACS produira tous les constats au format SARIF directement sur STDOUT et pour rester ordonné, tous les messages de journal seront envoyés sur STDERR. Pour des cas d'utilisation plus avancés, un certain nombre d'autres montages de volumes sont fournis. Ceux-ci permettent à l'utilisateur de contrôler les packs de règles, les listes d'ignorance et les répertoires de cache à utiliser.
STACS peut également être installé directement depuis PyPi de Python. Cela fournit une commande stacs qui peut ensuite être utilisée par les développeurs pour analyser des projets directement dans leurs environnements de développement locaux.
STACS peut être installé directement depuis PyPi en utilisant :
pip install stacs
Veuillez noter : La version PyPi de STACS n'est fournie avec aucune règle. Celles-ci devront également être clonées depuis le dépôt de règles communautaires pour que STACS fonctionne !
Pas encore. Cependant, il est prévu une version hébergée de STACS qui peut être facilement intégrée dans les systèmes de construction existants, et qui contient des packs de règles et listes d'ignorance pré-construits supplémentaires.
Malheureusement, les faux positifs sont un effet secondaire inévitable lors de la détection d'identifiants statiques. Si les règles sont trop granulaires, la maintenance des règles devient une charge et STACS peut manquer des identifiants. Si les règles sont trop larges, STACS peut générer trop de faux positifs !
Pour aider, STACS fournit un certain nombre d'outils pour réduire le nombre de faux positifs qui se retrouvent dans les rapports finaux.
Principalement, STACS fournit un mécanisme qui permet aux utilisateurs de définir des listes d'ignorance composables qui permettent d'« ignorer » un ensemble de constats. Ces règles peuvent être aussi larges que ignorer tous les fichiers basés sur un motif, ou aussi granulaires qu'un constat spécifique sur une ligne particulière d'un fichier.
Cette information est automatiquement propagée dans les rapports, de sorte que les constats « ignorés » seront marqués comme « supprimés » dans la sortie SARIF tout en incluant la raison de l'ignorance dans la sortie pour suivi.
Si vous utilisez la sortie « jolie » (--pretty / STACS_OUTPUT_PRETTY), les résultats seront imprimés dans un format lisible par l'homme sur la console.

Si vous utilisez SARIF, il existe un certain nombre de visualiseurs qui rendent ces données plus faciles à lire, comme ce super visualiseur web de Microsoft. Un exemple des constats d'une image de conteneur Docker a été inclus ci-dessous :

Malheureusement, cela semble être dû à une limitation de Docker Desktop pour Mac. Les E/S pour les montages de liaison sont vraiment, vraiment lentes.