InglésFrancésEspañol

Ad


icono de página de OnWorks

flawfinder - Online en la nube

Ejecute flawfinder en el proveedor de alojamiento gratuito de OnWorks sobre Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS

Este es el buscador de fallas de comandos que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.

PROGRAMA:

NOMBRE


flawfinder - encuentra léxicamente posibles fallas de seguridad ("hits") en el código fuente

SINOPSIS


buscador de fallas [--ayuda|-h] [--versión] [--listrules]
[--permitir enlace] [--followdotdir] [--No hay enlace]
[--patch =nombre de archivo|-P nombre de archivo]
[--entradas|-I] [ --minlevel =X | -m X ] [--falso positivo|-F]
[--nunca ignorar|-n]
[--regex =PATRÓN | -e PATRÓN]
[--contexto|-c] [--columnas|-C] [--solo datos|-D] [--html|-H] [--inmediato|-i]
[--linea sola|-S] [--omitir tiempo] [--tranquilo|-Q]
[--loadhitlist =F] [--savehitlist =F] [--diffhitlist =F]
[--] [ fuente código presentar or fuente raíz directorio ]+

DESCRIPCIÓN


Flawfinder busca en el código fuente de C / C ++ en busca de posibles fallas de seguridad. Para
ejecute flawfinder, simplemente proporcione a flawfinder una lista de directorios o archivos. Para cada directorio
dado, todos los archivos que tienen extensiones de nombre de archivo C / C ++ en ese directorio (y su
subdirectorios, de forma recursiva). Por lo tanto, para la mayoría de los proyectos, simplemente proporcione
flawfinder el nombre del directorio superior del código fuente (use ``. '' para el actual
directorio), y flawfinder examinará todo el código fuente C / C ++ del proyecto. Si tu
solo quiero tener cambios revisado, guarde una diferencia unificada de esos cambios (creado por GNU
"diff -u" o "svn diff" o "git diff") en un archivo de parche y use la opción --patch (-P).

Flawfinder producirá una lista de `` aciertos '' (posibles fallas de seguridad), ordenados por riesgo; los
Los aciertos más riesgosos se muestran primero. El nivel de riesgo se muestra entre corchetes y varía
de 0, muy poco riesgo, a 5, gran riesgo. Este nivel de riesgo depende no solo de la
función, sino en los valores de los parámetros de la función. Por ejemplo, constante
Las cadenas son a menudo menos riesgosas que las cadenas completamente variables en muchos contextos, y en esos
contextos, el impacto tendrá un nivel de riesgo menor. Flawfinder sabe acerca de gettext (un
biblioteca para programas internacionalizados) y tratará las cadenas constantes que pasan
gettext como si fueran cadenas constantes; esto reduce el número de falsos aciertos en
programas internacionalizados. Flawfinder hará lo mismo con _T () y
_TEXT (), macros comunes de Microsoft para manejar programas internacionalizados. Flawfinder
ignora correctamente la mayoría del texto dentro de comentarios y cadenas. Normalmente, Flawfinder muestra todo
hits con un nivel de riesgo de al menos 1, pero puede usar la opción --minlevel para mostrar solo
éxitos con niveles de riesgo más altos si lo desea. Las descripciones de los hits también tienen en cuenta los elementos comunes relevantes.
Identificador (es) de enumeración de debilidad (CWE) entre paréntesis, como se describe a continuación. Flawfinder
es oficialmente compatible con CWE.

No todos los impactos son en realidad una vulnerabilidad de seguridad, y no todas las vulnerabilidades de seguridad
se encuentra necesariamente. Sin embargo, Flawfinder puede ser una ayuda para encontrar y eliminar
vulnerabilidades de seguridad. Una forma común de usar flawfinder es aplicar primero flawfinder a
un conjunto de código fuente y examinar los elementos de mayor riesgo. Luego, use --inputs para examinar
las ubicaciones de entrada, y asegúrese de que sólo los valores de entrada legales y seguros sean
aceptado de usuarios que no son de confianza.

Una vez que haya auditado un programa, puede marcar las líneas de código fuente que están realmente bien pero
causar advertencias falsas para que Flawfinder deje de quejarse de ellas. Para marcar un
línea para que estas advertencias se supriman, coloque un comentario con formato especial en
la misma línea (después del código fuente) o solo en la línea anterior. El comentario
debe tener uno de los dos formatos siguientes:

· // Flawfinder: ignorar

· / * Flawfinder: ignorar * /

En aras de la compatibilidad, puede reemplazar "Flawfinder:" con "ITS4:" o "RATS:" en estos
comentarios con formato especial. Dado que es posible que tales líneas estén equivocadas, puede usar
la opción - neverignore, que hace que flawfinder nunca ignore ninguna línea sin importar qué
las directivas de comentarios dicen (más confuso, - neverignore ignora los ignores).

Flawfinder utiliza una base de datos interna llamada `` conjunto de reglas ''; el conjunto de reglas identifica
funciones que son causas comunes de fallas de seguridad. El conjunto de reglas estándar incluye una gran
varios problemas potenciales diferentes, incluidos los problemas generales que pueden afectar a cualquier
Programa C / C ++, así como una serie de funciones específicas similares a Unix y Windows que son
especialmente problemático. La opción --listrules informa la lista de reglas actuales y
sus niveles de riesgo de incumplimiento. Como se señaló anteriormente, cada falla de seguridad potencial encontrada en un determinado
archivo de código fuente (que coincide con una entrada en el conjunto de reglas) se llama un `` hit '', y el conjunto de
Los hits encontrados durante cualquier ejecución particular del programa se denominan `` listas de resultados ''. Listas de resultados
se puede guardar (usando --savehitlist), volver a cargar para volver a mostrarlo (usando --loadhitlist), y
puede mostrar solo los resultados que son diferentes de otra ejecución (usando --diffhitlist).

