Revisión del desarrollo de la golondrina del sistema de auditoría de código

Para la construcción de seguridad del Partido A, SDL es un tema inseparable, que incluye el trabajo de auditoría de código. Utilicé la búsqueda integrada del editor al principio, luego utilicé la herramienta Fortify y luego sentí que el escaneo de Fortify era demasiado lento. Audité la eficiencia y Entonces pensé en integrar Fortify en mi propio sistema empresarial.

En los últimos años, la industria de la seguridad se ha desarrollado rápidamente y hay más productos de seguridad de componentes que antes eran raros, como semgrep que puede personalizar las reglas de escaneo y productos GitHub y codeQL. Hay cada vez más herramientas. Si todavía usas Herramienta única anterior para abrir La eficiencia del modo no es demasiado alta, así que solo quiero crear un sistema de auditoría de agregación de código.

Dirección del proyecto: https://github.com/StarCrossPortal/swallow

Ideas generales de desarrollo.

Cuando necesito auditar un determinado proyecto, solo necesito almacenar la dirección del código en él, y luego el sistema descargará automáticamente el código, llamará a varias herramientas de auditoría de código para escanear y almacenará los resultados en el sistema.

Aquí está parte del contenido, la primera parte es la realización del escaneo del código subyacente, el diseño de la base de datos y la visualización de la interfaz de usuario superior.

implementación subyacente

La definición que le di a Swallow antes del desarrollo es un sistema de eficiencia, por lo que simplemente llama los resultados de otras herramientas y luego los agrega y muestra, entonces debo considerar el uso de esas herramientas.

Aquí tengo cuatro requisitos, a saber, seguimiento de contaminación, recuperación de reglas de seguridad, vulnerabilidad de dependencia de componentes y detección de WebShell.

seguimiento de contaminación

En primer lugar, hablemos del seguimiento de contaminación. Él necesita saber dónde se reciben los parámetros de mi programa y luego dónde se ejecutan. No hay muchos productos que satisfagan las necesidades. Los más conocidos son fortify y checkmax. Aquí Elijo llamar al sistema de auditoría de código Fortify.


búsqueda de reglas

Algunas vulnerabilidades relacionadas con el negocio pueden requerir escribir las reglas de inspección correspondientes, por lo que debe elegir un escáner de código que sea más fácil de personalizar las reglas. Hay dos opciones: semgrep y CodeQL. Personalmente creo que semgrep es más fácil de usar, así que elegí él


vulnerabilidad del componente

La vulnerabilidad del componente resuelve principalmente el problema de que el proyecto A depende del proyecto B y la vulnerabilidad del proyecto B. Hay muchas herramientas de este tipo en el mercado ahora y elegí Murphy.

WebShell

El análisis de webshell se utiliza principalmente para resolver la situación en la que puede haber caballos de Troya en una gran cantidad de archivos de código, utilizando la herramienta de detección de webshell hippo.

Con estas cuatro herramientas, básicamente puedo realizar una inspección relativamente completa del código, pero aún necesito ordenar la lógica de interacción general y el formato de datos de los datos. Para simplificar este proceso, utilizo directamente el sistema de diseño del Plataforma Dragonfly: de esta manera, básicamente no necesito escribir demasiado código de interacción de datos, solo visualizo arrastrar y soltar y luego prestar atención a la situación de cada nodo.

Los datos pueden utilizar directamente los componentes de la base de datos en Dragonfly Security Workbench, que satisface la adición, eliminación, modificación y consulta de datos.

Diseño de base de datos

Adopté el método más sencillo para el diseño de bases de datos. Primero, necesito una tabla para almacenar la dirección del almacén de Git, así que creé una nueva tabla. git_addAdemás, el sistema necesita cierta configuración, así que creé una nueva project_conftabla, como se muestra en la figura siguiente

Ahora necesito considerar el problema de almacenar los datos de los resultados de las cuatro herramientas, así que al principio creé cuatro nuevas tablas de datos, pero luego descubrí que cinco tablas son más adecuadas, como se muestra en la siguiente figura.

Debido al escaneo de código de Murphy, sus resultados deben ser ligeramente diferentes. Su estructura es una matriz bidimensional, lo que no favorece la recuperación de la base de datos, por lo que dividí la estructura de la tabla de Murphy en dos, por lo que hay dos estructuras de tabla.

Interfaz de usuario frontal

La interfaz de usuario originalmente quería usar el marco de interfaz de usuario de elemento, pero este proyecto solo lo desarrollé yo y el proyecto en sí es relativamente simple, por lo que es más conveniente configurar la plantilla directamente.

Entonces fue desarrollado usando bootstrap5 combinado con thinkPHP6.

El diagrama de efectos es el siguiente.

añadir almacén

No hablaré sobre el proceso de instalación, solo registraré cómo usarlo y el efecto.

Primero, debe encontrar el botón Agregar en la lista del almacén, ingresar la dirección del almacén de Git en él y luego se agregará automáticamente a la lista.

Como se muestra en la figura anterior, se pueden agregar varios almacenes a la vez, con una dirección de almacén por línea.

Ver vulnerabilidades de dependencia

Ver WebShell

Ver componentes dependientes

Autor: Tang Qingsong

Fecha: 2023-04-03

Supongo que te gusta

Origin blog.csdn.net/u013431141/article/details/129925386
Recomendado
Clasificación