elk logger alt hva nÅ? - nasjonal sikkerhetsmyndighet · 01.01.1970 · agenda sentralisert...
TRANSCRIPT
ELK LOGGER ALTHVA NÅ?
NSM NorCERT, Oslo
Håkon Brynildsen
NASJONAL SIKKERHETSMYNDIGHETSLIDE 1
AGENDASENTRALISERT LOGGING
Forstå viktighet av sentralisert logging
Rask innføring i The Elastic Stack
Erfaringer det siste året
Eksempler fra den virkelige verden
Spørsmål
NASJONAL SIKKERHETSMYNDIGHETSLIDE 2
MÅLSETTINGSENTRALISERT LOGGING
Forstå viktighet av sentralisert logging
Ha en verktøykasse for deteksjon av uønsket oppførsel
Verdi og nytte
NASJONAL SIKKERHETSMYNDIGHETSLIDE 3
SIKKERHET VS VIRKELIGHETSENTRALISERT LOGGING
Følg fornuftige sikkerhetstiltak
Hold systemene patchet
Høy sikkerhet = mindre frihet?
Du er fortsatt sårbar(!)
NASJONAL SIKKERHETSMYNDIGHETSLIDE 4
LOGGER LIGGER OVERALTHVORDAN FÅ OVERSIKT
Windows Eventviewer
Powershell
Linux syslog
Authlog
VPN logg
E-post logg
Applikasjonslogger
etc
NASJONAL SIKKERHETSMYNDIGHETSLIDE 5
BESTANDDELERELK
Elasticsearch
Logstash
Kibana
http://www.elastic.co
NASJONAL SIKKERHETSMYNDIGHETSLIDE 6
BESTANDDELERELASTIC STACK
Elasticsearch
Logstash
Kibana
Beats
http://www.elastic.co
NASJONAL SIKKERHETSMYNDIGHETSLIDE 7
BESTANDDELERELASTIC STACK
Elasticsearch
Logstash
Kibana
Beats
http://www.elastic.co
nxlog
http://nxlog-ce.sourceforge.net
NASJONAL SIKKERHETSMYNDIGHETSLIDE 8
ALTERNATIVER TIL ELASTICSENTRALISERT LOGGING
Splunk
Graylog
Arcsight
OSSIM
NASJONAL SIKKERHETSMYNDIGHETSLIDE 9
HVORFOR SENTRALISERTE LOGGER?ER DET VERDT DET?
Hvorfor ikke?
Sentralisert kontroll
Ett sted for feilsøking
Optimalisert søkemotor
Historikk
Avanserte metrics
Compliance krav og
rapportering
NASJONAL SIKKERHETSMYNDIGHETSLIDE 10
TYPISK SÅRBARHETSUTNYTTELSEFREMGANGSMÅTE
Rekognosering
Utnyttelse av svakheter
Passord cracking/gjenbruk/gjetting
Installasjon av bakdør
NASJONAL SIKKERHETSMYNDIGHETSLIDE 11
TYPISK SÅRBARHETSUTNYTTELSEAD
Påloggingsforsøk - ordinær arbeidstid?
Mange påloggingsforsøk som har feilet
Antall låste brukere
Legge til/fjerne brukere i AD
Priviligerte grupper
NASJONAL SIKKERHETSMYNDIGHETSLIDE 12
Å LESE LOGGERLINUX
Påloggingsforsøk - ordinær arbeidstid?
Mange påloggingsforsøk som har feilet
SUDO oppslag
NASJONAL SIKKERHETSMYNDIGHETSLIDE 13
SAMMENLIKNING AV HASTIGHETEVENTLOG
Eventviewer => magi
Powershell
Linux commandline
Web / API
NASJONAL SIKKERHETSMYNDIGHETSLIDE 14
SAMMENLIKNING AV HASTIGHETPOWERSHELL
Eventviewer => magi
Powershell => please wait...
Linux commandline
Web / API
NASJONAL SIKKERHETSMYNDIGHETSLIDE 15
SAMMENLIKNING AV HASTIGHETLINUX SHELL
Eventviewer => magi
Powershell => please wait...
Linux commandline => kung fu
Web / API
NASJONAL SIKKERHETSMYNDIGHETSLIDE 16
SAMMENLIKNING AV HASTIGHETWEB / API
Eventviewer => magi
Powershell => please wait...
Linux commandline => kung fu
Web / API => sikkert fin, den
NASJONAL SIKKERHETSMYNDIGHETSLIDE 17
SAMMENLIKNING AV HASTIGHETELASTIC STACK
Eventviewer => magi
Powershell => please wait...
Linux commandline => kung fu
Web / API => sikkert fin, den
Elastic Stack => :)
NASJONAL SIKKERHETSMYNDIGHETSLIDE 18
Å FINNE INNHOLDBRUKER SØK
TargetUserName: testbruker
NASJONAL SIKKERHETSMYNDIGHETSLIDE 19
Å FINNE INNHOLDENDRING AV RETTIGHETSGRUPPER
TargetUserName: testbruker
Category: Security Group
Management
NASJONAL SIKKERHETSMYNDIGHETSLIDE 20
Å FINNE INNHOLDDNS SØK
TargetUserName: testbruker
Category: Security Group
Management
DNSRecord: * AND Direction
Rcv
NASJONAL SIKKERHETSMYNDIGHETSLIDE 21
Å FINNE INNHOLDSUDO SØK
TargetUserName: testbruker
Category: Security Group
Management
DNSRecord: * AND Direction
Rcv
Category: sudo
NASJONAL SIKKERHETSMYNDIGHETSLIDE 22
Å FINNE INNHOLDE-POST LOGGER
TargetUserName: testbruker
Category: Security Group
Management
DNSRecord: * AND Direction
Rcv
Category: sudo
Mail logger
NASJONAL SIKKERHETSMYNDIGHETSLIDE 23
Å FINNE INNHOLDTO MANAGMENT WITH LOVE
TargetUserName: testbruker
Category: Security Group
Management
DNSRecord: * AND Direction
Rcv
Category: sudo
Mail logger
Ledelsesvennlig
NASJONAL SIKKERHETSMYNDIGHETSLIDE 24
Å FINNE INNHOLDØYEBLIKKSBILDE M/HISTORIKK
TargetUserName: testbruker
Category: Security Group
Management
DNSRecord: * AND Direction
Rcv
Category: sudo
Mail logger
Ledelsesvennlig
NASJONAL SIKKERHETSMYNDIGHETSLIDE 25
INSTALLASJONSENTRALISERT LOGGING
Repo for APT og YUM
http://www.elastic.co/
Oppdatering fra 1.x -> 2.x krever
noe arbeid
NASJONAL SIKKERHETSMYNDIGHETSLIDE 26
TEST AV VELLYKKET INSTALLASJONSENTRALISERT LOGGING
Test Elasticsearch fra shell• curl –XGET
'localhost:9200/_search?pretty'
• curl –XGET
'localhost:9200/_cluster/health?pretty'
Sørg for testdata• Push data inn i Elasticsearch
Åpne Kibana i nettleser• http://elk:5601/
Generer initiell index• Velg '@timestamp' i time-field name
• Trykk 'Create' for logstash-*
NASJONAL SIKKERHETSMYNDIGHETSLIDE 27
EKSEMPEL INSTALLASJONSENTRALISERT LOGGING
NASJONAL SIKKERHETSMYNDIGHETSLIDE 28
bruker@enserver $ cat /etc/rsyslog.d/10-syslog-forwarder.conf
*.* @1.2.3.4:514
# action(type="omfwd" Target="1.2.3.4" Port="514" Protocol="udp")
Kilde (Linux rsyslogd)
KONFIGURASJON LOGGKJEDESENTRALISERT LOGGING
NASJONAL SIKKERHETSMYNDIGHETSLIDE 29
[email protected] $ cat /etc/rsyslog.conf
..
$ModLoad imtcp
$UDPServerRun 514
..
Forwarder (Linux rsyslogd)
KONFIGURASJON LOGGKJEDESENTRALISERT LOGGING
NASJONAL SIKKERHETSMYNDIGHETSLIDE 30
[email protected] $ cat /etc/rsyslog.d/10-syslog-forwarder.conf
template(name="json3" type="string" string="%rawmsg:::drop-last-lf%")
if $msg contains '"OSType":"Windows"' or $msg contains '"SourceModuleName":"in_dnslog"'
or $msg contains '"SourceName":"exchange_msgtrk_log"' then {
action(type="omfwd" Target="1.2.3.4" Port="514" Protocol="udp" Template="json3")
stop
} else {
action(type="omfwd" Target="1.2.3.4" Port="514" Protocol="udp")
}
[email protected] $ cat /etc/rsyslog.conf
..
$ModLoad imtcp
$UDPServerRun 514
..
Forwarder (Linux rsyslogd)
KONFIGURASJON LOGGKJEDESENTRALISERT LOGGING
NASJONAL SIKKERHETSMYNDIGHETSLIDE 31
[email protected] $ cat /etc/rsyslog.d/10-syslog-forwarder.conf
template(name="json3" type="string" string="%rawmsg:::drop-last-lf%")
if $msg contains '"OSType":"Windows"' or $msg contains '"SourceModuleName":"in_dnslog"'
or $msg contains '"SourceName":"exchange_msgtrk_log"' then {
action(type="omfwd" Target="1.2.3.4" Port="514" Protocol="udp" Template="json3")
stop
} else {
action(type="omfwd" Target="1.2.3.4" Port="514" Protocol="udp")
}
Input
KONFIGURASJON LOGSTASHELK
NASJONAL SIKKERHETSMYNDIGHETSLIDE 32
bruker@elk $ cat /etc/logstash/conf.d/30-inputs.conf
input {
tcp {
port => 9999
host => "0.0.0.0"
type => "eventlog"
}
udp {
port => 514
host => "0.0.0.0"
}
tcp {
port => 1514
host => "0.0.0.0"
type => "syslog"
}
}NB: Å lytte til privilegerte porter ( <1024) vil kreve at logstash kjører som root.
Alternativ:
• Bruk lokal rsyslogd og videresend fra udp port 514 til en høyere port for logstash.
• Bruk Iptables: iptables –t nat –A PREROUTING –p udp –destination-port 514 –j REDIRECT –to-ports 9514
(Husk i det tilfellet på å sørge for at iptables reglene overlever reboot!)
bruker@elk $ cat /etc/logstash/conf.d/60-eventlog.conf
filter {
if [type] == "eventlog" {
json {
source => "message"
}
}
}
Filter
KONFIGURASJON LOGSTASHELK
NASJONAL SIKKERHETSMYNDIGHETSLIDE 33
bruker@elk $ cat /etc/logstash/conf.d/55-syslog.conf
filter {
if [type] == "syslog" {
grok {
source => "Grok-magic here!"
}
}
}
Output
KONFIGURASJON LOGSTASHELK
NASJONAL SIKKERHETSMYNDIGHETSLIDE 34
bruker@elk $ cat /etc/logstash/conf.d/70-outputs.conf
output {
elasticsearch {
host => localhost
protocol => http
embedded => false
}
if [type] == "eventlog" {
file {
path => "/var/log/eventlog.log"
}
}
}
bruker@elk $ cat /etc/logstash/conf.d/40-authlog.conf
filter {
if [type] == "syslog" and [message] =~ /USER\=.*\ \;\ COMMAND\=/ {
grok {
match => { "message" =>
"%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname}
%{DATA:Category}\:\s+%{DATA:TargetUserName}\ \:\ .*\;\
USER\=%{DATA:SubjectUserName} \; COMMAND=%{GREEDYDATA:Command}" }
}
}
}Oct 02 11:37:03 testmaskin.bedrift.no sudo: testbruker : TTY=pts/4 ; PWD=/etc ;
USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/auth.log
Filter (Grok - SUDO logger)
KONFIGURASJON LOGSTASHELK
NASJONAL SIKKERHETSMYNDIGHETSLIDE 35
bruker@elk $ cat /etc/logstash/conf.d/40-authlog.conf
filter {
if [type] == "syslog" and [message] =~ /USER\=.*\ \;\ COMMAND\=/ {
grok {
match => { "message" =>
"%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname}
%{DATA:Category}\:\s+%{DATA:TargetUserName}\ \:\ .*\;\
USER\=%{DATA:SubjectUserName} \; COMMAND=%{GREEDYDATA:Command}" }
}
}
}Oct 02 11:37:03 testmaskin.bedrift.no sudo: testbruker : TTY=pts/4 ; PWD=/etc ;
USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/auth.log
Filter (Grok - SUDO logger)
KONFIGURASJON LOGSTASHELK
NASJONAL SIKKERHETSMYNDIGHETSLIDE 36
INSTALLASJONSENTRALISERT LOGGING
http://nxlog-ce.sourceforge.net
Windows Core• Remote Desktop
• msiexec /i "\path\to\nxlog-2.8.1248.msi"
• Hvis ikke RDP er slått på:
NASJONAL SIKKERHETSMYNDIGHETSLIDE 37
$ Enter-PSSession <maskinnavn>
$ Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal
Server' -Name fDenyTSConnections –Value 0
$ Set-NetFirewallRule RemoteDesktop-UserMode-In-TCP –Enabled True
Powershell $ Get-Content 'C:\Program Files (x86)\nxlog\conf\nxlog.conf'
define ROOT C:\Program Files (x86)\nxlog
Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
LogFile %ROOT%\data\nxlog.log
<Input in>
Module im_msvistalog
# For windows 2003 and earlier use the following:
# Module im_mseventlog
</Input>
<Output out>
Module om_udp
Host 192.168.0.1
Port 514
</Output>
<Route 1>
Path in => out
</Route>
KONFIGURASJONNXLOG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 38
KONFIGURASJONNXLOG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 39
Flere Loggkilder på samme server
PowerShell $ Get-Content 'C:\Program Files (x86)\nxlog\conf\nxlog.conf'
.. # Default stuff
<Input in_eventlog>
..
</Input>
<Input in_dnslog>
..
</Input>
<Output out>
..
</Output>
<Route 1>
Path in_eventlog, in_dnslog => out
</Route>
KONFIGURASJONNXLOG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 40
Windows Eventlog
PowerShell $ Get-Content 'C:\Program Files (x86)\nxlog\conf\nxlog.conf'
.. # Default stuff
<Extension xm_json>
Module xm_json
</Extension>
<Input in_eventlog>
Module im_msvistalog
Exec $EventSubject = $Message;$EventSubject =~ s/\r\n.*//s;
</Input>
<Output out>
Module om_udp
Host 1.2.3.4
Port 514
Exec $OSType = "Windows";
Exec $Hostname = hostname_fqdn();
Exec to_json();
</Output>
<Route 1>
Path in_eventlog => out
</Route>
SØK I KIBANAWINDOWS SECURITY LOGG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 41
SØK I KIBANAWINDOWS SECURITY LOGG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 42
KONFIGURASJONNXLOG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 43
Windows DNS logg
PowerShell $ Get-Content 'C:\Program Files (x86)\nxlog\conf\nxlog.conf'
..
<Extension xm_json>
Module xm_json
</Extension>
<Input in_dnslog>
Module im_file
File "C:/path/to/dns.log"
InputType LineBased
Exec $Message=$raw_event;$SourceIP=$raw_event;$DNSRecord=$raw_event;
Exec $DNSRecord =~ s/^.*\]\s*//s;
Exec $DNSRecordType = $DNSRecord;$DNSRecordType =~ s/\s.*$//;
Exec $DNSRecord =~ s/^\s*\w+\s*\(\d*\)//;
Exec $DNSRecord =~ s/\(\d*\)\s*$//;$DNSRecord =~ s/\(\d*\)/./g;
Exec $SourceIP =~ s/^.*\s+Rcv\s+//;$SourceIP =~ s/\s+.*$//;
Exec $EventSubject = "DNS lookup entry";
SavePos TRUE
ReadFromLast TRUE
CloseWhenIdle TRUE
</Input>
DNS Log example: 01.01.1970 13:37:00 09A4 PACKET 000000AD0B478590 UDP Rcv 192.168.0.20 \
3654 Q [0001 D NOERROR] A (4)win8(4)ipv6(9)microsoft(3)com(0)
KONFIGURASJONNXLOG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 44
Windows DNS logg (forts)
PowerShell $ Get-Content 'C:\Program Files (x86)\nxlog\conf\nxlog.conf'
.. # fortsetter
<Output out>
Module om_udp
Host 1.2.3.4
Port 514
Exec $OSType = "Windows";
Exec $Hostname = hostname_fqdn();
Exec to_json();
</Output>
<Route 1>
Path in_eventlog, in_dnslog => out
</Route>
SØK I KIBANADNS LOGG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 45
DNS Log example: 01.01.1970 13:37:00 09A4 PACKET 000000AD0B478590 UDP Rcv 192.168.0.20 \
3654 Q [0001 D NOERROR] A (4)win8(4)ipv6(9)microsoft(3)com(0)
KONFIGURASJONNXLOG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 46
Windows Exchange transaction logg
PowerShell $ Get-Content 'C:\Program Files (x86)\nxlog\conf\nxlog.conf'
..
<Extension xm_exchange>
Module xm_csv
Fields $date-time,$client-ip,$client-hostname,$server-
ip,$server-hostname,$source-context,$connector-id,$source,$event-id,$internal-
message-id,$message-id,$recipient-address,$recipient-status,$total-
bytes,$recipient-count,$related-recipient-address,$reference,$message-
subject,$sender-address,$return-path,$message-info,$directionality,$tenant-
id,$original-client-ip,$original-server-ip,$custom-data
Delimiter ','
</Extension>
<Input in_exchange>
Module im_file
File 'C:\Program Files\Microsoft\Exchange
Server\V14\TransportRoles\Logs\MessageTracking\MSGTRK????????-*.LOG'
SavePos TRUE
Exec if $raw_event =~ /HealthMailbox/ drop();
Exec if $raw_event =~ /^#/ drop();
Exec xm_exchange->parse_csv();
</Input>
KONFIGURASJONNXLOG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 47
Windows Exchange transaction logg
PowerShell $ Get-Content 'C:\Program Files (x86)\nxlog\conf\nxlog.conf'
..
<Extension xm_exchange>
Module xm_csv
Fields $date-time,$client-ip,$client-hostname,$server-
ip,$server-hostname,$source-context,$connector-id,$source,$event-id,$internal-
message-id,$message-id,$recipient-address,$recipient-status,$total-
bytes,$recipient-count,$related-recipient-address,$reference,$message-
subject,$sender-address,$return-path,$message-info,$directionality,$tenant-
id,$original-client-ip,$original-server-ip,$custom-data
Delimiter ','
</Extension>
<Input in_exchange>
Module im_file
File 'C:\Program Files\Microsoft\Exchange
Server\V14\TransportRoles\Logs\MessageTracking\MSGTRK????????-*.LOG'
SavePos TRUE
Exec if $raw_event =~ /HealthMailbox/ drop();
Exec if $raw_event =~ /^#/ drop();
Exec xm_exchange->parse_csv();
</Input>
Exchange Log example: 2015-09-30T23:00:22.432Z,127.0.0.1,MAILSERVERNAME,127.0.0.1,[127.0.0.1], \
12AB12AB12AB12AB;250 ok: Message 507876 accepted,mailgw,SMTP,SEND,12345, \
<12345678-1234-1234-1234-123456789abc@MAILSERVERNAME.domain.bedrift.no>, \
[email protected],250 recipient <[email protected]> ok,1234,1,,, \
Password expires in 8 days,[email protected],[email protected],2015-09-
30T23:00:21.247Z; \
SRV=MAILSERVERNAME.domain.bedrift.no:TOTAL=1|SMR=1,Incoming,,,,
KONFIGURASJONNXLOG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 48
Windows Exchange transaction log (forts)
PowerShell $ Get-Content 'C:\Program Files (x86)\nxlog\conf\nxlog.conf'
.. # fortsetter
<Output out_exchange>
Module om_udp
Host 1.2.3.4
Port 514
Exec $OSType = "Windows";
Exec $Hostname = hostname_fqdn();
Exec $SourceName = 'exchange_msgtrk_log';
Exec to_json();
</Output>
<Route exchange>
Path in_exchange => out_exchange
</Route>
SØK I KIBANAEXCHANGE TRANSACTION LOGG
NASJONAL SIKKERHETSMYNDIGHETSLIDE 49
Exchange Log example: 2015-09-30T23:00:22.432Z,127.0.0.1,MAILSERVERNAME,127.0.0.1,[127.0.0.1], \
12AB12AB12AB12AB;250 ok: Message 507876 accepted,mailgw,SMTP,SEND,12345, \
<12345678-1234-1234-1234-123456789abc@MAILSERVERNAME.domain.bedrift.no>, \
[email protected],250 recipient <[email protected]> ok,1234,1,,, \
Password expires in 8 days,[email protected],[email protected],2015-09-30T23:00:21.247Z; \
SRV=MAILSERVERNAME.domain.bedrift.no:TOTAL=1|SMR=1,Incoming,,,,
Å LESE LOGGEREVENTLOG
Påloggingsforsøk utenom ordinær arbeidstid
Mange påloggingsforsøk i sekvens
Feilede påloggingsforsøk (4625)
Legge til/fjerne brukere i AD (4720)
Grupper (4728 / 4732 / 4756)
NASJONAL SIKKERHETSMYNDIGHETSLIDE 50
Å LESE LOGGERLINUX
Påloggingsforsøk utenom ordinær
arbeidstid
Mange påloggingsforsøk i sekvens
Mange påloggingsforsøk som har feilet
SUDO oppslag
NASJONAL SIKKERHETSMYNDIGHETSLIDE 51
Å LESE LOGGERDNSLOG
Zone transfer (AXTR)
Feilede DNS oppslag (NXDOMAIN)
NASJONAL SIKKERHETSMYNDIGHETSLIDE 52
Å LESE LOGGERANNET
VPN logger
Router logger
Firewall logger
DNS logger / Sone replikering
Applikasjonslogger• Webserver
• Databaseserver
• etc
NASJONAL SIKKERHETSMYNDIGHETSLIDE 53
HVOR GÅ VIDERESENTRALISERT LOGGING
Watcher• Elastic plugin (lisensiert)
Shield• Elastic plugin (lisensiert)
Beats• Elastic modul
ElastAlert• Pythonscript av Yelp (github)
NASJONAL SIKKERHETSMYNDIGHETSLIDE 54
WE LOVE LOGSTHE ELASTIC STACK
Enkelt
Gir oversikt
Loggsøking er raskt
Alt tilgjengelig i samme vindu
Platform uavhengig
NASJONAL SIKKERHETSMYNDIGHETSLIDE 55
NASJONAL SIKKERHETSMYNDIGHETSLIDE 56
Følg med på @NorCERT Twitter