Flawfinder es una herramienta sencilla que ofrece ventajas y desventajas fundamentales. Flawfinder funciona
haciendo una tokenización léxica simple (omitiendo comentarios y tokenizando correctamente las cadenas),
buscando coincidencias de tokens con la base de datos (particularmente para encontrar llamadas a funciones).
Por lo tanto, Flawfinder es similar a RATS e ITS4, que también usan tokenización léxica simple.
Flawfinder luego examina el texto de los parámetros de la función para estimar el riesgo. diferente a
herramientas como splint, banderas de advertencia de gcc y clang, flawfinder no no usar o tener
acceso a la información sobre el flujo de control, el flujo de datos o los tipos de datos al buscar
vulnerabilidades potenciales o estimar el nivel de riesgo. Por lo tanto, Flawfinder
producir necesariamente muchos falsos positivos para las vulnerabilidades y no informar de muchas
vulnerabilidades. Por otro lado, flawfinder puede encontrar vulnerabilidades en programas que
no se puede construir o no se puede vincular. A menudo puede funcionar con programas que ni siquiera se pueden
compilado (al menos con las herramientas del revisor). Flawfinder tampoco se confunde tanto con
definiciones de macros y otras rarezas con las que las herramientas más sofisticadas tienen problemas.
Flawfinder también puede ser útil como una simple introducción a las herramientas de análisis estático en
general, ya que es fácil de empezar a usar y fácil de entender.

Se examinará cualquier nombre de archivo dado en la línea de comando (incluso si no tiene un
Extensión de nombre de archivo C / C ++); por lo tanto, puede forzar a Flawfinder a examinar cualquier archivo específico que
deseo. Mientras busca directorios de forma recursiva, flawfinder solo abre y examina
archivos regulares que tienen extensiones de nombre de archivo C / C ++. Flawfinder supone que los archivos están
Archivos C / C ++ si tienen las extensiones ".c", ".h", ".ec", ".ecp", ".pgc", ".C", ".cpp",
".CPP", ".cxx", ".cc", ".CC", ".pcc", ".hpp" o ".H". El nombre de archivo `` - '' significa el
entrada estándar. Para evitar problemas de seguridad, archivos especiales (como archivos especiales del dispositivo
y tuberías con nombre) siempre se omiten y, de forma predeterminada, se omiten los enlaces simbólicos (el
La opción --allowlink sigue enlaces simbólicos).

Después de la lista de resultados hay un breve resumen de los resultados (use -D para eliminar este
información). Mostrará el número de aciertos, líneas analizadas (según lo informado por wc -l) y
las líneas de código fuente físicas (SLOC) analizadas. Un SLOC físico es un no en blanco, no
línea de comentario. Luego mostrará el número de aciertos en cada nivel; tenga en cuenta que habrá
nunca sea un éxito a un nivel inferior al nivel mínimo (1 por defecto). Por lo tanto, "[0] 0 [1] 9"
significa que en el nivel 0 hubo 0 aciertos reportados y en el nivel 1 hubo 9 aciertos
informó. A continuación, mostrará el número de golpes en un nivel determinado o superior (por lo que el nivel 3+
tiene la suma del número de aciertos en el nivel 3, 4 y 5). Por lo tanto, una entrada de "[0+] 37"
muestra que en el nivel 0 o superior hubo 37 hits (la entrada 0+ siempre será la misma
como el número de "hits" anterior). A continuación se muestran los resultados por KSLOC; este es cada uno de los "niveles o
valores más altos "multiplicados por 1000 y divididos por el SLOC físico. Si los enlaces simbólicos
omitido, se informa el recuento de esos. Si se suprimieron los hits (utilizando la opción "ignorar"
directiva en los comentarios del código fuente como se describe arriba), se informa el número suprimido.
Se muestra el nivel mínimo de riesgo que se incluirá en el informe; por defecto esto es 1
(use --minlevel para cambiar esto). El resumen termina con recordatorios importantes: no todas las visitas
es necesariamente una vulnerabilidad de seguridad y puede haber otras vulnerabilidades de seguridad
no informado por la herramienta.

Flawfinder se publica bajo la licencia GNU GPL versión 2 o posterior (GPLv2 +).

Flawfinder funciona de manera similar a otro programa, ITS4, que no es completamente de código abierto
software (como se define en la definición de código abierto) ni software libre (como se define en el
Fundación del Software Libre). El autor de Flawfinder nunca ha visto el código fuente de ITS4.

BREVE TUTORIAL


Aquí hay un breve ejemplo de cómo se puede usar Flawfinder. Imagina que tienes el C / C ++
código fuente para algún programa llamado xyzzy (que puede o no haber escrito), y
está buscando vulnerabilidades de seguridad (para que pueda solucionarlas antes que los clientes
encontrar las vulnerabilidades). Para este tutorial, asumiré que estás usando un Unix-
como un sistema, como Linux, OpenBSD o MacOS X.

Si el código fuente está en un subdirectorio llamado xyzzy, probablemente comenzaría abriendo un
ventana de texto y usando la configuración predeterminada de Flawfinder, para analizar el programa e informar un
lista priorizada de posibles vulnerabilidades de seguridad (el `` menos '' solo asegura que el
los resultados permanecen en la pantalla):
flawfinder xyzzy | menos

En este punto, verá una gran cantidad de entradas. Cada entrada tiene un nombre de archivo, un
dos puntos, un número de línea, un nivel de riesgo entre paréntesis (donde 5 es el más riesgoso), una categoría,
el nombre de la función y una descripción de por qué flawfinder piensa que la línea es una
vulnerabilidad. Flawfinder normalmente clasifica por nivel de riesgo, mostrando primero los elementos más riesgosos;
Si dispone de tiempo limitado, probablemente sea mejor empezar a trabajar en los elementos más riesgosos y
continúe hasta que se acabe el tiempo. Si desea limitar la visualización a los riesgos con solo un
cierto nivel de riesgo o superior, utilice la opción --minlevel. Si esta recibiendo un
número extraordinario de falsos positivos porque los nombres de las variables parecen peligrosos
nombres de funciones, use la opción -F para eliminar informes sobre ellos. Si no entiendes
el mensaje de error, consulte documentos como el Escribiendo Seguro Programas para Linux y
Unix HOWTOhttp://www.dwheeler.com/secure-programs⟩ a http://www.dwheeler.com/secure-
programas que proporciona más información sobre cómo escribir programas seguros.

