AnglaisFrançaisEspagnol

Ad


Icône de favori OnWorks

Défauts - En ligne dans le Cloud

Exécutez le détecteur de défauts dans le fournisseur d'hébergement gratuit OnWorks sur Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS

Il s'agit de la commande de détection de défauts qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks à l'aide de l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS.

PROGRAMME:

Nom


ffectfinder - trouve lexicalement des failles de sécurité potentielles ("hits") dans le code source

SYNOPSIS


chercheur de défauts [--Aidez-moi|-h] [--version] [--listrules]
[--allowlink] [--followdotdir] [--pas de lien]
[--patch=nom de fichier|-P nom de fichier]
[--contributions|-I] [ --niveau=X | -m X ] [--faux positif|-F]
[--ne jamais ignorer|-n]
[--regex=RECONNAISSANCE | -e RECONNAISSANCE]
[--le contexte|-c] [--Colonnes|-C] [--données uniquement|-D] [--html|-H] [--immédiat|-i]
[--une seule ligne|-S] [--omettre l'heure] [--silencieux|-Q]
[--loadhitlist=F] [--savehitlist=F] [--diffhitlist=F]
[--] [ la source code filet or la source racine annuaire ]+

DESCRIPTION


Flawfinder recherche dans le code source C/C++ à la recherche de failles de sécurité potentielles. À
lancez faultfinder, donnez simplement à faultfinder une liste de répertoires ou de fichiers. Pour chaque répertoire
donné, tous les fichiers qui ont des extensions de nom de fichier C/C++ dans ce répertoire (et son
sous-répertoires, récursivement) seront examinés. Ainsi, pour la plupart des projets, donnez simplement
faultfinder le nom du répertoire le plus haut du code source (utilisez ``.'' pour le
répertoire) et faultfinder examinera tout le code source C/C++ du projet. Si tu
veux seulement avoir change examiné, enregistrez un diff unifié de ces modifications (créé par GNU
"diff -u" ou "svn diff" ou "git diff") dans un fichier de correctif et utilisez l'option --patch (-P).

Flawfinder produira une liste de « hits » (failles de sécurité potentielles), triées par risque ; les
les coups les plus risqués sont affichés en premier. Le niveau de risque est indiqué entre crochets et varie
de 0, très peu de risque, à 5, grand risque. Ce niveau de risque dépend non seulement de la
fonction, mais sur les valeurs des paramètres de la fonction. Par exemple, constante
les chaînes sont souvent moins risquées que les chaînes entièrement variables dans de nombreux contextes, et dans ceux
contextes où le coup aura un niveau de risque plus faible. Flawfinder connaît gettext (un
bibliothèque pour les programmes internationalisés) et traitera les chaînes constantes passées à travers
gettext comme s'il s'agissait de chaînes constantes ; cela réduit le nombre de faux résultats dans
programmes internationalisés. Flawfinder fera le même genre de chose avec _T() et
_TEXT(), macros Microsoft courantes pour la gestion des programmes internationalisés. Détecteur de défauts
ignore correctement la plupart des textes à l'intérieur des commentaires et des chaînes. Normalement, le détecteur de défauts montre tout
hits avec un niveau de risque d'au moins 1, mais vous pouvez utiliser l'option --minlevel pour afficher uniquement
frappe avec des niveaux de risque plus élevés si vous le souhaitez. Les descriptions des hits notent également le Common pertinent
Identificateur(s) d'énumération des faiblesses (CWE) entre parenthèses, comme indiqué ci-dessous. Détecteur de défauts
est officiellement compatible CWE.

Tous les hits ne sont pas en fait une vulnérabilité de sécurité, et toutes les vulnérabilités de sécurité ne sont pas
se trouve forcément. Néanmoins, le détecteur de défauts peut être une aide pour trouver et éliminer
vulnérabilités de sécurité. Une façon courante d'utiliser le détecteur de défauts est d'abord d'appliquer le détecteur de défauts à
un ensemble de code source et examiner les éléments les plus risqués. Ensuite, utilisez --inputs pour examiner
les emplacements d'entrée et vérifiez que seules les valeurs d'entrée légales et sûres sont
accepté des utilisateurs non fiables.

Une fois que vous avez audité un programme, vous pouvez marquer les lignes de code source qui sont en fait correctes mais
provoquer de faux avertissements afin que le détecteur de défauts arrête de s'en plaindre. Pour marquer un
ligne pour que ces avertissements soient supprimés, mettez un commentaire spécialement formaté soit sur
la même ligne (après le code source) ou tout seul dans la ligne précédente. Le commentaire
doit avoir l'un des deux formats suivants :

· // Défaut : ignorer

· /* Flawfinder : ignorer */

Pour des raisons de compatibilité, vous pouvez remplacer « Flawfinder : » par « ITS4 : » ou « RATS : » dans ces
commentaires spécialement formatés. Comme il est possible que de telles lignes soient fausses, vous pouvez utiliser
l'option --neverignore, qui fait que le détecteur de défauts n'ignore jamais aucune ligne, quoi qu'il arrive
les directives de commentaire disent (plus confusément, --neverignore ignore les ignore).

Flawfinder utilise une base de données interne appelée « règles » ; l'ensemble de règles identifie
fonctions qui sont des causes courantes de failles de sécurité. Le jeu de règles standard comprend un grand
nombre de problèmes potentiels différents, y compris à la fois des problèmes généraux qui peuvent avoir un impact
programme C/C++, ainsi qu'un certain nombre de fonctions spécifiques de type Unix et Windows qui sont
particulièrement problématique. L'option --listrules rapporte la liste des règles actuelles et
leurs niveaux de risque de défaut. Comme indiqué ci-dessus, chaque faille de sécurité potentielle trouvée dans un
le fichier de code source (correspondant à une entrée dans l'ensemble de règles) est appelé un « hit » et l'ensemble des
les hits trouvés lors d'une exécution particulière du programme sont appelés « hitlist ».
peut être enregistré (en utilisant --savehitlist), rechargé pour réaffichage (en utilisant --loadhitlist), et
vous pouvez afficher uniquement les hits qui sont différents d'une autre exécution (en utilisant --diffhitlist).

Flawfinder est un outil simple, qui présente des avantages et des inconvénients fondamentaux. Flawfinder fonctionne
en effectuant une simple tokenisation lexicale (sauter les commentaires et tokeniser correctement les chaînes),
rechercher des correspondances de jetons avec la base de données (en particulier pour rechercher des appels de fonction).
Flawfinder est donc similaire à RATS et ITS4, qui utilisent également une simple tokenisation lexicale.
Flawfinder examine ensuite le texte des paramètres de la fonction pour estimer le risque. contrairement à
des outils tels que splint, les drapeaux d'avertissement de gcc et clang, le détecteur de défauts ne sauraient utiliser ou avoir
accès aux informations sur le flux de contrôle, le flux de données ou les types de données lors de la recherche de
vulnérabilités potentielles ou estimer le niveau de risque. Ainsi, le chercheur de défauts
produisent nécessairement de nombreux faux positifs pour les vulnérabilités et omettent de signaler de nombreux
vulnérabilités. D'un autre côté, le détecteur de défauts peut trouver des vulnérabilités dans des programmes qui
ne peut pas être construit ou ne peut pas être lié. Il peut souvent fonctionner avec des programmes qui ne peuvent même pas être
compilé (au moins par les outils du réviseur). Flawfinder n'est pas non plus aussi confus par
définitions de macros et autres bizarreries avec lesquelles des outils plus sophistiqués ont du mal.
Flawfinder peut également être utile comme introduction simple aux outils d'analyse statique dans
général, car il est facile à utiliser et facile à comprendre.

Tout nom de fichier donné sur la ligne de commande sera examiné (même s'il n'a pas un
extension de nom de fichier C/C++); ainsi vous pouvez forcer le détecteur de défauts à examiner tous les fichiers spécifiques que vous
désir. Lors de la recherche récursive dans les répertoires, le détecteur de défauts s'ouvre et examine uniquement
fichiers normaux qui ont des extensions de nom de fichier C/C++. Flawfinder suppose que les fichiers sont
Fichiers C/C++ s'ils ont les extensions ".c", ".h", ".ec", ".ecp", ".pgc", ".C", ".cpp",
".CPP", ".cxx", ".cc", ".CC", ".pcc", ".hpp" ou ".H". Le nom de fichier ``-'' signifie le
entrée standard. Pour éviter les problèmes de sécurité, des fichiers spéciaux (tels que des fichiers spéciaux de périphérique
et les canaux nommés) sont toujours ignorés, et par défaut les liens symboliques sont ignorés (le
L'option --allowlink suit les liens symboliques).

Après la liste des résultats se trouve un bref résumé des résultats (utilisez -D pour supprimer ce
informations). Il affichera le nombre de hits, les lignes analysées (comme indiqué par wc -l) et
les lignes de code source physique (SLOC) analysées. Un SLOC physique est un
ligne de commentaire. Il affichera alors le nombre de hits à chaque niveau ; noter qu'il y aura
ne jamais être touché à un niveau inférieur à minlevel (1 par défaut). Ainsi, "[0] 0 [1] 9"
signifie qu'au niveau 0, il y a eu 0 hits signalés, et au niveau 1 il y a eu 9 hits
signalé. Il affichera ensuite le nombre de hits à un niveau donné ou plus (donc niveau 3+
a la somme du nombre de hits aux niveaux 3, 4 et 5). Ainsi, une entrée de "[0+] 37"
montre qu'au niveau 0 ou supérieur, il y a eu 37 hits (l'entrée 0+ sera toujours la même
comme le nombre de "coups" ci-dessus). Les résultats par KSLOC sont ensuite affichés ; c'est chacun des "niveau ou
"plus élevées" multipliées par 1000 et divisées par le SLOC physique. Si les liens symboliques étaient
ignoré, le décompte de ceux-ci est signalé. Si les hits ont été supprimés (en utilisant le "ignorer"
directive dans les commentaires du code source comme décrit ci-dessus), le nombre supprimé est signalé.
Le niveau de risque minimum à inclure dans le rapport s'affiche ; par défaut c'est 1
(utilisez --minlevel pour changer cela). Le résumé se termine par des rappels importants : pas tous les coups
est nécessairement une vulnérabilité de sécurité, et il peut y avoir d'autres vulnérabilités de sécurité
non signalé par l'outil.

Flawfinder est publié sous la licence GNU GPL version 2 ou ultérieure (GPLv2+).

Flawfinder fonctionne de manière similaire à un autre programme, ITS4, qui n'est pas entièrement open source
logiciel (tel que défini dans la définition Open Source) ni un logiciel libre (tel que défini par la
Fondation du logiciel libre). L'auteur de Flawfinder n'a jamais vu le code source d'ITS4.

LE PROJET TUTORIAL


Voici un bref exemple de la façon dont le détecteur de défauts peut être utilisé. Imaginez que vous avez le C/C++
le code source d'un programme nommé xyzzy (que vous avez peut-être écrit ou non), et
vous recherchez des failles de sécurité (vous pouvez donc les corriger avant les clients
rencontrer les vulnérabilités). Pour ce tutoriel, je suppose que vous utilisez un Unix-
système similaire, tel que Linux, OpenBSD ou MacOS X.

Si le code source se trouve dans un sous-répertoire nommé xyzzy, vous commencerez probablement par ouvrir un
fenêtre de texte et en utilisant les paramètres par défaut de faultfinder, pour analyser le programme et signaler un
liste prioritaire des vulnérabilités de sécurité potentielles (le « moins » garantit simplement que le
les résultats restent à l'écran) :
détecteur de défauts xyzzy | moins

À ce stade, vous verrez un grand nombre d'entrées. Chaque entrée a un nom de fichier, un
deux points, un numéro de ligne, un niveau de risque entre parenthèses (où 5 est le plus risqué), une catégorie,
le nom de la fonction et une description de la raison pour laquelle le détecteur de défauts pense que la ligne est un
vulnérabilité. Flawfinder trie normalement par niveau de risque, en affichant d'abord les éléments les plus risqués ;
si vous disposez de peu de temps, il est probablement préférable de commencer à travailler sur les éléments les plus risqués et
continuer jusqu'à ce que vous manquiez de temps. Si vous souhaitez limiter l'affichage aux risques avec seulement un
certain niveau de risque ou plus, utilisez l'option --minlevel. Si vous obtenez un
nombre extraordinaire de faux positifs car les noms de variables semblent dangereux
noms de fonction, utilisez l'option -F pour supprimer les rapports les concernant. Si vous ne comprenez pas
le message d'erreur, veuillez consulter des documents tels que le Écriture Sécurisés Programmes en Linux/Unix ainsi que
Unix COMMENThttp://www.dwheeler.com/secure-programs⟩ à http://www.dwheeler.com/secure-
programmes qui fournit plus d'informations sur l'écriture de programmes sécurisés.

Une fois le problème identifié et compris, vous pouvez le résoudre. Occasionnellement, vous pouvez
vouloir refaire l'analyse, à la fois parce que les numéros de ligne vont changer ainsi que assurer
que le nouveau code n'introduit pas encore une vulnérabilité différente.

Si vous avez déterminé qu'une ligne n'est pas vraiment un problème et que vous en êtes sûr, vous pouvez
insérer juste avant ou sur la ligne incriminée un commentaire comme
/* Flawfinder : ignorer */
pour les empêcher d'apparaître dans la sortie.

Une fois que vous avez fait cela, vous devez revenir en arrière et rechercher les entrées du programme, pour faire
assurez-vous que le programme filtre fortement toutes ses entrées non fiables. Flawfinder peut
identifiez de nombreuses entrées de programme en utilisant l'option --inputs, comme ceci :
détecteur de défauts --entrées xyzzy

Flawfinder s'intègre parfaitement aux éditeurs de texte et aux environnements de développement intégrés ;
voir les exemples pour plus d'informations.

Flawfinder inclut de nombreuses autres options, notamment celles permettant de créer des versions HTML du
sortie (utile pour de plus beaux affichages). La section suivante décrit ces options plus
détail.

OPTIONS


Flawfinder a un certain nombre d'options, qui peuvent être regroupées en options qui contrôlent ses propres
documentation, sélectionner les données d'entrée, sélectionner les hits à afficher, sélectionner le format de sortie,
et effectuer la gestion des listes de résultats. Flawfinder prend en charge la syntaxe standard définie dans le
POSIX (Numéro 7, Édition 2013) section ``Conventions des utilitaires''. Il prend également en charge le GNU
options longues (options à double tiret de forme --option) tel que défini dans le GNU C Bibliothèque
Référence Manuelle ``Conventions de syntaxe des arguments de programme'' et GNU Codage Normes
``Normes pour les interfaces de ligne de commande''. Les arguments d'option longs peuvent être fournis comme
``--name=value'' ou ``-name value''. Certaines options ne sont accessibles qu'à l'aide de la
conventions d'options longues GNU lisibles ; les options courantes sont également prises en charge par l'ancien
convention d'option à une lettre.

Documentation
--Aidez-moi

-h Afficher les informations d'utilisation (aide).

--version Affiche (juste) le numéro de version et quitte.

--listrules Lister les termes (tokens) qui déclenchent un examen plus approfondi, leur risque de défaut
niveau, et l'avertissement par défaut (y compris le(s) identifiant(s) CWE, si
applicable), tous séparés par des tabulations. Les termes sont principalement des noms de potentiellement-
fonctions dangereuses. Notez que le niveau de risque signalé et l'avertissement pour certains
le code spécifique peut être différent du code par défaut, selon la façon dont le terme est
utilisé. Combinez avec -D si vous ne voulez pas l'en-tête habituel. Détecteur de défauts
la version 1.29 a changé le séparateur d'espaces en tabulations et a ajouté la valeur par défaut
champ d'avertissement.

Sélection Entrée Données
--allowlink Autoriser l'utilisation de liens symboliques ; normalement les liens symboliques sont ignorés. Ne pas
utilisez cette option si vous analysez le code d'autres personnes ; les attaquants pourraient faire beaucoup
des choses pouvant causer des problèmes pour une analyse avec cette option activée. Pour
exemple, un attaquant pourrait insérer des liens symboliques vers des fichiers tels que / Etc / passwd
(la fuite d'informations sur le fichier) ou créer une boucle circulaire, ce qui
provoquer l'exécution de l'outil de recherche de défauts ``pour toujours''. Un autre problème avec l'activation de cette
option est que si le même fichier est référencé plusieurs fois en utilisant symbolique
liens, il sera analysé plusieurs fois (et donc rapporté plusieurs fois).
Notez que le détecteur de défauts inclut déjà une certaine protection contre les liens symboliques
à des types de fichiers spéciaux tels que les types de fichiers de périphérique (par exemple, /dev/zero ou
C:\mystuff\com1). Notez que pour les versions 1.01 et antérieures de l'outil de recherche de défauts, c'était
le défaut.

--followdotdir
Entrez les répertoires dont les noms commencent par ".". Normalement, ces répertoires sont
ignorés, car ils incluent normalement des données privées de contrôle de version (telles que
.git/ ou .svn/), les configurations, etc.

--pas de lien Ignoré. Historiquement, cela désactivait les liens symboliques suivants ; Ce comportement
est désormais la valeur par défaut.

--patch=fichier de correctifs

-P fichier de correctifs
Examinez les fichiers ou répertoires sélectionnés, mais ne rapportez que les résultats dans les lignes qui
sont ajoutés ou modifiés par le fichier de correctif donné. Le fichier de correctif doit être dans un
format diff unifié reconnu (par exemple, la sortie de GNU "diff -u old new",
"svn diff" ou "git diff [commit]"). Flawfinder suppose que le patch a
déjà été appliqué aux fichiers. Le fichier de correctif peut également inclure des modifications apportées à
fichiers non pertinents (ils seront simplement ignorés). Les numéros de ligne indiqués dans le
patch sont utilisés pour déterminer quelles lignes ont été modifiées, donc si vous avez
modifié les fichiers depuis la création du fichier patch, régénérer le fichier patch
premier. Attention, les noms de fichiers des nouveaux fichiers donnés dans le fichier patch
doit correspondre exactement, y compris les majuscules/minuscules, le préfixe du chemin et le répertoire
séparateur (\ contre /). Seul le format diff unifié est accepté (GNU diff, svn
diff, et la sortie git diff est correcte); si vous avez un format différent, encore une fois
régénérez-le d'abord. Uniquement les hits qui se produisent sur les lignes modifiées résultantes, ou
immédiatement au-dessus et au-dessous d'eux, sont signalés. Cette option implique
--ne jamais ignorer.

Sélection Hits à Commande
--contributions

-I Afficher uniquement les fonctions qui obtiennent des données de l'extérieur du programme ; cela définit également
niveau minimum à 0.

--niveau=X

-m X Définissez le niveau de risque minimum sur X pour l'inclusion dans la liste des résultats. Cela peut être à partir de 0 (`` non
risque'') à 5 (''risque maximum''); la valeur par défaut est 1.

--faux positif

-F N'incluez pas les résultats susceptibles d'être des faux positifs. Actuellement, cela signifie
que les noms de fonction sont ignorés s'ils ne sont pas suivis de "(", et que
les déclarations de tableaux de caractères ne sont pas notées. Ainsi, si vous avez utilisé une variable
nommé « access » partout, cela éliminera les références à cet ordinaire
variable. Ce n'est pas la valeur par défaut, car cela augmente également la probabilité de
manquer des coups importants ; en particulier, les noms de fonction dans les clauses #define et les appels
par le biais des pointeurs de fonction seront manqués.

--ne jamais ignorer

-n N'ignorez jamais les problèmes de sécurité, même s'ils ont une directive ``ignore'' dans un
commentaire.

--expression régulière=RECONNAISSANCE

-e RECONNAISSANCE
Signalez uniquement les occurrences dont le texte correspond au modèle d'expression régulière PATTERN.
Par exemple, pour signaler uniquement les hits contenant le texte "CWE-120", utilisez ``--regex
CWE-120''. Ces noms d'indicateur d'option sont les mêmes que grep.

Sélection Sortie Format
--Colonnes

-C Afficher le numéro de colonne (ainsi que le nom de fichier et le numéro de ligne) de chaque hit ;
ceci est affiché après le numéro de ligne en ajoutant deux points et le numéro de colonne dans
la ligne (le premier caractère d'une ligne est la colonne numéro 1). C'est utile
pour les éditeurs qui peuvent sauter à des colonnes spécifiques, ou pour l'intégration avec d'autres
outils (tels que ceux pour filtrer davantage les faux positifs).

--le contexte

-c Afficher le contexte, c'est-à-dire la ligne ayant le "coup"/défaut potentiel. Par défaut le
La ligne s'affiche immédiatement après l'avertissement.

--données uniquement

-D Ne pas afficher l'en-tête et le pied de page. Utilisez ceci avec --quiet pour voir juste
les données elles-mêmes.

--html

-H Formatez la sortie en HTML au lieu de texte simple.

--immédiat

-i Affichez immédiatement les hits (n'attendez pas seulement la fin).

--une seule ligne

-S Affichage sous forme d'une seule ligne de sortie de texte pour chaque hit. Utile pour interagir
avec des outils de compilation.

--omettre l'heure Omettre les informations de synchronisation. Ceci est utile pour les tests de régression de l'outil de recherche de défauts
lui-même, de sorte que la sortie ne varie pas en fonction de la durée de l'analyse
prend.

--silencieux

-Q N'affiche pas les informations d'état (c'est-à-dire les fichiers en cours d'examen) pendant
l'analyse est en cours.

Liste de résultats Gestion
--savehitlist=F
Enregistrez tous les résultats obtenus (la "liste de résultats") dans F.

--loadhitlist=F
Chargez la liste de résultats à partir de F au lieu d'analyser les programmes sources. Avertissement : faites ne sauraient
charger des listes de résultats à partir de sources non fiables (pour des raisons de sécurité).

--diffhitlist=F
Afficher uniquement les hits (chargés ou analysés) qui ne sont pas dans F. F a probablement été créé
précédemment en utilisant --savehitlist. Avertissement : faites ne sauraient diff hitlists de non fiables
sources (pour des raisons de sécurité). Si l'option --loadhitlist n'est pas fournie,
cela montrera les hits dans les fichiers de code source analysés qui n'ont pas été
précédemment stocké dans F. S'il est utilisé avec --loadhitlist, cela affichera le
hits dans la hitlist chargée pas dans F. L'algorithme de différence est
conservateur; les hits ne sont considérés comme « identiques » que s'ils ont le même
nom de fichier, numéro de ligne, position de colonne, nom de fonction et niveau de risque.

EXEMPLES


Voici divers exemples de la façon d'invoquer le détecteur de défauts. Les premiers exemples montrent divers
options de ligne de commande simples. Flawfinder est conçu pour fonctionner correctement avec les éditeurs de texte et
environnements de développement intégrés, les sections suivantes montrent donc comment intégrer le détecteur de défauts
dans vim et emacs.

étapes de ligne de commande Options
chercheur de défauts /usr/src/linux-3.16
Examinez tous les fichiers C/C++ du répertoire /usr/src/linux-3.16 et tous ses
sous-répertoires (récursivement), rapportant tous les hits trouvés. Par défaut
defaultfinder ignorera les liens symboliques et les répertoires dont les noms commencent par
une période.

chercheur de défauts --minlevel=4 .
Examiner tous les fichiers C/C++ dans le répertoire courant et ses sous-répertoires
(récursivement); signaler uniquement les vulnérabilités de niveau 4 et plus (les deux
niveaux de risque).

chercheur de défauts --contributions monrépertoire
Examinez tous les fichiers C/C++ dans mydir et ses sous-répertoires (récursivement), et
fonctions de rapport qui prennent des entrées (afin que vous puissiez vous assurer qu'elles filtrent les
entrées de manière appropriée).

chercheur de défauts --ne jamais ignorer monrépertoire
Examinez tous les fichiers C/C++ du répertoire mydir et ses sous-répertoires,
y compris même les hits marqués pour être ignorés dans les commentaires du code.

chercheur de défauts -QD monrépertoire
Examinez mydir et rapportez uniquement les résultats réels (en supprimant l'en-tête et
pied de page de la sortie). Ce formulaire est utile si la sortie sera redirigée vers
d'autres outils pour une analyse plus approfondie. Les -C (--colonnes) et -S (--ligne simple)
Les options peuvent également être utiles si vous redirigez les données vers d'autres outils.

chercheur de défauts -QDSC monrépertoire
Examinez mydir, en rapportant uniquement les résultats réels (pas d'en-tête ni de pied de page). Chaque
hit est signalé sur une ligne et les numéros de colonne sont signalés. Cela peut être un
commande utile si vous fournissez une sortie de recherche de défauts à d'autres outils.

chercheur de défauts --silencieux --html --le contexte monrépertoire > résultats.html
Examinez tous les fichiers C/C++ dans le répertoire mydir et ses sous-répertoires, et
produire une version au format HTML des résultats. Gestion des codes sources
les systèmes (tels que SourceForge et Savannah) peuvent utiliser une commande comme celle-ci.

chercheur de défauts --silencieux --savehitlist hits.enregistrés *.[ch]
Examinez tous les fichiers .c et .h dans le répertoire actuel. Ne rapportez pas sur
statut de traitement, et enregistrez la liste de résultats résultante (l'ensemble de tous les résultats) dans
le fichier save.hits.

chercheur de défauts --diffhitlist hits.enregistrés *.[ch]
Examinez tous les fichiers .c et .h dans le répertoire actuel et affichez tous les résultats qui
n'étaient pas déjà dans le fichier save.hits. Cela peut être utilisé pour afficher uniquement le
``nouvelles'' vulnérabilités dans un programme modifié, si save.hits a été créé à partir de
l'ancienne version du programme en cours d'analyse.

chercheur de défauts --pièce patch.récent .
Examiner le répertoire courant de manière récursive, mais uniquement les lignes de rapport qui ont été
modifié ou ajouté dans le fichier de correctif déjà appliqué nommé patch.récent.

chercheur de défauts --expression régulière "CWE-120|CWE-126" src /
Examiner le répertoire src récursivement, mais ne signalez que les hits où CWE-120 ou
CWE-126 s'applique.

Invoquer de entrain
L'éditeur de texte vim inclut un mécanisme de « correction rapide » qui fonctionne bien avec le détecteur de défauts, donc
que vous pouvez facilement afficher les messages d'avertissement et accéder au code source correspondant.

Tout d'abord, vous devez invoquer le détecteur de défauts pour créer une liste de résultats, et il y a deux façons de
faire ça. La première consiste à démarrer d'abord le détecteur de défauts, puis (en utilisant sa sortie) à appeler
vigueur. La deuxième façon est de démarrer (ou de continuer à exécuter) vim, puis d'invoquer le détecteur de défauts
(généralement de l'intérieur de vim).

Pour la première façon, lancez faultfinder et stockez sa sortie dans un FLAWFILE (disons "flawfile"),
puis invoquez vim à l'aide de son option -q, comme ceci : "vim -q faultfile". La deuxième façon
(démarrer le détecteur de défauts après avoir démarré vim) peut être fait de nombreuses manières. L'une consiste à invoquer
flawfinder à l'aide d'une commande shell, ":!flawfinder-command > FLAWFILE", puis suivez-la avec
la commande ":cf FLAWFILE". Une autre façon est de stocker la commande de recherche de défauts dans votre
makefile (comme, disons, une pseudo-commande comme "flaw"), puis exécutez ":make fault".

Dans tous ces cas, vous avez besoin d'une commande pour que faultfinder s'exécute. Une commande plausible, qui
place chaque hit dans sa propre ligne (-S) et supprime les en-têtes et les pieds de page qui pourraient semer la confusion
il est:

chercheur de défauts -SQD .

Vous pouvez maintenant utiliser diverses commandes d'édition pour afficher les résultats. La commande ":cn" s'affiche
le coup suivant ; ":cN" affiche le coup précédent et ":cr" revient au premier coup.
":copen" ouvrira une fenêtre pour afficher la liste actuelle des hits, appelée le "quickfix
window"; ":cclose" fermera la fenêtre quickfix. Si le tampon dans la fenêtre utilisée a
modifié et que l'erreur se trouve dans un autre fichier, le saut vers l'erreur échouera. Vous devez
assurez-vous que la fenêtre contient un tampon qui peut être abandonné avant d'essayer de sauter à un
nouveau fichier, par exemple en enregistrant le fichier ; cela empêche la perte accidentelle de données.

Invoquer de emacs
L'éditeur de texte / système d'exploitation emacs inclut le "mode grep" et le "mode compilation"
mécanismes qui fonctionnent bien avec le détecteur de défauts, ce qui facilite la visualisation des messages d'avertissement, saute
au code source approprié et résolvez tous les problèmes que vous rencontrez.

Tout d'abord, vous devez invoquer le détecteur de défauts pour créer une liste de messages d'avertissement. Vous pouvez utiliser
"grep mode" ou "compile mode" pour créer cette liste. Souvent, le "mode grep" est plus pratique ;
il laisse le mode de compilation inchangé afin que vous puissiez facilement recompiler une fois que vous avez changé
quelque chose. Cependant, si vous voulez sauter à la position exacte de la colonne d'un hit, compilez
le mode peut être plus pratique car emacs peut utiliser la sortie de colonne de faultfinder pour
sauter directement au bon endroit sans aucune configuration particulière.

Pour utiliser le mode grep, entrez la commande "Mx grep", puis entrez le détecteur de défauts nécessaire
commander. Pour utiliser le mode compilation, entrez la commande "Mx compile" et entrez le
commande de recherche de défauts. Il s'agit d'une commande méta-clé, vous devrez donc utiliser la clé méta pour
votre clavier (il s'agit généralement de la touche ESC). Comme pour toutes les commandes emacs, vous devrez
appuyez sur RETOUR après avoir tapé "grep" ou "compiler". Ainsi, sur de nombreux systèmes, le mode grep est
invoqué en tapant ESC xgrep RETURN.

Vous devez ensuite entrer une commande, en supprimant tout ce qui s'y trouvait auparavant si nécessaire. UNE
commande plausible est :

chercheur de défauts -SQDC .

Cette commande fait de chaque rapport d'accès une seule ligne, ce qui est beaucoup plus facile pour les outils à
manipuler. Les options quiet et dataonly suppriment les autres informations d'état non nécessaires pour
utiliser à l'intérieur d'emacs. La période de fin signifie que le répertoire courant et tous
les descendants sont recherchés pour le code C/C++ et analysés pour les défauts.

Une fois que vous avez invoqué le détecteur de défauts, vous pouvez utiliser emacs pour parcourir ses résultats. Les
la commande Cx ` (Control-x backtick) visite l'emplacement du code source pour le prochain avertissement
un message. Cu Cx ` (contrôle-u contrôle-x backtick) recommence depuis le début. Vous pouvez
visitez la source de tout message d'erreur particulier en vous déplaçant vers ce message d'appel dans le
tampon de *compilation* ou tampon *grep* et en tapant la clé de retour. (Note technique : dans le
tampon de compilation, cela invoque compile-goto-error.) Vous pouvez également cliquer sur Mouse-2
sur le message d'erreur (vous n'avez pas besoin de passer d'abord au tampon de *compilation*).

Si vous souhaitez utiliser le mode grep pour accéder à des colonnes spécifiques d'un hit, vous devrez
configurez spécialement emacs pour ce faire. Pour cela, modifiez la variable emacs "grep-regexp-
alist". Cette variable indique à Emacs comment analyser la sortie d'une commande "grep", similaire à la
variable "compilation-error-regexp-alist" qui répertorie divers formats d'erreur de compilation
des messages.

Invoquer de Intégrée Développement Environnements (IDE)
Pour les (autres) IDE, consultez l'ensemble de plug-ins de votre IDE.

COMMUNE LA FAIBLESSE ÉNUMÉRATION (CWE)


Le Common Weakness Enumeration (CWE) est « une liste formelle ou un dictionnaire de logiciels courants
faiblesses qui peuvent survenir dans l'architecture, la conception, le code ou la mise en œuvre du logiciel qui
peut conduire à des failles de sécurité exploitables... créées pour servir de langage commun
pour décrire les faiblesses de la sécurité des logiciels'' (http://cwe.mitre.org/about/faq.html). Pour L
plus d'informations sur les CWE, voir http://cwe.mitre.org.

Flawfinder prend en charge le CWE et est officiellement compatible CWE. Descriptions des hits généralement
inclure un identifiant de Common Weakness Enumeration (CWE) pertinent entre parenthèses lorsqu'il
est connu pour être un CWE pertinent. Par exemple, de nombreux hits liés à la mémoire tampon mentionnent
CWE-120, l'identifiant CWE pour la ``copie tampon sans vérifier la taille de l'entrée'' (aka
``Débordement de tampon classique''). Dans quelques cas, plusieurs identifiants CWE peuvent être répertoriés.
Le rapport HTML comprend également des liens hypertextes vers les définitions CWE hébergées à MITRE. Dans
De cette façon, le détecteur de défauts est conçu pour répondre à l'exigence de sortie CWE.

Bon nombre des CWE signalés par le détecteur de défauts sont identifiés dans la liste des 25 meilleurs CWE/SANS 2011
(http://cwe.mitre.org/top25/). Beaucoup de gens voudront rechercher des CWE dans cette liste,
tels que CWE-120 (débordement de tampon classique), lorsque le détecteur de défauts correspond à un CWE qui est plus
général qu'un élément du top 25, il le répertorie comme plus général : plus spécifique (par exemple,
CWE-119:CWE-120), où plus général est le mappage réel. Si le détecteur de défauts correspond à un plus
élément CWE spécifique qui est un cas spécifique d'un élément du top 25, il est répertorié sous la forme
top-25/more-specific (par exemple, CWE-362/CWE-367), où le mappage réel est le plus spécifique
Entrée CWE. Si la même entrée correspond à plusieurs CWE, les CWE sont séparés par des virgules
(cela se produit souvent avec CWE-20, Validation d'entrée incorrecte). Cela simplifie la recherche de
certaines CWE.

La version 2.7 de CWE (publiée le 23 juin 2014) a été utilisée pour la cartographie. Le CWE actuel
les mappages sélectionnent le CWE le plus spécifique que l'outil peut déterminer. En théorie, la plupart des CWE
les éléments de sécurité (signatures/motifs recherchés par l'outil) pourraient théoriquement être
mappé à CWE-676 (Utilisation d'une fonction potentiellement dangereuse), mais un tel mappage ne serait pas
utile. Ainsi, des cartographies plus spécifiques ont été préférées là où elles pouvaient être trouvées. Détecteur de défauts
est un outil d'analyse lexicale ; par conséquent, il n'est pas pratique qu'il soit plus précis que
les mappages actuellement mis en œuvre. Cela signifie également qu'il est peu probable qu'il faille beaucoup
mise à jour de la devise de la carte ; il n'a tout simplement pas assez d'informations pour affiner
niveau de CWE détaillé que les changements de CWE affecteraient généralement. La liste des identifiants CWE
a été généré automatiquement à l'aide de "make show-cwes", il est donc certain que cette liste
est correct. Veuillez signaler les problèmes de mappage CWE en tant que bogues si vous en trouvez.

Flawfinder peut ne pas trouver de vulnérabilité, même si Flawfinder couvre l'un de ces CWE
faiblesses. Cela dit, le détecteur de défauts trouve les vulnérabilités répertoriées par les CWE qu'il couvre,
et il ne signalera pas les lignes sans ces vulnérabilités dans de nombreux cas. Ainsi, comme
requis pour tout outil destiné à être compatible CWE, le détecteur de défauts a un taux de faux
positifs inférieurs à 100 % et un taux de faux négatifs inférieur à 100 %. Flawfinder presque
signale toujours chaque fois qu'il trouve une correspondance avec un élément de sécurité CWE (une signature/un modèle comme
défini dans sa base de données), bien que certaines constructions obscures puissent le faire échouer (voir BUGS
ci-dessous).

Flawfinder peut signaler les CWE suivants (ce sont les CWE couverts par le détecteur de défauts ;
``*'' marque ceux dans la liste des 25 meilleurs CWE/SANS) :

· CWE-20 : Validation d'entrée incorrecte

· CWE-22 : Limitation incorrecte d'un nom de chemin vers un répertoire restreint (``Path Traversal'')

· CWE-78 : Neutralisation incorrecte des éléments spéciaux utilisés dans une commande OS (``OS Command
Injection'')*

· CWE-119 : Restriction inappropriée des opérations dans les limites d'un tampon de mémoire (un
parent de CWE-120*, ceci est donc affiché comme CWE-119:CWE-120)

· CWE-120 : Copie de tampon sans vérification de la taille de l'entrée (``Classic Buffer Overflow'')*

· CWE-126 : sur-lecture de la mémoire tampon

· CWE-134 : Chaîne de format non contrôlée*

· CWE-190 : Entier Overflow ou Wraparound*

· CWE-250 : Exécution avec des privilèges inutiles

· CWE-327 : Utilisation d'un algorithme cryptographique défectueux ou risqué*

· CWE-362 : exécution simultanée utilisant une ressource partagée avec une synchronisation incorrecte
(``condition de course'')

· CWE-377 : Fichier temporaire non sécurisé

· CWE-676 : Utilisation d'une fonction potentiellement dangereuse*

· CWE-732 : Attribution d'autorisation incorrecte pour la ressource critique*

· CWE-785 : Utilisation de la fonction de manipulation de chemin sans mémoire tampon de taille maximale (enfant de
CWE-120*, c'est donc indiqué comme CWE-120/CWE-785)

· CWE-807 : recours à des entrées non fiables dans une décision de sécurité*

· CWE-829 : Inclusion de fonctionnalités provenant d'une sphère de contrôle non fiable*

Vous pouvez sélectionner un sous-ensemble spécifique de CWE à signaler en utilisant l'option ``--regex'' (-e).
Cette option accepte une expression régulière, vous pouvez donc sélectionner plusieurs CWE, par exemple, ``--regex
"CWE-120|CWE-126"''. Si vous sélectionnez plusieurs CWE avec ``|'' sur une ligne de commande, vous
généralement besoin de citer les paramètres (puisqu'un ``|'' sans guillemets est le symbole pipe).
Flawfinder est conçu pour répondre à l'exigence CWE-Searchable.

Si votre objectif est de signaler un sous-ensemble de CWE répertoriés dans un fichier, cela peut être réalisé
sur un système de type Unix en utilisant l'option ``--regex'' aka ``-e''. Le fichier doit être en
format d'expression régulière. Par exemple, ``flawfinder -e $(cat file1)'' ne rapporterait que
hits qui correspondent au modèle dans ``file1''. Si le fichier1 contenait ``CWE-120|CWE-126'' il
ne rapporterait que les hits correspondant à ces CWE.

Une liste de tous les éléments de sécurité CWE (les signatures/modèles recherchés par le détecteur de défauts)
peut être trouvé en utilisant l'option ``--listrules''. Chaque ligne répertorie le jeton de signature
(généralement un nom de fonction) qui peut conduire à un hit, le niveau de risque par défaut et le
avertissement par défaut (qui inclut l'identifiant CWE par défaut). Dans la plupart des cas, c'est
également suffisant si vous voulez voir quels éléments de sécurité CWE correspondent à quels CWE, ou le
inverser. Par exemple, pour voir la plupart des signatures (noms de fonction) qui correspondent à
CWE-327, sans voir le niveau de risque par défaut ou le texte d'avertissement détaillé, exécutez ``flawfinder
--listrules | grep CWE-327 | couper -f1''. Vous pouvez également voir les jetons sans mappage CWE
de cette façon en exécutant ``flawfinder -D --listrules | grep -v CWE-''. Cependant, alors que
--listrules répertorie tous les éléments de sécurité CWE, il ne répertorie que les mappages par défaut de CWE
éléments de sécurité aux identifiants CWE. Il n'inclut pas les raffinements que le détecteur de défauts
s'applique (par exemple, en examinant les paramètres de fonction).

Si vous souhaitez une cartographie détaillée et exacte entre les éléments de sécurité CWE et CWE
identifiants, le code source de l'outil de recherche de défauts (inclus dans la distribution) est le meilleur endroit
pour cette information. Ces informations détaillées intéressent avant tout les quelques
les personnes qui essaient d'affiner les mappages CWE de l'outil de recherche de défauts ou d'affiner le CWE en général.
Le code source documente le mappage entre les éléments de sécurité et le CWE respectif
identifiants, et est un fichier Python unique. L'ensemble de données ``c_rules'' définit la plupart des règles,
en référence à une fonction qui peut apporter des améliorations supplémentaires. Vous pouvez rechercher le
ensemble de données pour les noms de fonction pour voir quel CWE il génère par défaut ; si le premier paramètre est
pas ``normal'' alors c'est le nom d'une méthode Python de raffinage qui peut sélectionner différents
CWE (en fonction des informations complémentaires). Inversement, vous pouvez rechercher ``CWE-number''
et trouvez quels éléments de sécurité (signatures ou modèles) font référence à cet identifiant CWE.
Pour la plupart des gens, c'est bien plus que ce dont ils ont besoin ; la plupart des gens veulent juste scanner leur
code source pour trouver rapidement les problèmes.

SÛRETÉ


Le but de cet outil est d'aider à trouver les vulnérabilités afin qu'elles puissent être corrigées.
Cependant, les développeurs et les réviseurs doivent savoir comment développer un logiciel sécurisé pour utiliser ce
outil, car sinon, a tromper avec a outil is toujours a tromper. Mon livre sur
http://www.dwheeler.com/secure-programs peut aider.

Cet outil devrait être, tout au plus, une petite partie d'un processus de développement logiciel plus large
conçu pour éliminer ou réduire l'impact des vulnérabilités. Développeurs et réviseurs
doivent savoir comment développer des logiciels sécurisés, et ils doivent appliquer ces connaissances pour réduire
les risques de vulnérabilités en premier lieu.

Différents outils de recherche de vulnérabilités ont tendance à trouver différentes vulnérabilités. Ainsi, vous
sont mieux lotis en utilisant un examen humain et une variété d'outils. Cet outil peut aider à trouver des
vulnérabilités, mais pas toutes.

Vous devez toujours analyser un copier du programme source en cours d'analyse, pas un répertoire
qui peut être modifié par un développeur pendant que le détecteur de défauts effectue l'analyse. C'est
notamment true si vous ne faites pas nécessairement confiance à un développeur du programme analysé.
Si un attaquant contrôle les fichiers pendant que vous les analysez, il pourrait
déplacer des fichiers ou modifier leur contenu pour éviter l'exposition d'un problème de sécurité
(ou créer l'impression d'un problème là où il n'y en a pas). Si tu t'inquiètes pour
programmeurs malveillants, vous devriez le faire de toute façon, car après analyse, vous devrez
vérifiez que le code finalement exécuté est le code que vous avez analysé. N'utilisez pas non plus le
--allowlink option dans de tels cas ; les attaquants pourraient créer des liens symboliques malveillants vers des fichiers
en dehors de leur zone de code source (comme / Etc / passwd).

Les systèmes de gestion de code source (comme SourceForge et Savannah) tombent définitivement dans ce
Catégorie; si vous maintenez l'un de ces systèmes, copiez ou extrayez d'abord les fichiers dans
un répertoire séparé (qui ne peut pas être contrôlé par des attaquants) avant d'exécuter le détecteur de défauts ou
tout autre outil d'analyse de code.

Notez que le détecteur de défauts n'ouvre que les fichiers normaux, les répertoires et (si demandé) les symboles
liens; il n'ouvrira jamais d'autres types de fichiers, même si un lien symbolique y est créé.
Cela contrecarre les attaquants qui insèrent des types de fichiers inhabituels dans le code source. Cependant, ce
ne fonctionne que si le système de fichiers en cours d'analyse ne peut pas être modifié par un attaquant lors de la
l'analyse, comme recommandé ci-dessus. Cette protection ne fonctionne pas non plus sur les plateformes Cygwin,
malheureusement.

Les systèmes Cygwin (émulation Unix sur Windows) ont un problème supplémentaire si le détecteur de défauts
est utilisé pour analyser des programmes auxquels l'analyste ne peut pas faire confiance. Le problème est dû à une conception
faille dans Windows (qu'elle hérite de MS-DOS). Sous Windows et MS-DOS, certains noms de fichiers
(par exemple, ``com1'') sont automatiquement traités par le système d'exploitation comme les noms de
périphériques, et cela est vrai même lorsqu'un chemin d'accès complet est fourni. Oui, Windows et MS-DOS
sont vraiment mal conçus. Flawfinder gère cela en vérifiant ce qu'est un système de fichiers
l'objet est, puis n'ouvre que les répertoires et les fichiers normaux (et les liens symboliques s'ils sont activés).
Malheureusement, cela ne fonctionne pas sur Cygwin ; sur au moins certaines versions de Cygwin sur certains
versions de Windows, simplement essayer de déterminer si un fichier est un type de périphérique peut provoquer le
programme à accrocher. Une solution de contournement consiste à supprimer ou à renommer tous les noms de fichiers interprétés
comme noms d'appareils avant d'effectuer l'analyse. Ces soi-disant « noms réservés » sont
CON, PRN, AUX, CLOCK$, NUL, COM1-COM9 et LPT1-LPT9, éventuellement suivis d'une extension
(par exemple, ``com1.txt''), dans n'importe quel répertoire, et dans tous les cas (Windows est insensible à la casse).

Do ne sauraient charge ou diff des listes de résultats provenant de sources non fiables. Ils sont mis en œuvre à l'aide de la
module pickle Python, et le module pickle n'est pas destiné à être sécurisé contre les erreurs
ou des données construites de manière malveillante. Les listes de résultats stockées sont destinées à être utilisées ultérieurement par le même
utilisateur qui a créé la liste de résultats ; dans ce contexte, cette restriction n'est pas un problème.

Utilisez le détecteur de défauts en ligne à l'aide des services onworks.net


Serveurs et postes de travail gratuits

Télécharger des applications Windows et Linux

  • 1
    Phaser
    Phaser
    Phaser est un open rapide, gratuit et amusant
    framework de jeu source HTML5 qui offre
    Rendu WebGL et Canvas à travers
    navigateurs Web de bureau et mobiles. Jeux
    peut être co...
    Télécharger Phaser
  • 2
    Moteur VASSAL
    Moteur VASSAL
    VASSAL est un moteur de jeu pour créer
    versions électroniques de la carte traditionnelle
    et jeux de cartes. Il fournit un soutien pour
    rendu et interaction des pièces de jeu,
    et...
    Télécharger le moteur VASSAL
  • 3
    OpenPDF - Fork d'iText
    OpenPDF - Fork d'iText
    OpenPDF est une bibliothèque Java pour créer
    et l'édition de fichiers PDF avec une licence LGPL et
    Licence open source MPL. OpenPDF est le
    LGPL/MPL open source successeur d'iText,
    un ...
    Télécharger OpenPDF - Fork d'iText
  • 4
    SAGA SIG
    SAGA SIG
    SAGA - Système d'automatisation
    Analyses géoscientifiques - est un
    Logiciel de système d'information (SIG) avec
    immenses capacités pour les géodonnées
    traitement et an...
    Télécharger le SIG SAGA
  • 5
    Boîte à outils pour Java/JTOOpen
    Boîte à outils pour Java/JTOOpen
    IBM Toolbox for Java / JTOpen est un
    bibliothèque de classes Java prenant en charge
    programmation client/serveur et internet
    modèles vers un système exécutant OS/400,
    i5/OS, ou...
    Télécharger Toolbox pour Java/JTOpen
  • 6
    D3.js
    D3.js
    D3.js (ou D3 pour les documents pilotés par les données)
    est une bibliothèque JavaScript qui vous permet
    produire des données dynamiques et interactives
    visualisations dans les navigateurs Web. Avec D3
    toi...
    Télécharger D3.js
  • Plus "

Commandes Linux

Ad