Python | Systeemwinst- en compliancerapportage via Lynis

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

Omdat Lynis flexibel is, wordt het voor verschillende doeleinden gebruikt. Typische use-cases voor Lynis zijn onder meer:

  • Beveiligingsaudit
  • Compliance-testen (bijv. PCI, HIPAA, SOx)
  • Penetratietests
  • Kwetsbaarheidsdetectie
  • Systeemverharding

Systeembeveiliging — het beschermt uw systeem tegen mogelijke bedreigingen en kwetsbaarheden. Lynis kan worden gebruikt om een gedetailleerd rapport te genereren over verschillende bedreigingen en kwetsbaarheden op uw systeem. De gebruiker of systeembeheerder kan dan de nodige actie ondernemen om het systeem te beveiligen.

Lynis-rapporten zijn moeilijk te lezen en bevatten meestal veel informatie. Daarom gebruiken we Bash- en Python-scripts om het rapport te ontleden, relevante informatie uit het rapport te extraheren, zoals waarschuwingen en suggesties, en deze als rapport op te slaan in een Excel-bestand.

Vereisten voor Lynis —

    U moet een op Linux / Unix gebaseerd besturingssysteem gebruiken, zoals Ubuntu, Mac Os of een andere Linux-distributie.

  • Installeer Lynis op uw systeem door te klonen github-repository: https://github.com/CISOfy/lynis
  • Installeer de pandas-bibliotheek met behulp van de commando sudo pip3 install panda`s .
  • Nadat u Lynis op uw systeem hebt geïnstalleerd, navigeert u naar de Lynis-directory waar u een reeks bestanden vindt, samen met een uitvoerbaar bestand met de naam Lynis.
  • Gebruik een bash-script (code hieronder) om relevante informatie te extraheren, zoals de waarschuwing en suggesties in het lynis-rapport. maak een bestand met de naam run.sh en kopieer, plak de bash-code in dat bestand en typ: sudo ./run.sh om het bash-script uit te voeren.
  • Voer het Python-script uit (de code wordt hieronder gegeven) om de geëxtraheerde gegevens op te schonen en te ontleden en de relevante informatie uit te voeren als een Excel-bestand.

Hieronder staan Bash- en Python-scripts —

Script Bash:


#! / bin / bash


# script om het rapportbestand op te schonen / te ontleden en
# extraheer de relevante details en voer
uit # Python-script om details op de server weer te geven.

echo "running ......"

echo ""

sudo . / lynis auditsysteem --quick


# voer waarschuwingen uit. sudo ./warnings.sh

echo "Waarschuwingen genereren"

echo ""

echo "waarschuwingen zijn:"

echo ""


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

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


echo ""

echo "waarschuwingen gegenereerd"

echo "uitvoerbestand: warnings.txt"


sudo chmod 755 waarschuwingen .txt


# voer suggesties uit. sudo ./suggestions.sh

echo "Suggesties genereren"

echo ""

echo "suggesties zijn:"

echo ""


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


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


echo ""

echo "suggesties gegenereerd"

echo "uitvoerbestand: suggesties.txt"


sudo chmod 755 suggesties .txt



# voer pakketten uit. sudo ./packages.sh

echo "Pakketten genereren"

echo ""

echo "pakketten zijn:"

echo ""


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

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


echo ""

echo "pakketten gegenereerd"

sudo chmod 755 packages.txt



# shells uitvoeren. sudo ./shells.sh

echo "Beschikbare shells genereren"

echo ""

echo "shells zijn:"

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 gegenereerd"


echo "uitvoerbestand: shells .txt "

sudo chmod 755 shells.txt

Pythonscript:


# importbibliotheken

importeer panda`s als pd

van panda`s import ExcelWriter

import os


# functie om gegevens op te halen.

def get_data ():


waarschuwingen = open ( ` warnings.txt` , `r` )

suggesties = open ( `suggestions.txt` , `r` )

pakketten = open ( `packages.txt` , ` r` )

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


warn_data = warnings.readlines ()

sugg_data = suggesties.readlines ()

pack_dat a = packages.read ( )

shell_data = shells.readlines ()


return warn_data, sugg_data, pack_data, shell_data



def clean_data ():


waarschuwen, sugg, pack, shell = get_data ()


warn_clean = []

voor regel in waarschuw:

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


voor i in bereik ( len (warn_clean)):

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

# print (warn_clean [i])


sugg_clean = []

voor regel in sugg :

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


voor i in bereik ( 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 bereik ( 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 ():


waarschuwingen, suggesties, pakketten , shells = clean_data ()


probeer :

os.mkdir ( `outputs` )

behalve (uitzondering):

pas

os.chdir ( ` outputs` )


warn_packages = []

warn_te xt = []

voor i in bereik ( len (waarschuwingen)):

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


voor i in bereik ( len ( waarschuwingen)):

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

print (warn_packages, warn_text)


waarschuwen = pd.DataFrame ()


warn [ `Pakketten` ] = warn_packages

warn [ `waarschuwingen` ] = warn_text


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


schrijver = ExcelWriter ( `warnings.xlsx` )


warn.to_excel (schrijver, ` report1` , index = False )


werkmap = writer.book

werkblad = schrijver. sheets [ `report1` ]

# Factuurinformatie kolommen

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

# Statuskolom

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

# Postcode

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


writer.save ()


sugg_packages = []

sugg_text = []

voor i in bereik ( len (suggesties)):

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


voor i in bereik ( len (suggesties)): < / p>

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


# print (sugg_packages, sugg_te xt)


suggestief = pd.DataFrame ()

sugg [ `Pakketten` ] = sugg_packages

[ `suggesties` ] = sugg_text


writer1 = ExcelWriter ( `suggestions.xlsx` )


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


werkmap = writer1.book

werkblad = writer1.sheets [ `report2` ]


# Factuurinformatie kolommen

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

# Statuskolom

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

# Postcode

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

writer1.save ()


pack_data = pd.DataFrame ()

pack_data [ ` Pakketten` ] = pakketten

writer1 = ExcelWriter ( ` packages.xlsx` )


pack_data.to_excel (writer1, `report3` , index = False )

werkmap = writer1.book

werkblad = writer1 .sheets [ `report2` ]

# Factuurinformatie kolommen

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

# Status kolom

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

# Postcode

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

writer1.save ()