Una vez que identifique el problema y lo comprenda, podrá solucionarlo. Ocasionalmente puedes
desea volver a hacer el análisis, tanto porque los números de línea cambiarán y asegurarse
que el nuevo código aún no presenta una vulnerabilidad diferente.

Si ha determinado que alguna línea no es realmente un problema y está seguro de ello, puede
inserte justo antes o en la línea ofensiva un comentario como
/ * Flawfinder: ignorar * /
para evitar que aparezcan en la salida.

Una vez que haya hecho eso, debe volver atrás y buscar las entradas del programa, para hacer
asegúrese de que el programa filtre fuertemente cualquiera de sus entradas no confiables. Flawfinder puede
identifique muchas entradas del programa usando la opción --inputs, como esta:
flawfinder --entradas xyzzy

Flawfinder puede integrarse bien con editores de texto y entornos de desarrollo integrados;
consulte los ejemplos para obtener más información.

Flawfinder incluye muchas otras opciones, incluidas algunas para crear versiones HTML del
salida (útil para pantallas más bonitas). La siguiente sección describe esas opciones en más
detalle.

CAMPUS


Flawfinder tiene una serie de opciones, que se pueden agrupar en opciones que controlan sus propias
documentación, seleccionar datos de entrada, seleccionar qué resultados mostrar, seleccionar el formato de salida,
y realizar la gestión de listas de resultados. Flawfinder admite la sintaxis estándar definida en el
POSIX (número 7, edición 2013) sección `` Convenciones de utilidades ''. También es compatible con GNU
opciones largas (opciones de forma de doble guión -opción) como se define en el GNU C Biblioteca
Referencia Manual `` Convenciones de sintaxis de argumentos de programa '' y GNU Codificación Estándares
`` Estándares para interfaces de línea de comandos ''. Los argumentos de opciones largos se pueden proporcionar como
`` --nombre = valor '' o `` -nombre valor ''. Solo se puede acceder a algunas opciones utilizando la opción más
convenciones de opciones largas de GNU legibles; Las opciones comunes también son compatibles con las
Convención de opción de una sola letra.

Documentación
--ayuda

-h Muestra información de uso (ayuda).

--versión Muestra (solo) el número de versión y sale.

--listrules Enumere los términos (tokens) que desencadenan un examen más detallado, su riesgo de incumplimiento
nivel y la advertencia predeterminada (incluidos los identificadores CWE, si
aplicable), todos separados por tabuladores. Los términos son principalmente nombres de
funciones peligrosas. Tenga en cuenta que el nivel de riesgo informado y la advertencia para algunos
El código específico puede ser diferente al predeterminado, dependiendo de cómo se use el término.
usó. Combine con -D si no desea el encabezado habitual. Flawfinder
la versión 1.29 cambió el separador de espacios a pestañas y agregó el valor predeterminado
campo de advertencia.

Seleccionar Entrada Datos
--permitir enlace Permitir el uso de enlaces simbólicos; normalmente se omiten los enlaces simbólicos. No
use esta opción si está analizando código por otros; los atacantes podrían hacer muchos
cosas que pueden causar problemas para un análisis con esta opción habilitada. Para
Por ejemplo, un atacante podría insertar enlaces simbólicos a archivos como / Etc / passwd
(filtrar información sobre el archivo) o crear un bucle circular, que
hacer que flawfinder se ejecute `` para siempre ''. Otro problema al habilitar esto
La opción es que si se hace referencia al mismo archivo varias veces usando simbólicos
enlaces, se analizará varias veces (y, por lo tanto, se informará varias veces).
Tenga en cuenta que flawfinder ya incluye cierta protección contra enlaces simbólicos
a tipos de archivos especiales, como tipos de archivos de dispositivo (por ejemplo, / dev / zero o
C: \ mystuff \ com1). Tenga en cuenta que para flawfinder versión 1.01 y anteriores, esto fue
el valor por defecto.

--followdotdir
Ingrese directorios cuyos nombres comiencen con ".". Normalmente, estos directorios son
ignorados, ya que normalmente incluyen datos privados de control de versiones (como
.git / o .svn /), configuraciones, etc.

--No hay enlace Ignorado. Históricamente esto inhabilitó los siguientes enlaces simbólicos; este comportamiento
ahora es el predeterminado.

--patch =archivo de parche

-P archivo de parche
Examine los archivos o directorios seleccionados, pero solo informe los resultados en las líneas que
son agregados o modificados por el archivo de parche dado. El archivo de parche debe estar en un
formato diff unificado reconocido (por ejemplo, la salida de GNU "diff -u old new",
"svn diff" o "git diff [commit]"). Flawfinder asume que el parche tiene
ya se ha aplicado a los archivos. El archivo de parche también puede incluir cambios en
archivos irrelevantes (simplemente se ignorarán). Los números de línea dados en el
archivo de parche se utilizan para determinar qué líneas se cambiaron, por lo que si tiene
modificó los archivos desde que se creó el archivo de parche, vuelva a generar el archivo de parche
primero. Tenga en cuenta que los nombres de archivo de los nuevos archivos proporcionados en el archivo de parche
debe coincidir exactamente, incluidas mayúsculas / minúsculas, prefijo de ruta y directorio
separador (\ vs. /). Solo se acepta el formato diff unificado (GNU diff, svn
diff, y la salida de git diff está bien); si tienes un formato diferente, de nuevo
regenerarlo primero. Solo los aciertos que ocurren en las líneas cambiadas resultantes, o
inmediatamente por encima y por debajo de ellos. Esta opción implica
--nunca ignores.

