
Analyse statique axée sur la sécurité pour le framework Phoenix
Sobelow est un outil d'analyse statique axé sur la sécurité pour Elixir et le framework Phoenix. Pour les chercheurs en sécurité, c'est un outil utile pour obtenir un aperçu rapide des points d'intérêt. Pour les mainteneurs de projets, il peut être utilisé pour prévenir l'introduction d'un certain nombre de vulnérabilités courantes.
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 selon le niveau de confiance dans leur dangerosité. Un niveau de confiance élevé est rouge, un niveau de confiance moyen est jaune, et un niveau de confiance faible est vert.
Un résultat est généralement marqué « confiance faible » s'il semble qu'une fonction pourrait être utilisée de manière non sécurisée, mais qu'il n'est pas possible de déterminer de manière fiable si la fonction accepte une entrée fournie par l'utilisateur. c'est-à-dire Si un résultat est marqué en vert, il peut être critique et non sécurisé, mais nécessitera une validation manuelle plus poussée.
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 souhaitez demander des fonctionnalités supplémentaires ou des vérifications de sécurité, veuillez ouvrir une issue !
Pour utiliser Sobelow, vous pouvez l'ajouter aux dépendances de votre application.
def deps do
[
{:sobelow, "~> 0.13", only: [:dev, :test], runtime: false}
]
end
Vous pouvez également installer Sobelow globalement en exécutant la commande suivante depuis la ligne de commande :
$ mix escript.install hex sobelow
Pour installer depuis la branche master, plutôt que la dernière version publiée, la commande suivante peut être utilisée :
$ mix escript.install github nccgroup/sobelow
Après installation, la façon la plus simple de scanner un projet Phoenix est d'exécuter la commande suivante depuis la racine du projet :
$ mix sobelow
Remarque : Les arguments de chemin doivent être des chemins absolus, ou relatifs à la racine de l'application.
--root ou -r - Spécifie le répertoire racine de l'application.
Accepte un argument de chemin, par exemple ../my_project.
--verbose ou -v - Affiche des extraits de code et des détails supplémentaires sur les résultats.
--ignore ou -i - Ignore certains types de résultats. Accepte une liste de noms de modules séparés par des virgules, par exemple XSS.Raw,Traversal.
--ignore-files - Ignore des fichiers. Accepte une liste de noms de fichiers séparés par des virgules, par exemple config/prod.exs.
--details ou -d - Obtient les détails d'un type de résultat. Accepte un seul nom de module, par exemple Config.CSRF.
Sobelow permet aux utilisateurs de sauvegarder les options fréquemment utilisées dans un fichier de configuration. Par exemple, si vous vous retrouvez constamment à exécuter :
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low
Vous pouvez utiliser le drapeau --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 de 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 sauvegardée, vous pouvez exécuter Sobelow avec le drapeau --config.
$ mix sobelow --config
Sobelow privilégie le sur-signalement par rapport au sous-signalement. Ainsi, vous pouvez trouver un certain nombre de faux positifs lors d'un scan typique. Ces résultats peuvent être ignorés individuellement en ajoutant un commentaire # sobelow_skip, accompagné d'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 tous les résultats imprimés comme faux positifs, exécutez sobelow avec le drapeau --mark-skip-all.
Une fois que vous avez balisé les résultats appropriés, exécutez Sobelow avec le drapeau --skip.
$ mix sobelow --skip
Alors que les commentaires # sobelow_skip ne peuvent marquer que les résultats au niveau de la fonction (et ne peuvent donc pas être utilisés pour ignorer les problèmes de configuration), le drapeau --mark-skip-all peut être utilisé pour ignorer tout type de résultat.
Les catégories de résultats sont divisées en modules. Ces modules peuvent ensuite être utilisés soit pour ignorer des classes de résultats (via les options ignore et skip), soit pour obtenir des détails sur les vulnérabilités (via l'option details).
Cette liste, ainsi que d'autres informations utiles, peut être trouvée en ligne de commande :
$ mix help sobelow
Afin d'exécuter Sobelow sur toutes les applications enfants d'une application parapluie avec une seule commande, vous pouvez ajouter un alias pour sobelow dans votre fichier mix.exs racine :
defp aliases do
[
sobelow: ["cmd mix sobelow"]
]
end
Si vous souhaitez utiliser des fichiers de configuration dans une application parapluie, créez un fichier .sobelow-conf dans chaque application enfant et utilisez le drapeau --config.
Lors du scan d'un projet, Sobelow vérifie occasionnellement les mises à jour et affiche 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 scanné.
Si cette fonctionnalité n'est pas souhaitée, le drapeau --private peut être utilisé avec le scan.
--all-details - Obtient les détails de tous les types de résultats.
--private - Ignore les vérifications de mises à jour.
--router - Spécifie l'emplacement du routeur. Ceci n'est nécessaire que si l'emplacement du routeur est non standard. Accepte un argument de chemin, par exemple my/strange/router.ex.
--exit - Renvoie un code de sortie non nul à un seuil de confiance de low, medium ou high. Par défaut false qui renvoie un code de sortie nul.
--threshold - Renvoie les résultats à un niveau de confiance de low (par défaut), medium ou high.
--format ou -f - Spécifie le format de sortie des résultats. Accepte un format, par exemple txt ou json.
Notez que les options telles que --verbose ne fonctionneront pas avec le format json.
Tous les résultats formatés en json contiennent une clé type, file et line.
D'autres clés peuvent varier.
--quiet - Renvoie une seule ligne indiquant le nombre de résultats. Sinon, ne renvoie aucune sortie s'il n'y a pas de résultats.
--compact - Résultats minimaux sur une seule ligne avec une sortie colorée selon le niveau de confiance.
--flycheck - Résultats minimaux sur une seule ligne compatibles avec les outils basés sur flycheck.
--save-config - Génère un fichier de configuration basé sur les options de la ligne de commande. Voir Fichiers de configuration pour plus d'informations.
--config - Exécute Sobelow avec un fichier de configuration. Voir Fichiers de configuration pour plus d'informations.
--mark-skip-all - Marque tous les résultats affichés comme pouvant être ignorés.
--clear-skip - Efface la configuration créée par --mark-skip-all.
--skip - Ignore les résultats qui ont été marqués pour être ignorés. Voir Faux positifs pour plus d'informations.
--version - Affiche la version actuelle de Sobelow. Utile pour les étapes CI ou l'intégration avec d'autres outils comme Salus.