Python | Informes de cumplimiento y ganancia del sistema mediante Lynis

| | | | | | | | | | | |

Debido a que Lynis es flexible, se utiliza para varios propósitos diferentes. Los casos de uso típicos de Lynis incluyen:

  • Auditoría de seguridad
  • Pruebas de cumplimiento (por ejemplo, PCI, HIPAA, SOx)
  • Pruebas de penetración
  • Detección de vulnerabilidades
  • Fortalecimiento del sistema

Protección del sistema — protege su sistema de posibles amenazas y vulnerabilidades. Lynis se puede utilizar para generar un informe detallado sobre varias amenazas y vulnerabilidades en su sistema. El usuario o el administrador del sistema puede tomar las medidas necesarias para proteger el sistema.

Los informes de Lynis son difíciles de leer y suelen contener mucha información. Por lo tanto, usamos secuencias de comandos de Bash y Python para analizar el informe, extraer información relevante del informe, como advertencias, sugerencias, y guardarlas en un archivo de Excel como informe.

Requisitos previos para Lynis —

    Debe ejecutar un sistema operativo basado en Linux/Unix, como Ubuntu, Mac OS o cualquier otra distribución de Linux.

  • Instale Lynis en su sistema clonándolo repositorio de github: https://github.com/CISOfy/lynis
  • Instalar la biblioteca pandas usando el comando sudo pip3 install pandas .
  • Después de haber instalado Lynis en su sistema, navegue hasta el directorio de Lynis donde encontrará un conjunto de archivos junto con un ejecutable llamado Lynis.
  • Utilice un script bash (código a continuación) para extraer información relevante, como la advertencia y las sugerencias proporcionadas en el informe de lynis. cree un archivo llamado run.sh y cópielo, pegue el código bash en ese archivo y escriba: sudo ./run.sh para ejecutar el script bash.
  • Ejecute el script de Python (el código se proporciona a continuación) para limpiar y analizar los datos extraídos y generar la información relevante como un archivo de Excel.

A continuación se encuentran los scripts Bash y Python —

Script Bash:


#! / bin / bash


# script para limpiar/analizar el archivo de informe y
# extraer los detalles relevantes y ejecutar
# secuencia de comandos de Python para mostrar los detalles en el servidor.

echo "ejecutando ......"

echo ""

sudo . / lynis sistema de auditoría --quick


# ejecutar advertencias. sudo ./warnings.sh

echo "Generando advertencias"

echo ""

echo "las advertencias son:"

echo ""


sudo cat /var/log/ lynis-informe . dat | grep advertencia | sed - e "s/advertencia [] = // g"

sudo cat /var/log/ lynis-informe . dat | grep advertencia | sed - e "s/advertencia [] = // g" | cat > advertencias.txt


echo ""

echo "advertencias generadas"

echo "archivo de salida: advertencias.txt"


sudo chmod 755 advertencias .txt


# ejecutar sugerencias. sudo ./suggestions.sh

echo "Generando sugerencias"

echo ""

echo "las sugerencias son:"

echo ""


sudo cat /var/log/ lynis-informe . dat | grep sugerencia | sed - e "s/sugerencia [] = // g"


sudo cat / var /log/lynis-report . dat | grep sugerencia | sed - e "s/sugerencia [] = // g" | cat > sugerencias.txt


echo ""

echo "sugerencias generadas"

echo "archivo de salida: sugerencias.txt"


sudo chmod 755 sugerencias .txt



# ejecutar paquetes. sudo ./packages.sh

echo "Generando paquetes"

echo ""

echo "los paquetes son:"

echo ""


sudo cat /var/log/ lynis-informe . dat | grep paquete_instalado | sed - e "s/install_package [] = // g"

sudo cat /var/log/ lynis-informe . dat | grep paquete_instalado | sed - e "s/install_package [] = // g" | cat > paquetes.txt


echo ""

echo "paquetes generados"

sudo chmod 755 paquetes.txt



# ejecutar shells. sudo ./shells.sh

echo "Generando shells disponibles"

echo ""

echo "las conchas son:"

echo ""


sudo cat /var/log / lynis-report . dat | grep shell_disponible | sed - e "s / available_shell [] = // g"

sudo cat /var/log/ lynis-informe . dat | grep shell_disponible | sed - e "s / available_shell [] = // g" | cat > shells.txt


echo ""

echo "shells generados"


echo "archivo de salida: shells .txt "

sudo chmod 755 shells.txt

Script de Python:


# importar bibliotecas

importar pandas como pd

de pandas importar ExcelWriter

import os


# función para obtener datos.

def get_data():


advertencias = abrir ( ’ advertencias.txt’ , ’r’ )