Seleccionar Golpes a Pantalla
--entradas

-I Muestra solo funciones que obtienen datos desde fuera del programa; esto también establece
minlevel a 0.

--minlevel =X

-m X Establezca el nivel de riesgo mínimo en X para incluirlo en la lista de aciertos. Esto puede ser de 0 (`` no
riesgo '') a 5 (`` riesgo máximo ''); el valor predeterminado es 1.

--falso positivo

-F No incluya resultados que puedan ser falsos positivos. Actualmente, esto significa
que los nombres de las funciones se ignoran si no van seguidos de "(", y que
no se anotan las declaraciones de matrices de caracteres. Por lo tanto, si ha utilizado una variable
llamado "acceso" en todas partes, esto eliminará las referencias a este ordinario
variable. Este no es el valor predeterminado, porque también aumenta la probabilidad de
perder golpes importantes; en particular, nombres de funciones en #define cláusulas y llamadas
a través de punteros de función se perderán.

--nunca ignorar

-n Nunca ignore los problemas de seguridad, incluso si tienen una directiva de `` ignorar '' en un
comentario.

--regexp =PATRÓN

-e PATRÓN
Informe únicamente los resultados con texto que coincida con el patrón de expresión regular PATTERN.
Por ejemplo, para informar solo los resultados que contienen el texto "CWE-120", utilice "--regex"
CWE-120 ''. Estos nombres de banderas de opciones son los mismos que los de grep.

Seleccionar Salida Formato
--columnas

-C Muestre el número de columna (así como el nombre del archivo y el número de línea) de cada visita;
esto se muestra después del número de línea agregando dos puntos y el número de columna en
la línea (el primer carácter de una línea es la columna número 1). Esto es útil
para editores que pueden saltar a columnas específicas o para integrarse con otros
herramientas (como las que filtran aún más los falsos positivos).

--contexto

-c Muestre el contexto, es decir, la línea que tiene el "acierto" / defecto potencial. Por defecto el
La línea se muestra inmediatamente después de la advertencia.

--solo datos

-D No muestre el encabezado y pie de página. Use esto junto con --quiet para ver solo
los datos en sí.

--html

-H Formatee la salida como HTML en lugar de como texto simple.

--inmediato

-i Muestra los hits de inmediato (no esperes hasta el final).

--linea sola

-S Mostrar como una sola línea de salida de texto para cada visita. Útil para interactuar
con herramientas de compilación.

--omitir tiempo Omita la información de tiempo. Esto es útil para pruebas de regresión de flawfinder
en sí mismo, de modo que el resultado no varíe según la duración del análisis
toma.

--tranquilo

-Q No muestre información de estado (es decir, qué archivos se están examinando) mientras
el análisis continúa.

Lista de aciertos Administración
--savehitlist =F
Guarde todos los resultados obtenidos (la "lista de resultados") en F.

--loadhitlist =F
Cargue la lista de resultados desde F en lugar de analizar los programas fuente. Advertencia: hacer no
cargar listas de resultados de fuentes no confiables (por razones de seguridad).

--diffhitlist =F
Mostrar solo los hits (cargados o analizados) que no están en F. Se presume que F se creó
anteriormente usando --savehitlist. Advertencia: hacer no diff listas de resultados de no confiables
fuentes (por razones de seguridad). Si no se proporciona la opción --loadhitlist,
esto mostrará los resultados en los archivos de código fuente analizados que no fueron
almacenado previamente en F. Si se usa junto con --loadhitlist, esto mostrará el
aciertos en la lista de aciertos cargada no en F. El algoritmo de diferencia es
conservador; Los hits solo se consideran `` iguales '' si tienen el mismo
nombre de archivo, número de línea, posición de la columna, nombre de la función y nivel de riesgo.

EJEMPLOS


Aquí hay varios ejemplos de cómo invocar flawfinder. Los primeros ejemplos muestran varios
opciones simples de línea de comandos. Flawfinder está diseñado para funcionar bien con editores de texto y
entornos de desarrollo integrados, por lo que las siguientes secciones muestran cómo integrar flawfinder
en vim y emacs.

sencillos De línea de comandos opciones
buscador de fallas /usr/src/linux-3.16
Examine todos los archivos C / C ++ en el directorio /usr/src/linux-3.16 y todos sus
subdirectorios (recursivamente), informando sobre todos los resultados encontrados. Por defecto
flawfinder omitirá enlaces simbólicos y directorios con nombres que comiencen con
un período.

buscador de fallas --minlevel = 4 .
Examine todos los archivos C / C ++ en el directorio actual y sus subdirectorios
(recursivamente); solo informan vulnerabilidades de nivel 4 y superiores (las dos más altas
niveles de riesgo).

buscador de fallas --entradas midir
Examine todos los archivos C / C ++ en mydir y sus subdirectorios (recursivamente), y
informe de funciones que toman entradas (para que pueda asegurarse de que filtran el
entradas apropiadamente).

buscador de fallas --nunca ignorar midir
Examine todos los archivos C / C ++ en el directorio mydir y sus subdirectorios,
incluyendo incluso los hits marcados para ignorar en los comentarios del código.

buscador de fallas -QD midir
Examine mydir e informe solo los resultados reales (eliminando el encabezado y
pie de página de la salida). Este formulario es útil si la salida se canalizará a
otras herramientas para un análisis más detallado. La -C (--columnas) y -S (--una línea)
Las opciones también pueden ser útiles si está canalizando los datos a otras herramientas.

buscador de fallas -QDSC midir
Examine mydir, informando solo los resultados reales (sin encabezado ni pie de página). Cada
el hit se informa en una línea y los números de columna. Esto puede ser un
comando útil si está alimentando la salida de Flawfinder a otras herramientas.

