Parsear logs de Fortigate en Azure Sentinel

En la siguiente entrada seguimos viendo como montar nuestro entorno de Azure Sentinel desde cero. 

En esta ocasión veremos como parsear los eventos que nos llegan desde Foritgate. 

Si observamos como nos llega los eventos de parsear nos damos cuenta que realmente los eventos importantes se almacenan dentro de las dos columnas «SyslogMessage» 

 esas columnas se pueden analizar mediante consultas KQL.

Para agregar los parsers nos tenemos que ir: Azure Sentinel > Seleccionamos nuestro workspace > Logs y ejecutamos la query:

En esta query tenemos que modificar («NOMBREFORTIGATE») y obviamente «local7» que este ultimo dato lo obtenemos de la query anterior.

Syslog
| where Computer in ("NOMBREFORTIGATE") and Facility == "local7"
| extend cat = extract(@'cat=(\S+)', 1, SyslogMessage),
src = extract(@'src=(\S+)', 1, SyslogMessage),
spt = extract(@'spt=(\S+)', 1, SyslogMessage),
deviceInboundInterface = extract(@'deviceInboundInterface=(\S+)', 1, SyslogMessage),
dst = extract(@'dst=(\S+)', 1, SyslogMessage),
dpt = extract(@'dpt=(\S+)', 1, SyslogMessage),
deviceOutboundInterface = extract(@'deviceOutboundInterface=(\S+)', 1, SyslogMessage),
externalID  = extract(@'externalID=(\S+)', 1, SyslogMessage),
proto = extract(@'proto=(\S+)', 1, SyslogMessage),
act = extract(@'act=(\S+)', 1, SyslogMessage),
sourceTranslatedAddress = extract(@'sourceTranslatedAddress=(\S+)', 1, SyslogMessage),
sourceTranslatedPort = extract(@'sourceTranslatedPort=(\S+)', 1, SyslogMessage),
app = extract(@'app=(\S+)', 1, SyslogMessage),
out = extract(@'out=(\S+)', 1, SyslogMessage),
in = extract(@'in=(\S+)', 1, SyslogMessage),
msg = extract(@'msg=(\S+)', 1, SyslogMessage),
requestCookies = extract(@'requestCookies=(\S+)', 1, SyslogMessage),
duser  = extract(@'duser=(\S+)', 1, SyslogMessage),
suser = extract(@'suser=(\S+)', 1, SyslogMessage),
outcome = extract(@'outcome=(\S+)', 1, SyslogMessage),
sourceServiceName  = extract(@'sourceServiceName=(\S+)', 1, SyslogMessage),
sproc = extract(@'sproc=(\S+)', 1, SyslogMessage),
reason = extract(@'reason=(\S+)', 1, SyslogMessage),
deviceDirection = extract(@'deviceDirection=(\S+)', 1, SyslogMessage),
fname = extract(@'fname=(\S+)', 1, SyslogMessage),
FTNTFGTref = extract(@'FTNTFGTref=(\S+)', 1, SyslogMessage),
request = extract(@'request=(\S+)', 1, SyslogMessage),
requestClientApplication = extract(@'requestClientApplication=(\S+)', 1, SyslogMessage),
dhost = extract(@'dhost=(\S+)', 1, SyslogMessage),
requestContext = extract(@'requestContext=(\S+)', 1, SyslogMessage),
FTNTFGTseverity = extract(@'FTNTFGTseverity=(\S+)', 1, SyslogMessage),
FTNTFGTsrccountry = extract(@'FTNTFGTsrccountry=(\S+)', 1, SyslogMessage),
FTNTFGTattack = extract(@'FTNTFGTattack=(\S+)', 1, SyslogMessage),
FTNTFGTattackid  = extract(@'FTNTFGTattackid=(\S+)', 1, SyslogMessage),
FTNTFGTprofile = extract(@'FTNTFGTprofile=(\S+)', 1, SyslogMessage),
FTNTFGTsender = extract(@'FTNTFGTsender=(\S+)', 1, SyslogMessage),
FTNTFGTrecipient = extract(@'FTNTFGTrecipient=(\S+)', 1, SyslogMessage),
FTNTFGTsubject = extract(@'FTNTFGTsubject=(\S+)', 1, SyslogMessage),
FTNTFGTcrlevel = extract(@'FTNTFGTcrlevel=(\S+)', 1, SyslogMessage),
FTNTFGTapprisk = extract(@'FTNTFGTapprisk=(\S+)', 1, SyslogMessage),
FTNTFGTapp = extract(@'FTNTFGTapp=(\S+)', 1, SyslogMessage),
FTNTFGTipaddr  = extract(@'FTNTFGTipaddr=(\S+)', 1, SyslogMessage),
FTNTFGTsrcmac = extract(@'FTNTFGTsrcmac=\"?([\w\:]+)\"?', 1, SyslogMessage),
FTNTFGTqname = extract(@'FTNTFGTqname=(\S+)', 1, SyslogMessage),
FTNTFGTcommand = extract(@'FTNTFGTcommand=(\S+)', 1, SyslogMessage),
FTNTFGTlogin = extract(@'FTNTFGTlogin=(\S+)', 1, SyslogMessage)

Una vez ejecutado la query presionamos sobre Save

Guardamos la query ejecutado como Funtion

Ahora si lanzamos cualquier query utilizando la función creada anteriormente podemos comprobar que ya podemos obtener con mayor facilidad los datos que se encontraban en «SyslogMessage» 

:wq!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *