Sobelow est un outil d'analyse statique axé sur la sécurité pour Elixir et le cadre Phoenix. Pour les chercheurs en sécurité, c'est un outil utile pour avoir une vue rapide des points d'intérêt. Pour les agents de projet, il peut être utilisé pour empêcher l'introduction d'un certain nombre de vulnérabilités communes.
Actuellement, Sobelow détecte certains types des problèmes de sécurité suivants:
Les vulnérabilités potentielles sont signalées dans différentes couleurs en fonction de la confiance dans leur insécurité. La confiance élevée est rouge, la confiance moyenne est jaune et une faible confiance est verte.
Une découverte est généralement marquée à la "faible confiance" si elle semble qu'une fonction pourrait être utilisée de manière insérentielle, mais elle ne peut pas être déterminée de manière fiable si la fonction accepte l'entrée fournie par l'utilisateur. c'est-à-dire que si une constatation est marquée verte, elle peut être sans sécurité de manière critique, mais qu'elle nécessitera une plus grande validation manuelle.
Remarque: Ce projet est en développement constant et des vulnérabilités supplémentaires seront signalées au fil du temps. Si vous rencontrez un bogue ou si vous souhaitez demander des fonctionnalités ou des vérifications de sécurité supplémentaires, veuillez ouvrir un problème!
Pour utiliser Sobelow, vous pouvez l'ajouter aux dépendances de votre application.
def deps do
[
{ :sobelow , "~> 0.13" , only: [ :dev , :test ] , runtime: false }
]
endVous pouvez également installer Sobelow globalement en exécutant ce qui suit à partir de la ligne de commande:
$ mix escript.install hex sobelow
Pour installer à partir de la branche maître, plutôt que la dernière version, la commande suivante peut être utilisée:
$ mix escript.install github nccgroup/sobelow
Après l'installation, le moyen le plus simple de scanner un projet Phoenix est d'exécuter ce qui suit à partir de la racine du projet:
$ mix sobelow
Remarque: tous les arguments de chemin doivent être des chemins absolus ou par rapport à la racine de l'application.
--root ou -r - Spécifiez le répertoire racine de l'application. Accepte un argument de chemin, par exemple ../my_project .
--verbose ou -v - Extraits de code d'impression et détails de recherche supplémentaires.
--ignore ou -i - ignorer compte tenu des types de recherche. Accepte une liste de noms de modules séparés par des virgules, par exemple XSS.Raw,Traversal .
--ignore-files - Ignorez les fichiers. Accepte une liste de noms de fichiers séparés par des virgules, par exemple config/prod.exs .
--details ou -d - Obtenez des détails de type de recherche. Accepte un seul nom de module, par exemple Config.CSRF .
--all-details - Obtenez des détails de tous les types de recherche.
--private - sauter les vérifications de mise à jour.
--router - Spécifiez l'emplacement du routeur. Cela ne doit être utilisé que si l'emplacement du routeur n'est pas standard. Accepte un argument de chemin, par exemple my/strange/router.ex .
--exit - Renvoie le statut de sortie non nul à un seuil de confiance ou au-dessus d'un seuil de confiance de low , medium ou high . Par défaut est false qui renvoie un statut de sortie zéro
--threshold - Retour des résultats à ou au-dessus d'un niveau de confiance de low (par défaut), medium ou high .
--format ou -f - Spécifiez le format de sortie des résultats. Accepte un format, par exemple txt ou json .
Notez que des options telles que --verbose ne fonctionneront pas avec le format json . Tous les résultats formatés json contiennent un type , file et une clé line . D'autres clés peuvent varier.
--quiet - Renvoyez une seule ligne indiquant le nombre de résultats. Sinon, renvoyez aucune sortie s'il n'y a pas de conclusions.
--compact - Résultats minimaux, une seule ligne avec sortie colorisés en fonction de la confiance.
--flycheck - Résultats minimaux en ligne unique qui sont compatibles avec l'outillage basé sur le vol.
--save-config - Génère un fichier de configuration basé sur les options de ligne de commande. Voir les fichiers de configuration pour plus d'informations.
--config - Exécutez Sobelow avec le fichier de configuration. Voir les fichiers de configuration pour plus d'informations.
--mark-skip-all - Marquez toutes les résultats affichés comme skippables.
--clear-skip - Configuration effaçante créée par --mark-skip-all .
--skip - Ignorez les résultats qui ont été marqués pour le saut. Voir les faux positifs pour plus d'informations.
--version - Sortie la version actuelle de Sobelow. Ceci est utile pour les étapes CI ou l'intégration avec d'autres outils comme Salus.
Sobelow permet aux utilisateurs d'enregistrer des options fréquemment utilisées dans un fichier de configuration. Par exemple, si vous vous trouvez constamment en cours d'exécution:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low
Vous pouvez utiliser l'indicateur --save-config pour créer votre fichier de configuration .sobelow-conf :
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low --save-config
Cette commande créera le fichier .sobelow-conf à la racine de votre application. Vous pouvez modifier ce fichier directement pour apporter des modifications.
Vous pouvez également exécuter la commande sans aucune option:
$ mix sobelow --save-config
Lorsque vous commencez à utiliser ce package - le fichier de configuration généré sera rempli avec les valeurs par défaut pour chaque option. (Cela aide à incorporer rapidement ce package dans une base de code préexistante.)
Maintenant, si vous souhaitez exécuter Sobelow avec la configuration enregistrée, vous pouvez exécuter Sobelow avec l'indicateur --config .
$ mix sobelow --config
Sobelow favorise la sur-déclaration par rapport à la sous-déclaration. En tant que tel, vous pouvez trouver un certain nombre de faux positifs dans un scan typique. Ces résultats peuvent être ignorés individuellement en ajoutant un commentaire # sobelow_skip , ainsi qu'une liste de modules, avant la définition de la fonction.
# sobelow_skip ["Traversal"]
def vuln_func ( ... ) do
...
end Lors de l'intégration de Sobelow dans un nouveau projet, il peut y avoir un grand nombre de faux positifs. Pour marquer toutes les découvertes imprimées en tant que faux positifs, exécutez Sobelow avec le drapeau --mark-skip-all .
Une fois que vous avez marqué les résultats appropriés, exécutez Sobelow avec l'indicateur --skip .
$ mix sobelow --skip
Bien que les commentaires # sobelow_skip ne puissent que marquer les résultats au niveau de la fonction (et ne peuvent donc pas être utilisés pour sauter les problèmes de configuration), l'indicateur --mark-skip-all peut être utilisé pour sauter n'importe quel type de recherche.
Les catégories des résultats sont divisées en modules. Ces modules peuvent ensuite être utilisés pour ignorer les classes de résultats (via les options ignore et skip ) ou pour obtenir des détails de vulnérabilité (via l'option details ).
Cette liste, et d'autres informations utiles, se trouvent sur la ligne de commande:
$ mix help sobelow
Afin d'exécuter Sobelow contre toutes les applications enfants dans une application Umbrella avec une seule commande, vous pouvez ajouter un alias pour Sobelow dans votre fichier root mix.exs :
defp aliases do
[
sobelow: [ "cmd mix sobelow" ]
]
end Si vous souhaitez utiliser des fichiers de configuration dans une application Umbrella, créez un .sobelow-conf dans chaque application enfant et utilisez l'indicateur --config .
Lors de la numérisation d'un projet, Sobelow vérifiera occasionnellement les mises à jour et imprimera une alerte si une nouvelle version est disponible. Sobelow garde une trace de la dernière vérification de mise à jour en créant un fichier .sobelow à la racine du projet numérisé.
Si cette fonctionnalité n'est pas souhaitée, l'indicateur --private peut être utilisé avec le scan.