buscador de fallas --tranquilo --html --contexto midir > resultados.html
Examine todos los archivos C / C ++ en el directorio mydir y sus subdirectorios, y
producir una versión en formato HTML de los resultados. Gestión de código fuente
Los sistemas (como SourceForge y Savannah) pueden usar un comando como este.

buscador de fallas --tranquilo --guardar lista de resultados hits guardados *. [ch]
Examine todos los archivos .cy .h en el directorio actual. No informe sobre el
estado de procesamiento, y guarde la lista de resultados resultante (el conjunto de todos los resultados) en
el archivo guardado.

buscador de fallas --lista difícil hits guardados *. [ch]
Examine todos los archivos .cy .h en el directorio actual y muestre los resultados que
aún no estaban en el archivo Saved.hits. Esto se puede utilizar para mostrar solo el
`` nuevas '' vulnerabilidades en un programa modificado, si se guardó. Hits se creó a partir de
la versión anterior del programa que se está analizando.

buscador de fallas --parche reciente.parche .
Examine el directorio actual de forma recursiva, pero solo informe las líneas que fueron
cambiado o agregado en el archivo de parche ya aplicado llamado reciente.parche.

buscador de fallas --expresión regular "CWE-120 | CWE-126" src /
Examinar directorio src de forma recursiva, pero solo informa los resultados en los que CWE-120 o
Se aplica CWE-126.

Invocando en empuje
El editor de texto vim incluye un mecanismo de "corrección rápida" que funciona bien con flawfinder, por lo que
que puede ver fácilmente los mensajes de advertencia y saltar al código fuente relevante.

Primero, debe invocar flawfinder para crear una lista de resultados, y hay dos formas de
hacer esto. La primera forma es iniciar flawfinder primero y luego (usando su salida) invocar
empuje. La segunda forma es iniciar (o continuar ejecutando) vim y luego invocar flawfinder
(normalmente desde el interior de vim).

Para la primera forma, ejecute flawfinder y almacene su salida en algún FLAWFILE (diga "flawfile"),
luego invoque vim usando su opción -q, así: "vim -q flawfile". La segunda forma
(iniciar el buscador de fallas después de iniciar vim) se puede hacer de muchas maneras. Uno es invocar
flawfinder usando un comando de shell, ":! flawfinder-command> FLAWFILE", luego sigue eso con
el comando ": cf FLAWFILE". Otra forma es almacenar el comando flawfinder en su
makefile (como, por ejemplo, un pseudocomando como "flaw"), y luego ejecute ": make flaw".

En todos estos casos, necesita un comando para que se ejecute flawfinder. Un comando plausible, que
coloca cada hit en su propia línea (-S) y elimina los encabezados y pies de página que confundirían
está:

buscador de fallas -SQD .

Ahora puede utilizar varios comandos de edición para ver los resultados. Aparece el comando ": cn"
el próximo golpe; ": cN" muestra el hit anterior y ": cr" retrocede hasta el primer hit.
": copen" abrirá una ventana para mostrar la lista actual de resultados, llamada "corrección rápida
ventana ";": cclose "cerrará la ventana de corrección rápida. Si el búfer en la ventana usada tiene
cambiado, y el error está en otro archivo, el salto al error fallará. Tienes que
asegúrese de que la ventana contenga un búfer que pueda abandonarse antes de intentar saltar a un
nuevo archivo, digamos guardando el archivo; esto evita la pérdida accidental de datos.

Invocando en emacs
El editor de texto / sistema operativo emacs incluye "modo grep" y "modo de compilación"
mecanismos que funcionan bien con flawfinder, lo que facilita ver mensajes de advertencia, saltar
al código fuente relevante y solucione cualquier problema que encuentre.

Primero, debe invocar flawfinder para crear una lista de mensajes de advertencia. Puedes usar
"modo grep" o "modo de compilación" para crear esta lista. A menudo, el "modo grep" es más conveniente;
deja el modo de compilación intacto para que pueda volver a compilar fácilmente una vez que haya cambiado
alguna cosa. Sin embargo, si desea saltar a la posición exacta de la columna de un hit, compile
El modo puede ser más conveniente porque emacs puede usar la salida de columna de flawfinder para
salte directamente a la ubicación correcta sin ninguna configuración especial.

Para usar el modo grep, ingrese el comando "Mx grep" y luego ingrese el buscador de fallas necesario
mando. Para usar el modo de compilación, ingrese el comando "Mx compile" e ingrese el
comando flawfinder. Este es un comando de meta-clave, por lo que deberá usar la meta clave para
su teclado (esta suele ser la tecla ESC). Como con todos los comandos emacs, necesitará
presione RETORNO después de escribir "grep" o "compilar". Entonces, en muchos sistemas, el modo grep es
se invoca escribiendo ESC xgrep RETURN.

Luego debe ingresar un comando, eliminando lo que estaba allí antes si es necesario. A
comando plausible es:

buscador de fallas -SQDC .

Este comando hace que cada informe de aciertos sea una sola línea, lo que es mucho más fácil para las herramientas de
resolver. Las opciones de silencio y solo datos eliminan la otra información de estado que no es necesaria para
usar dentro de emacs. El período final significa que el directorio actual y todos
los descendientes se buscan en código C / C ++ y se analizan en busca de fallas.

Una vez que haya invocado flawfinder, puede usar emacs para saltar en sus resultados. los
comando Cx `(Control-x backtick) visita la ubicación del código fuente para la siguiente advertencia
mensaje. Cu Cx `(control-u control-x retroceso) se reinicia desde el principio. Usted puede
visite la fuente de cualquier mensaje de error en particular moviéndose a ese mensaje de visita en el
* compilación * búfer o * grep * búfer y tecleando la tecla de retorno. (Nota técnica: en el
búfer de compilación, esto invoca compile-goto-error.) También puede hacer clic en Mouse-2
en el mensaje de error (no es necesario cambiar primero al búfer de * compilación *).