sugerencias = abrir ( ’sugerencias.txt’ < clase de código = "simple">, ’r’ )

paquetes = abrir ( < clase de código = "cadena"> ’paquetes.txt’ , ’ r’ )

conchas = abrir ( ’shells.txt’ , ’ r’ )


warn_data = advertencias.readlines()

sugg_data = sugerencias.readlines ()

pack_dat a = paquetes.leer ( )

shell_data = conchas.readlines ()


return warn_data, sugg_data, pack_data, shell_data



def < /código> clean_data ():


advertir, sugerir, empaquetar, shell = get_data()


warn_clean < clase de código = "palabra clave"> = []

para en advertir:

warn_clean.append (line.split ( ’|’ ) )


para i en rango ( len (warn_clean)):

warn_clean [i] = warn_clean [i] [: 2 ]

# imprimir (warn_clean [i])


sugg_clean = []

para línea en sugerencia :

sugg_clean.append (line.split ( ’|’ ))


for i en rango ( len (sugg_clean)):

sugg_clean [i] = sugg_clean [i] [: 2 < /código> ]

# imprimir (sugg_clean [i])

pack_clean = []

paquete = pack.split ( ’|’ )

pack_clean = pack

< /código> del pack_clean [ 0 ]

shell_clean = []

para i en rango ( longitud (shell)):

shell_clean.append (shell [i] .rstrip ( ’’ ))

# imprimir (shell_clean [i])



return warn_clean, sugg_clean, pack_clean, shell_clean

def < clase de código = "simple"> convert_to_excel ():


advertencias, sugerencias, paquetes, shells = clean_data ()


probar :

os.mkdir ( ’outputs’ )

excepto (Excepción):

pasar

os.chdir ( ’outputs’ )


warn_packages = []

advertir_te xt = []

para i en rango ( len (advertencias)):

warn_packages.append (advertencias [i] [ 0 ]) < /código>


para i en rango ( len ( advertencias)):

warn_text.append (advertencias [i] [ < código clase = "valor"> 1 ])

print (warn_packages, warn_text)


advertir = pd.DataFrame()


advertir [ ’Paquetes’ ] = warn_packages

warn [ ’advertencias’ ] = warn_text


# warn.to_excel (& # 39; advertencias.xlsx & # 39 ;, índice = Falso)


escritor = ExcelWriter ( ’advertencias.xlsx’ )


warn.to_excel (escritor, ’ informe1’ , índice = Falso )


libro de trabajo = escritor.libro

hoja de trabajo = escritor. hojas [ ’informe1’ ]

# Columnas de información de la factura

hoja de trabajo.set_column ( ’A: A’ , 15 )

# Estado columna

hoja de trabajo.set_column ( ’B: B’ , 45 )

# código postal

# worksheet.set_column (& # 39; F: F & # 39;, 10)


escritor.save()


sugg_packages = []

sugg_text = []

para i en rango ( len (sugerencias)):

sugg_packages.append (sugerencias [i] [ 0 ])


para i en rango ( len (sugerencias)): < / p>

sugg_text.append (sugerencias [i] [ 1 ])


# imprimir (sugg_packages, sugg_te xt)


sugerente = pd.DataFrame ()

sugg [ ’Paquetes’ ] = sugg_packages

[ ’sugerencias’ ] < /código> = sugg_text


escritor1 = ExcelWriter ( ’sugerencias.xlsx’ )


sugg.to_excel (escritor1, ’informe2’ < /código> , índice = Falso )


libro de trabajo = escritor1.libro

hoja de trabajo = escritor1.hojas [ ’informe2’ ]


# Columnas de información de la factura

< clase de código = "simple"> hoja de trabajo.set_column ( ’A: A’ , 25 )

# Columna de estado

hoja de trabajo.set_column ( ’B: B’ , 120 )

# Código postal

# hoja de trabajo.set_column (& # 39; F: F & # 39;, 10)

escritor1.save()


pack_data = pd.DataFrame()

pack_data [ ’ Packages’ ] < /código> = paquetes

escritor1 < clase de código = "palabra clave"> = ExcelWriter ( ’ paquetes.xlsx’ )


pack_data.to_excel (writer1, ’report3’ < clase de código ="simple ">, índice = Falso )

libro de trabajo = escritor1.libro

hoja de trabajo = escritor1 .hojas [ ’informe2’ ]

# Columnas de información de la factura

hoja de trabajo.set_column ( ’A: A’ , 25 < /código> )

# Columna de estado

hoja de trabajo.set_column ( ’B: B’ , 120 )

# Código postal

# hoja de trabajo.set_column (& # 39; F: F & # 39;, 10)

escritor1.save()