Python | Systemgewinn- und Konformitätsberichte mit Lynis

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

Da Lynis flexibel ist, wird es für verschiedene Zwecke verwendet. Typische Anwendungsfälle für Lynis sind:

  • Sicherheitsaudit
  • Compliance-Tests (z. B. PCI, HIPAA, SOx)
  • Penetrationstests
  • Schwachstellenerkennung
  • Systemhärtung

Systemschutz — Es schützt Ihr System vor potenziellen Bedrohungen und Schwachstellen. Lynis kann verwendet werden, um einen detaillierten Bericht über verschiedene Bedrohungen und Schwachstellen auf Ihrem System zu erstellen. Der Benutzer oder Systemadministrator kann dann die erforderlichen Maßnahmen ergreifen, um das System zu sichern.

Lynis-Berichte sind schwer zu lesen und enthalten normalerweise viele Informationen. Daher verwenden wir Bash- und Python-Skripte, um den Bericht zu analysieren, relevante Informationen wie Warnungen und Vorschläge aus dem Bericht zu extrahieren und sie als Bericht in einer Excel-Datei zu speichern.

Voraussetzungen für Lynis —

    Sie müssen ein Linux-/Unix-basiertes Betriebssystem wie Ubuntu, Mac OS oder eine andere Linux-Distribution ausführen.

  • Installieren Sie Lynis auf Ihrem System durch Klonen Github-Repository: https://github.com/CISOfy/lynis
  • Installieren Sie die Pandas-Bibliothek mit dem Befehl sudo pip3 install pandas .
  • Nachdem Sie Lynis auf Ihrem System installiert haben, navigieren Sie zum Lynis-Verzeichnis, wo Sie eine Reihe von Dateien zusammen mit einer ausführbaren Datei namens Lynis finden.
  • Verwenden Sie ein Bash-Skript (Code unten), um relevante Informationen wie Warnungen und Vorschläge aus dem Lynis-Bericht zu extrahieren. Erstellen Sie eine Datei namens run.sh und kopieren Sie den Bash-Code in diese Datei und geben Sie Folgendes ein: sudo ./run.sh , um das Bash-Skript auszuführen.
  • Führen Sie das Python-Skript aus (der Code ist unten angegeben), um die extrahierten Daten zu bereinigen und zu parsen und die relevanten Informationen als Excel-Datei auszugeben.

Unten sind Bash- und Python-Skripte —

Script Bash:


#! / bin / bash


# Skript zum Bereinigen / Analysieren der Berichtsdatei und
# Extrahiere die relevanten Details und führe
# Python-Skript aus, um Details auf dem Server anzuzeigen.

echo "running ......"

echo ""

sudo . / lynis audit system --quick


# Warnungen ausführen. sudo ./warnings.sh

echo "Generating warnings"

echo ""

echo "warnings are:"

echo ""


sudo cat / var / log / Lynis-Bericht . dat | grep Warnung | sed - e "s / warning [] = // g"

sudo cat / var / log / Lynis-Bericht . dat | grep Warnung | sed - e "s / warning [] = // g" | cat > warnings.txt


echo ""

echo "Warnungen generiert"

echo "Ausgabedatei: warnings.txt"


sudo chmod 755 warnings .txt


# Vorschläge ausführen. sudo ./suggestions.sh

echo "Vorschläge generieren"

echo ""

echo "Vorschläge sind:"

echo ""


sudo cat / var / log / Lynis-Bericht . dat | grep Vorschlag | sed - e "s / suggestion [] = // g"


sudo cat / var /log/lynis-report . dat | grep Vorschlag | sed - e "s / suggestion [] = // g" | cat > vorschläge.txt


echo ""

echo "generierte Vorschläge"

echo "Ausgabedatei: vorschläge.txt"


sudo chmod 755 Vorschläge .txt



# Pakete ausführen. sudo ./packages.sh

echo "Pakete generieren"

echo ""

echo "Pakete sind:"

echo ""


sudo cat / var / log / Lynis-Bericht . dat | grep installed_package | sed - e "s / installed_package [] = // g"

sudo cat / var / log / Lynis-Bericht . dat | grep installed_package | sed - e "s / installed_package [] = // g" | cat > Pakete.txt


echo ""

echo "erzeugte Pakete"

sudo chmod 755 packages.txt



# Shells ausführen. sudo ./shells.sh

echo "Verfügbare Shells generieren"

echo ""

echo "Shells are:"

echo ""


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

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


echo ""

echo "Shells generiert"


echo "output file: shells .txt "

sudo chmod 755 shells.txt

Python-Skript:


# Bibliotheken importieren

import pandas as pd

from pandas import ExcelWriter

import os


# Funktion zum Abrufen von Daten.

def get_data ():


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

Vorschläge = open ( ’suggestions.txt’ , ’r’ )

Pakete = öffnen ( ’packages.txt’ , ’ r’ )

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


warn_data = warnings.readlines ()

sugg_data = vorschläge.readlines ()

pack_dat a = packages.read ( )

shell_data = shells.readlines ()


return warn_data, sugg_data, pack_data, shell_data



def clean_data ():


warn, sugg, pack, shell = get_data ()


warn_clean = []

für line in warnen:

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


für i in range ( len (warn_clean)):

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

# print (warn_clean [i])


sugg_clean = []

für line in sugg :

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


für i im Bereich ( len (sugg_clean)):

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

# print (sugg_clean [i])

pack_clean = []

pack = pack.split ( ’|’ )

pack_clean = pack

del pack_clean [ 0 ]

shell_clean = []

for i in range ( 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 ():


Warnungen, Vorschläge, Pakete , Shells = clean_data ()


try :

os.mkdir ( ’outputs’ )

außer (Ausnahme):

pass

os.chdir ( ’outputs’ )


warn_packages = []

warn_te xt = []

for i in range ( len (warnhinweise)):

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


für i in range ( len ( Warnungen)):

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

print (warn_packages, warn_text)


warn = pd.DataFrame ()


warn [ ’Pakete’ ] = warn_packages

warn [ ’warnings’ ] = warn_text


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


writer = ExcelWriter ( ’warnings.xlsx’ )


warn.to_excel (Writer, ’report1’ , index = Falsch )


workbook = writer.book

worksheet = Writer. Blätter [ ’report1’ ]

# Rechnungsinformationsspalten

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

# Statusspalte

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

# Postleitzahl

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


writer.save ()


sugg_packages = []

sugg_text = []

für i im Bereich ( len (Vorschläge)):

sugg_packages.append (Vorschläge [i] [ 0 ])


für i in range ( len (Vorschläge)): < / p>

sugg_text.append (Vorschläge [i] [ 1 ])


# print (sugg_packages, sugg_te xt)


suggestiv = pd.DataFrame ()

sugg [ ’Pakete’ ] = sugg_packages

[ ’Vorschläge’ ] = sugg_text


writer1 = ExcelWriter ( ’suggestions.xlsx’ )


sugg.to_excel (writer1, ’report2’ , index = False )


workbook = writer1.book

worksheet = writer1.sheets [ ’report2’ ]


# Rechnungsinformationsspalten

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

# Statusspalte

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

# Postleitzahl

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

writer1.save ()


pack_data = pd.DataFrame ()

pack_data [ ’Pakete’ ] = Pakete

Writer1 = ExcelWriter ( ’packages.xlsx’ )


pack_data.to_excel (writer1, ’report3’ < Codeklasse ="plain">, Index = False )

Arbeitsmappe = writer1.book

worksheet = writer1 .sheets [ ’report2’ ]

# Rechnungsinformationsspalten

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

# Statusspalte

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

# Postleitzahl

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

writer1.save()