Si desea usar el modo grep para saltar a columnas específicas de un hit, necesitará
especialmente configure emacs para hacer esto. Para hacer esto, modifique la variable emacs "grep-regexp-
alist ". Esta variable le dice a Emacs cómo analizar la salida de un comando" grep ", similar al
variable "compilation-error-regexp-alist" que enumera varios formatos de error de compilación
mensajes.

Invocando en Integrate Desarrollo Entornos (IDE)
Para (otros) IDE, consulte el conjunto de complementos de su IDE.

COMÚN DEBILIDAD ENUMERACIÓN (CW)


Common Weakness Enumeration (CWE) es `` una lista formal o diccionario de software común
debilidades que pueden ocurrir en la arquitectura, el diseño, el código o la implementación del software que
puede conducir a vulnerabilidades de seguridad explotables ... creado para servir como un lenguaje común
para describir las debilidades de seguridad del software '' (http://cwe.mitre.org/about/faq.html). por
más información sobre CWE, consulte http://cwe.mitre.org.

Flawfinder es compatible con CWE y es oficialmente compatible con CWE. Normalmente, las descripciones de los aciertos
incluir un identificador de Enumeración de debilidad común (CWE) relevante entre paréntesis donde haya
se sabe que es un CWE relevante. Por ejemplo, muchos de los hits relacionados con el búfer mencionan
CWE-120, el identificador CWE para `` copia en búfer sin verificar el tamaño de la entrada '' (también conocido como
`` Desbordamiento de búfer clásico ''). En algunos casos, puede aparecer más de un identificador CWE.
El informe HTML también incluye enlaces de hipertexto a las definiciones de CWE alojadas en MITRE. En
De esta manera, Flawfinder está diseñado para cumplir con el requisito de salida CWE.

Muchas de las CWE reportadas por flawfinder están identificadas en la lista de los 25 principales CWE / SANS 2011
(http://cwe.mitre.org/top25/). Mucha gente querrá buscar CWE en esta lista,
como CWE-120 (desbordamiento de búfer clásico), cuando flawfinder se asigna a un CWE que es más
general que uno de los 25 elementos principales, lo enumera como más general: más específico (p. ej.,
CWE-119: CWE-120), donde más general es el mapeo real. Si Flawfinder se asigna a un más
artículo específico de CWE que es un caso específico de un artículo de los 25 principales, se enumera en el formulario
top-25 / más específico (por ejemplo, CWE-362 / CWE-367), donde el mapeo real es el más específico
Entrada CWE. Si la misma entrada se asigna a varios CWE, los CWE están separados por comas
(esto ocurre a menudo con CWE-20, Validación de entrada incorrecta). Esto simplifica la búsqueda de
ciertos CWE.

Para el mapeo se utilizó la versión 2.7 de CWE (publicada el 23 de junio de 2014). El CWE actual
Las asignaciones seleccionan el CWE más específico que la herramienta puede determinar. En teoría, la mayoría de CWE
elementos de seguridad (firmas / patrones que la herramienta busca) podrían teóricamente ser
mapeado a CWE-676 (Uso de función potencialmente peligrosa), pero tal mapeo no sería
útil. Por lo tanto, se prefirieron mapeos más específicos donde se pudiera encontrar uno. Flawfinder
es una herramienta de análisis léxico; como resultado, es impráctico que sea más específico que
las asignaciones actualmente implementadas. Esto también significa que es poco probable que necesite mucho
actualización de la moneda del mapa; simplemente no tiene suficiente información para refinar a un
nivel de CWE detallado al que normalmente afectarían los cambios de CWE. La lista de identificadores CWE
se generó automáticamente usando "make show-cwes", por lo que hay confianza en que esta lista
es correcto. Informe los problemas de mapeo de CWE como errores si encuentra alguno.

Flawfinder puede no encontrar una vulnerabilidad, incluso si flawfinder cubre uno de estos CWE
debilidades. Dicho esto, flawfinder encuentra vulnerabilidades enumeradas por los CWE que cubre,
y no informará líneas sin esas vulnerabilidades en muchos casos. Así, como
requerido para cualquier herramienta que pretenda ser compatible con CWE, flawfinder tiene una tasa de falsos
positivos menos del 100% y una tasa de falsos negativos menos del 100%. Flawfinder casi
siempre informa cada vez que encuentra una coincidencia con un elemento de seguridad CWE (una firma / patrón como
definido en su base de datos), aunque ciertas construcciones oscuras pueden hacer que falle (ver FALLOS
abajo).

Flawfinder puede informar sobre los siguientes CWE (estos son los CWE que cubre flawfinder;
`` * '' marca a aquellos en la lista de los 25 principales de CWE / SANS):

· CWE-20: Validación de entrada incorrecta

· CWE-22: Limitación incorrecta de un nombre de ruta a un directorio restringido (`` Ruta transversal '')

· CWE-78: neutralización inadecuada de elementos especiales utilizados en un comando del sistema operativo (`` comando del sistema operativo
Inyección'')*

· CWE-119: Restricción inadecuada de operaciones dentro de los límites de un búfer de memoria (a
padre de CWE-120 *, por lo que se muestra como CWE-119: CWE-120)

· CWE-120: Copia de búfer sin verificar el tamaño de la entrada (`` Desbordamiento de búfer clásico '') *

· CWE-126: Búfer sobreleído

· CWE-134: Cadena de formato no controlada *

· CWE-190: Desbordamiento de enteros o envolvente *

· CWE-250: Ejecución con privilegios innecesarios

· CWE-327: Uso de un algoritmo criptográfico roto o arriesgado *

· CWE-362: Ejecución concurrente usando recursos compartidos con sincronización incorrecta
(`` Condición de carrera '')

· CWE-377: Archivo temporal inseguro

· CWE-676: Uso de función potencialmente peligrosa *

· CWE-732: Asignación de permisos incorrecta para recursos críticos *

· CWE-785: Uso de la función de manipulación de ruta sin búfer de tamaño máximo (hijo de
CWE-120 *, por lo que se muestra como CWE-120 / CWE-785)

· CWE-807: Dependencia de entradas no confiables en una decisión de seguridad *

· CWE-829: Inclusión de funcionalidad de una esfera de control que no es de confianza *

Puede seleccionar un subconjunto específico de CWE para informar usando la opción `` --regex '' (-e).
Esta opción acepta una expresión regular, por lo que puede seleccionar varios CWE, por ejemplo, `` --regex
"CWE-120 | CWE-126" ''. Si selecciona varios CWE con `` | '' en una línea de comando,
normalmente es necesario citar los parámetros (ya que un `` | '' sin comillas es el símbolo de la tubería).
Flawfinder está diseñado para cumplir con el requisito de búsqueda de CWE.

Si su objetivo es informar un subconjunto de CWE que se enumeran en un archivo, eso se puede lograr
en un sistema similar a Unix usando la opción `` --regex '' también conocida como `` -e ''. El archivo debe estar en
formato de expresión regular. Por ejemplo, `` flawfinder -e $ (cat file1) '' solo informaría
hits que coincidieron con el patrón en `` file1 ''. Si el archivo1 contenía `` CWE-120 | CWE-126 '',
solo informaría los hits que coincidan con esos CWE.

Una lista de todos los elementos de seguridad de CWE (las firmas / patrones que busca Flawfinder)
se puede encontrar usando la opción `` --listrules ''. Cada línea enumera el token de firma
(normalmente un nombre de función) que puede dar lugar a un acierto, el nivel de riesgo predeterminado y el
advertencia predeterminada (que incluye el identificador CWE predeterminado). Para la mayoría de los propósitos, esto es
También es suficiente si desea ver qué elementos de seguridad de CWE se asignan a qué CWE, o el
marcha atrás. Por ejemplo, para ver la mayoría de las firmas (nombres de funciones) que se asignan a
CWE-327, sin ver el nivel de riesgo predeterminado o el texto de advertencia detallado, ejecute `` flawfinder
--listrules | grep CWE-327 | cortar -f1 ''. También puede ver los tokens sin un mapeo CWE
de esta manera ejecutando `` flawfinder -D --listrules | grep -v CWE- ''. Sin embargo, mientras
--listrules enumera todos los elementos de seguridad de CWE, solo enumera las asignaciones predeterminadas de CWE
elementos de seguridad a identificadores CWE. No incluye los refinamientos que Flawfinder
se aplica (por ejemplo, examinando los parámetros de la función).

Si desea un mapeo detallado y exacto entre los elementos de seguridad de CWE y CWE
identificadores, el código fuente de Flawfinder (incluido en la distribución) es el mejor lugar
para esa información. Esta información detallada es principalmente de interés para aquellos pocos
personas que están tratando de refinar las asignaciones de CWE de flawfinder o refinar CWE en general.
El código fuente documenta el mapeo entre los elementos de seguridad al CWE respectivo
identificadores y es un solo archivo de Python. El conjunto de datos `` c_rules '' define la mayoría de las reglas,
con referencia a una función que puede hacer más refinamientos. Puedes buscar el
conjunto de datos para nombres de funciones para ver qué CWE genera de forma predeterminada; si el primer parámetro es
no es `` normal '', entonces ese es el nombre de un método de refinamiento de Python que puede seleccionar diferentes
CWEs (según información adicional). Por el contrario, puede buscar `` número CWE ''
y encuentre qué elementos de seguridad (firmas o patrones) se refieren a ese identificador CWE.
Para la mayoría de las personas, esto es mucho más de lo que necesitan; la mayoría de la gente solo quiere escanear sus
código fuente para encontrar problemas rápidamente.

SEGURIDAD


El objetivo de esta herramienta es ayudar a encontrar vulnerabilidades para que puedan solucionarse.
Sin embargo, los desarrolladores y revisores deben saber cómo desarrollar software seguro para usar este
herramienta, porque de lo contrario, a engañar a del IRS is aun a engañar. Mi libro en
http://www.dwheeler.com/secure-programs puede ayudar.

Esta herramienta debería ser, como máximo, una pequeña parte de un proceso de desarrollo de software más amplio.
diseñado para eliminar o reducir el impacto de las vulnerabilidades. Desarrolladores y revisores
necesitan saber cómo desarrollar software seguro, y necesitan aplicar este conocimiento para reducir
los riesgos de vulnerabilidades en primer lugar.

Las diferentes herramientas de búsqueda de vulnerabilidades tienden a encontrar diferentes vulnerabilidades. Por lo tanto, tu
es mejor utilizar la revisión humana y una variedad de herramientas. Esta herramienta puede ayudar a encontrar algunos
vulnerabilidades, pero de ninguna manera todas.

Siempre debes analizar un copia del programa fuente que se analiza, no un directorio
que puede ser modificado por un desarrollador mientras flawfinder está realizando el análisis. Este es
especialmente true si no confía necesariamente en un desarrollador del programa que se analiza.
Si un atacante tiene control sobre los archivos mientras los analiza, el atacante podría
mover archivos o cambiar su contenido para evitar la exposición de un problema de seguridad
(o crear la impresión de un problema donde no lo hay). Si estas preocupado por
programadores malintencionados, debería hacer esto de todos modos, porque después del análisis necesitará
Verifique que el código que finalmente se ejecutará sea el código que analizó. Además, no utilice el
- opción de enlace permitido en tales casos; Los atacantes podrían crear enlaces simbólicos maliciosos a archivos.
fuera de su área de código fuente (como / Etc / passwd).

Los sistemas de gestión de código fuente (como SourceForge y Savannah) definitivamente caen en esto
categoría; si mantiene uno de esos sistemas, primero copie o extraiga los archivos en
un directorio separado (que los atacantes no pueden controlar) antes de ejecutar flawfinder o
cualquier otra herramienta de análisis de código.

Tenga en cuenta que flawfinder solo abre archivos regulares, directorios y (si se solicita) simbólicos
Enlaces; nunca abrirá otros tipos de archivos, incluso si se establece un enlace simbólico a ellos.
Esto contrarresta a los atacantes que insertan tipos de archivos inusuales en el código fuente. Sin embargo, esto
sólo funciona si el sistema de archivos que se analiza no puede ser modificado por un atacante durante el
análisis, como se recomienda anteriormente. Esta protección tampoco funciona en plataformas Cygwin,
Desafortunadamente.

Los sistemas Cygwin (emulación Unix en la parte superior de Windows) tienen un problema adicional si flawfinder
se utiliza para analizar programas en los que el analista no puede confiar. El problema se debe a un diseño
falla en Windows (que hereda de MS-DOS). En Windows y MS-DOS, ciertos nombres de archivo
(por ejemplo, `` com1 '') son tratados automáticamente por el sistema operativo como los nombres de
periféricos, y esto es cierto incluso cuando se proporciona un nombre de ruta completo. Sí, Windows y MS-DOS
realmente están diseñados tan mal. Flawfinder se ocupa de esto comprobando qué sistema de archivos
object es, y luego solo abre directorios y archivos regulares (y enlaces simbólicos si están habilitados).
Desafortunadamente, esto no funciona en Cygwin; en al menos algunas versiones de Cygwin en algunos
versiones de Windows, simplemente tratar de determinar si un archivo es un tipo de dispositivo puede causar la
programa para colgar. Una solución alternativa es eliminar o cambiar el nombre de cualquier nombre de archivo que se interprete
como nombres de dispositivo antes de realizar el análisis. Estos llamados `` nombres reservados '' son
CON, PRN, AUX, CLOCK $, NUL, COM1-COM9 y LPT1-LPT9, opcionalmente seguidos de una extensión
(por ejemplo, `` com1.txt ''), en cualquier directorio y en cualquier caso (Windows no distingue entre mayúsculas y minúsculas).

Do no cargue o diferencie listas de resultados de fuentes no confiables. Se implementan utilizando el
Módulo pickle de Python, y el módulo pickle no está destinado a ser seguro contra errores
o datos construidos maliciosamente. Las listas de resultados almacenadas están destinadas a ser utilizadas posteriormente por el mismo
usuario que creó la lista de resultados; en ese contexto, esta restricción no es un problema.

Utilice flawfinder en línea utilizando los servicios de onworks.net


Servidores y estaciones de trabajo gratuitos

Descargar aplicaciones de Windows y Linux

  • 1
    Phaser
    Phaser
    Phaser es una apertura rápida, gratuita y divertida
    marco de juego HTML5 de origen que ofrece
    Representación de WebGL y Canvas en
    navegadores web de escritorio y móviles. Juegos
    puede ser co ...
    Descargar Phaser
  • 2
    Motor VASSAL
    Motor VASSAL
    VASSAL es un motor de juego para crear
    Versiones electrónicas de tablero tradicional.
    y juegos de cartas. Proporciona soporte para
    representación e interacción de las piezas del juego,
    y ...
    Descargar motor VASSAL
  • 3
    OpenPDF - Bifurcación de iText
    OpenPDF - Bifurcación de iText
    OpenPDF es una biblioteca de Java para crear
    y edición de archivos PDF con LGPL y
    Licencia MPL de código abierto. OpenPDF es el
    LGPL/MPL sucesor de código abierto de iText,
    un ...
    Descargar OpenPDF - Bifurcación de iText
  • 4
    SIG SAGA
    SIG SAGA
    SAGA - Sistema para automatizado
    Análisis geocientíficos - es un análisis geográfico
    Software del sistema de información (GIS) con
    inmensas capacidades para geodatos
    procesamiento y ana ...
    Descargar SIG SAGA
  • 5
    Caja de herramientas para Java / JTOpen
    Caja de herramientas para Java / JTOpen
    IBM Toolbox para Java / JTOpen es un
    biblioteca de clases de Java que soporta el
    programacion cliente/servidor e internet
    modelos a un sistema que ejecuta OS/400,
    i5/OS, o...
    Descargar Toolbox para Java/JTOpen
  • 6
    D3.js
    D3.js
    D3.js (o D3 para documentos basados ​​en datos)
    es una biblioteca de JavaScript que le permite
    para producir datos dinámicos e interactivos
    visualizaciones en navegadores web. con D3
    tú...
    Descargar D3.js
  • Más "

Comandos de Linux

  • 1
    arbitro
    arbitro
    abidiff - comparar ABI de archivos ELF
    abidiff compara el binario de la aplicación
    Interfaces (ABI) de dos bibliotecas compartidas
    en formato ELF. emite un significado
    informar ...
    Ejecutar abidiff
  • 2
    cumplir
    cumplir
    abidw - serializa el ABI de un ELF
    archivo abidw lee una biblioteca compartida en ELF
    formato y emite una representación XML
    de su ABI a la salida estándar. El
    emitido...
    Ejecutar abidw
  • 3
    copac2xml
    copac2xml
    bibutils - conversión de bibliografía
    utilidades...
    Ejecutar copac2xml
  • 4
    copto
    copto
    copt - optimizador de mirilla SYSNOPIS:
    archivo copt.. DESCRIPCIÓN: copt es un archivo
    optimizador de mirilla de uso general. Él
    lee el código de su entrada estándar y
    escribe un...
    Ejecutar copia
  • 5
    reunir_stx_títulos
    reunir_stx_títulos
    reunir_stx_titles - recopilar título
    declaraciones de documentos Stx ...
    Ejecute reunir_stx_títulos
  • 6
    banco-gatling
    banco-gatling
    banco - punto de referencia http ...
    Ejecutar gatling-banco
  • Más "

Ad