Python | Lucro do sistema e relatórios de conformidade via Lynis

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

Como o Lynis é flexível, ele é usado para diversas finalidades. Os casos de uso típicos do Lynis incluem:

  • Auditoria de segurança
  • Teste de conformidade (por exemplo, PCI, HIPAA, SOx)
  • Teste de penetração
  • Detecção de vulnerabilidade
  • Proteção do sistema

Proteção do sistema — ele protege seu sistema contra ameaças e vulnerabilidades em potencial. Lynis pode ser usado para gerar um relatório detalhado sobre várias ameaças e vulnerabilidades em seu sistema. O usuário ou administrador do sistema pode então tomar as medidas necessárias para proteger o sistema.

Os relatórios do Lynis são difíceis de ler e geralmente contêm muitas informações. Portanto, usamos scripts Bash e Python para analisar o relatório, extrair informações relevantes do relatório, como avisos, sugestões e salvá-los em um arquivo do Excel como um relatório.

Pré-requisitos para Lynis —

    Você deve estar executando um sistema operacional baseado em Linux/Unix, como Ubuntu, Mac OS ou qualquer outra distribuição Linux.

  • Instale o Lynis em seu sistema clonando repositório do github: https://github.com/CISOfy/lynis
  • Instale a biblioteca pandas usando o comando sudo pip3 install pandas .
  • Depois de instalar o Lynis em seu sistema, navegue até o diretório Lynis onde você encontrará um conjunto de arquivos junto com um executável chamado Lynis.
  • Use um script bash (código abaixo) para extrair informações relevantes, como o aviso e as sugestões fornecidas no relatório lynis. crie um arquivo chamado run.sh e copie, cole o código bash nesse arquivo e digite: sudo ./run.sh para executar o script bash.
  • Execute o script Python (o código é fornecido abaixo) para limpar e analisar os dados extraídos e gerar as informações relevantes como um arquivo Excel.

Abaixo estão os scripts Bash e Python —

Script Bash:


#! /bin/bash


# script para limpar / analisar o arquivo de relatório e
# extraia os detalhes relevantes e execute
# script Python para exibir detalhes no servidor.

echo "executando ......" code>

echo ""

sudo . / lynis sistema de auditoria --quick


# executa avisos. sudo ./warnings.sh

echo "Gerando avisos"

echo ""

echo "avisos são:"

echo ""


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

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


echo ""

echo "avisos gerados"

echo "arquivo de saída: warnings.txt"


sudo chmod 755 avisos .txt


# executa sugestões. sudo ./suggestions.sh

echo "Gerando sugestões"

echo ""

echo "as sugestões são:"

echo ""


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


sudo cat / var / log / lynis-report . dat | grep sugestão | sed - e "s/sugestão [] = // g" | cat > sugestões.txt


echo ""

echo "sugestões geradas"

echo "arquivo de saída: sugestões.txt"


sudo chmod 755 sugestões .txt



# executa pacotes. sudo ./packages.sh

echo "Gerando pacotes"

echo ""

echo "os pacotes são:"

echo ""


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

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


echo ""

echo "pacotes gerados"

sudo chmod 755 packages.txt



# executa shells. sudo ./shells.sh

echo "Gerando shells disponíveis"

echo ""

echo "shells são:"

echo ""


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

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


echo ""

echo "shells gerados"


echo "arquivo de saída: shells .txt"

sudo chmod 755 shells.txt

Script Python:


# bibliotecas de importação

importar pandas como pd

de pandas import ExcelWriter

import os


# função para obter dados.

def get_data ():


avisos = open ( ’ warnings.txt’ , ’r’ )

sugestões = abrir ( ’suggestions.txt’ , ’r’ )

pacotes = abrir ( ’packages.txt’ , ’ r’ )

shells = open ( ’shells.txt’ , ’ r’ )


warn_data = warnings.readlines ()

sugg_data = sugestões.readlines ()

pack_dat a = packages.read ( )

shell_data = shells.readlines ()


return warn_data, sugg_data, pack_data, shell_data



def clean_data ():


advert, sugg, pack, shell = get_data ()


warn_clean = []

for linha em avisar:

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


para i em intervalo ( len (warn_clean)):

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

# print (warn_clean [i])


sugg_clean = []

para linha em sugg :

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


para i em intervalo ( len (sugg_clean)):

sugg_clean [i] = sugg_clean [i] [: 2 ]

# print (sugg_clean [i])

pack_clean = []

pacote = pack.split ( ’|’ )

pack_clean = pack

del pack_clean [ 0 ]

shell_clean = []

para i em intervalo ( len (shell)):

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

# print (shell_clean [i])



return warn_clean, sugg_clean, pack_clean, shell_clean

def convert_to_excel ():


avisos, sugestões, pacotes, shells = clean_data ()


tente :

os.mkdir ( ’saídas’ )

exceto (Exceção):

pass

os.chdir ( ’saídas’ )


warn_packages = []

advert_te xt = []

para i em intervalo ( len (avisos)):

warn_packages.append (warnings [i] [ 0 ])


para i em intervalo ( len ( warnings)):

warn_text.append (warnings [i] [ 1 ])

print (warn_packages, warning_text)


warn = pd.DataFrame()


advertir [ ’Pacotes’ ] = warn_packages

warn [ ’warnings’ ] = warning_text


# warn.to_excel (& # 39; warnings.xlsx & # 39 ;, index = False)


writer = ExcelWriter ( ’warnings.xlsx’ )


warn.to_excel (writer, ’ report1’ , índice = False )


pasta de trabalho = writer.book

planilha = escritor. planilhas [ ’report1’ ]

# Colunas de informações da fatura

worksheet.set_column ( ’A: A’ , 15 )

# Coluna de estado

worksheet.set_column ( ’B: B’ , 45 )

# CEP

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


writer.save()


sugg_packages = []

sugg_text = []

para i em intervalo ( len (sugestões)):

sugg_packages.append (sugestões [i] [ 0 ])


para i em intervalo ( len (sugestões)): < / p>

sugg_text.append (sugestões [i] [ 1 ])


# print (sugg_packages, sugg_te xt)


sugestivo = pd.DataFrame ()

sugg [ ’Pacotes’ ] = sugg_packages

[ ’suggestions’ ] = sugg_text


writer1 = ExcelWriter ( ’suggestions.xlsx’ )


sugg.to_excel (writer1, ’report2’ , índice = False )


pasta de trabalho = writer1.book

planilha = writer1.sheets [ ’report2’ ]


# Colunas de informações da fatura

worksheet.set_column ( ’A: A’ , 25 )

# Coluna de estado

worksheet.set_column ( ’B: B’ , 120 )

# CEP

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

writer1.save()


pack_data = pd.DataFrame()

pack_data [ ’ Pacotes’ ] = pacotes

writer1 = ExcelWriter ( ’ packages.xlsx’ )


pack_data.to_excel (writer1, ’report3’ , índice = False )

pasta de trabalho = writer1.book

planilha = writer1 .sheets [ ’report2’ ]

# Colunas de informações da fatura

worksheet.set_column ( ’A: A’ , 25 )

# Coluna de estado

worksheet.set_column ( ’B: B’ , 120 )

# CEP

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

writer1.save()