Merge pull request #45 from clong/add_caldera
Adding Caldera to DetectionLab
This commit is contained in:
@@ -14,6 +14,7 @@ NOTE: This lab has not been hardened in any way and runs with default vagrant cr
|
|||||||
* Powershell transcript logging is enabled. All logs are saved to `\\wef\pslogs`
|
* Powershell transcript logging is enabled. All logs are saved to `\\wef\pslogs`
|
||||||
* osquery comes installed on each host and is pre-configured to connect to a [Fleet](https://kolide.co/fleet) server via TLS. Fleet is preconfigured with the configuration from [Palantir's osquery Configuration](https://github.com/palantir/osquery-configuration)
|
* osquery comes installed on each host and is pre-configured to connect to a [Fleet](https://kolide.co/fleet) server via TLS. Fleet is preconfigured with the configuration from [Palantir's osquery Configuration](https://github.com/palantir/osquery-configuration)
|
||||||
* Sysmon is installed and configured using SwiftOnSecurity’s open-sourced configuration
|
* Sysmon is installed and configured using SwiftOnSecurity’s open-sourced configuration
|
||||||
|
* Mitre's [Caldera](https://github.com/mitre/caldera) server is built on the logger host and the Caldera agent gets pre-installed on all Windows hosts
|
||||||
* All autostart items are logged to Windows Event Logs via [AutorunsToWinEventLog](https://github.com/palantir/windows-event-forwarding/tree/master/AutorunsToWinEventLog)
|
* All autostart items are logged to Windows Event Logs via [AutorunsToWinEventLog](https://github.com/palantir/windows-event-forwarding/tree/master/AutorunsToWinEventLog)
|
||||||
* SMBv1 Auditing is enabled
|
* SMBv1 Auditing is enabled
|
||||||
|
|
||||||
@@ -84,8 +85,9 @@ Vagrant commands must be run from the "Vagrant" folder.
|
|||||||
## Lab Information
|
## Lab Information
|
||||||
* Domain Name: windomain.local
|
* Domain Name: windomain.local
|
||||||
* Admininstrator login: vagrant:vagrant
|
* Admininstrator login: vagrant:vagrant
|
||||||
* Fleet login: admin:admin123#
|
* Fleet login: https://192.168.38.5:8412 - admin:admin123#
|
||||||
* Splunk login: admin:changeme
|
* Splunk login: https://192.168.38.5:8000 - admin:changeme
|
||||||
|
* Caldera login: https://192.168.38.5:8888 - admin:caldera
|
||||||
|
|
||||||
## Lab Hosts
|
## Lab Hosts
|
||||||
* DC - Windows 2016 Domain Controller
|
* DC - Windows 2016 Domain Controller
|
||||||
@@ -113,6 +115,7 @@ Vagrant commands must be run from the "Vagrant" folder.
|
|||||||
* Logger - Ubuntu 16.04
|
* Logger - Ubuntu 16.04
|
||||||
* Splunk Enterprise
|
* Splunk Enterprise
|
||||||
* Fleet osquery Manager
|
* Fleet osquery Manager
|
||||||
|
* Mitre's Caldera Server
|
||||||
|
|
||||||
## Splunk Indexes
|
## Splunk Indexes
|
||||||
Index Name | Description
|
Index Name | Description
|
||||||
@@ -127,6 +130,7 @@ wineventlog | Windows Event Logs
|
|||||||
* Sysmon
|
* Sysmon
|
||||||
* osquery
|
* osquery
|
||||||
* AutorunsToWinEventLog
|
* AutorunsToWinEventLog
|
||||||
|
* Caldera Agent
|
||||||
* Process Monitor
|
* Process Monitor
|
||||||
* Process Explorer
|
* Process Explorer
|
||||||
* PsExec
|
* PsExec
|
||||||
@@ -193,6 +197,7 @@ A sizable percentage of this code was borrowed and adapted from [Stefan Scherer]
|
|||||||
* [Splunk](https://www.splunk.com)
|
* [Splunk](https://www.splunk.com)
|
||||||
* [osquery](https://osquery.io)
|
* [osquery](https://osquery.io)
|
||||||
* [Fleet](https://kolide.co/fleet)
|
* [Fleet](https://kolide.co/fleet)
|
||||||
|
* [Caldera](https://github.com/mitre/caldera)
|
||||||
* [Windows Event Forwarding for Network Defense](https://medium.com/@palantir/windows-event-forwarding-for-network-defense-cb208d5ff86f)
|
* [Windows Event Forwarding for Network Defense](https://medium.com/@palantir/windows-event-forwarding-for-network-defense-cb208d5ff86f)
|
||||||
* [palantir/windows-event-forwarding](http://github.com/palantir/windows-event-forwarding)
|
* [palantir/windows-event-forwarding](http://github.com/palantir/windows-event-forwarding)
|
||||||
* [osquery Across the Enterprise](https://medium.com/@palantir/osquery-across-the-enterprise-3c3c9d13ec55)
|
* [osquery Across the Enterprise](https://medium.com/@palantir/osquery-across-the-enterprise-3c3c9d13ec55)
|
||||||
|
|||||||
3
Vagrant/Vagrantfile
vendored
3
Vagrant/Vagrantfile
vendored
@@ -46,6 +46,7 @@ Vagrant.configure("2") do |config|
|
|||||||
cfg.vm.provision "shell", path: "scripts/install-inputsconf.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-inputsconf.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-utilities.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-utilities.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-osquery.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-osquery.ps1", privileged: true
|
||||||
|
cfg.vm.provision "shell", path: "scripts/install-caldera-agent.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-sysinternals.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-sysinternals.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/configure-ou.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/configure-ou.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/configure-wef-gpo.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/configure-wef-gpo.ps1", privileged: true
|
||||||
@@ -89,6 +90,7 @@ Vagrant.configure("2") do |config|
|
|||||||
cfg.vm.provision "shell", path: "scripts/install-windows_ta.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-windows_ta.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-utilities.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-utilities.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-osquery.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-osquery.ps1", privileged: true
|
||||||
|
cfg.vm.provision "shell", path: "scripts/install-caldera-agent.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-inputsconf.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-inputsconf.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-sysinternals.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-sysinternals.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/configure-pslogstranscriptsshare.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/configure-pslogstranscriptsshare.ps1", privileged: true
|
||||||
@@ -128,6 +130,7 @@ Vagrant.configure("2") do |config|
|
|||||||
cfg.vm.provision "shell", path: "scripts/install-splunkuf.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-splunkuf.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-utilities.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-utilities.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-osquery.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-osquery.ps1", privileged: true
|
||||||
|
cfg.vm.provision "shell", path: "scripts/install-caldera-agent.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-inputsconf.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-inputsconf.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-sysinternals.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-sysinternals.ps1", privileged: true
|
||||||
cfg.vm.provision "shell", path: "scripts/install-autorunstowineventlog.ps1", privileged: true
|
cfg.vm.provision "shell", path: "scripts/install-autorunstowineventlog.ps1", privileged: true
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
#! /bin/bash
|
#! /bin/bash
|
||||||
|
|
||||||
|
# Install key and apt source for MongoDB
|
||||||
|
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
|
||||||
|
echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
|
||||||
|
|
||||||
# Install prerequisites and useful tools
|
# Install prerequisites and useful tools
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get install -y jq whois build-essential git docker docker-compose unzip
|
apt-get install -y jq whois build-essential git docker docker-compose unzip python3-dev python3-pip mongodb-org
|
||||||
|
|
||||||
# Install Golang v1.8
|
# Install Golang v1.8
|
||||||
wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz
|
wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz
|
||||||
@@ -111,3 +115,27 @@ curl 'https://192.168.38.5:8412/api/v1/kolide/packs/5' -X PATCH -H 'origin: http
|
|||||||
# Add Splunk monitors for Fleet
|
# Add Splunk monitors for Fleet
|
||||||
/opt/splunk/bin/splunk add monitor "/home/vagrant/kolide-quickstart/osquery_result" -index osquery -sourcetype 'osquery:json' -auth 'admin:changeme'
|
/opt/splunk/bin/splunk add monitor "/home/vagrant/kolide-quickstart/osquery_result" -index osquery -sourcetype 'osquery:json' -auth 'admin:changeme'
|
||||||
/opt/splunk/bin/splunk add monitor "/home/vagrant/kolide-quickstart/osquery_status" -index osquery-status -sourcetype 'osquery:status' -auth 'admin:changeme'
|
/opt/splunk/bin/splunk add monitor "/home/vagrant/kolide-quickstart/osquery_status" -index osquery-status -sourcetype 'osquery:status' -auth 'admin:changeme'
|
||||||
|
|
||||||
|
# Install Mitre's Caldera
|
||||||
|
cd /home/vagrant
|
||||||
|
git clone https://github.com/mitre/caldera.git
|
||||||
|
cd /home/vagrant/caldera/caldera
|
||||||
|
pip3 install -r requirements.txt
|
||||||
|
pip3 install aiohttp==2.3.8 # See https://github.com/mitre/caldera/pull/13
|
||||||
|
# Patch sslproto https://github.com/mitre/caldera/issues/14#issuecomment-358190888
|
||||||
|
cd /usr/lib/python3.5/asyncio
|
||||||
|
cp /vagrant/resources/caldera/sslproto.patch .
|
||||||
|
patch < sslproto.patch
|
||||||
|
# Add a Systemd service for MongoDB
|
||||||
|
# https://www.howtoforge.com/tutorial/install-mongodb-on-ubuntu-16.04/
|
||||||
|
cp /vagrant/resources/caldera/mongod.service /lib/systemd/system/mongod.service
|
||||||
|
# Create Systemd service for Caldera
|
||||||
|
cp /vagrant/resources/caldera/caldera.service /lib/systemd/system/caldera.service
|
||||||
|
# Enable replication
|
||||||
|
echo 'replication:
|
||||||
|
replSetName: caldera' >> /etc/mongod.conf
|
||||||
|
service mongod start
|
||||||
|
cd /home/vagrant/caldera
|
||||||
|
mkdir -p dep/crater/crater
|
||||||
|
wget https://github.com/mitre/caldera-crater/releases/download/v0.1.0/CraterMainWin8up.exe -O /home/vagrant/caldera/dep/crater/crater/CraterMain.exe
|
||||||
|
service caldera start
|
||||||
|
|||||||
11
Vagrant/resources/caldera/caldera.service
Normal file
11
Vagrant/resources/caldera/caldera.service
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=My Script Service
|
||||||
|
After=multi-user.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=idle
|
||||||
|
WorkingDirectory=/home/vagrant/caldera/caldera
|
||||||
|
ExecStart=/usr/bin/python3 caldera.py
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
12
Vagrant/resources/caldera/mongod.service
Normal file
12
Vagrant/resources/caldera/mongod.service
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=High-performance, schema-free document-oriented database
|
||||||
|
After=network.target
|
||||||
|
Documentation=https://docs.mongodb.org/manual
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=mongodb
|
||||||
|
Group=mongodb
|
||||||
|
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
14
Vagrant/resources/caldera/sslproto.patch
Normal file
14
Vagrant/resources/caldera/sslproto.patch
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
--- sslproto.py 2018-01-17 08:00:50.567571454 +0000
|
||||||
|
+++ sslproto.py.new 2018-01-17 08:03:31.996275969 +0000
|
||||||
|
@@ -533,8 +533,10 @@
|
||||||
|
def _get_extra_info(self, name, default=None):
|
||||||
|
if name in self._extra:
|
||||||
|
return self._extra[name]
|
||||||
|
- else:
|
||||||
|
+ elif self._transport is not None:
|
||||||
|
return self._transport.get_extra_info(name, default)
|
||||||
|
+ else:
|
||||||
|
+ return default
|
||||||
|
|
||||||
|
def _start_shutdown(self):
|
||||||
|
if self._in_shutdown:
|
||||||
26
Vagrant/scripts/install-caldera-agent.ps1
Normal file
26
Vagrant/scripts/install-caldera-agent.ps1
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Purpose: Installs the Caldera agent on the host
|
||||||
|
|
||||||
|
# Add /etc/hosts entry
|
||||||
|
Add-Content "c:\windows\system32\drivers\etc\hosts" " 192.168.38.5 logger"
|
||||||
|
|
||||||
|
# Make the directory
|
||||||
|
New-Item "c:\Program Files\cagent" -type directory
|
||||||
|
|
||||||
|
# Install Visual Studio 2015 C++ Redistributable
|
||||||
|
choco install -y vcredist2015
|
||||||
|
|
||||||
|
# Download cagent and start the service
|
||||||
|
If (-not (Test-Path "C:\Program Files\cagent\cagent.exe")) {
|
||||||
|
Write-Host "Downloading Caldera Agent (cagent.exe)"
|
||||||
|
$cagentPath = "C:\Program Files\cagent\cagent.exe"
|
||||||
|
$cagentConfPath = "C:\Program Files\cagent\conf.yml"
|
||||||
|
(New-Object System.Net.WebClient).DownloadFile('https://github.com/mitre/caldera-agent/releases/download/v0.1.0/cagent.exe', $cagentPath)
|
||||||
|
# Ignore SSL warning for conf file download
|
||||||
|
# https://stackoverflow.com/questions/34331206/ignore-ssl-warning-with-powershell-downloadstring
|
||||||
|
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} ;(New-Object System.Net.WebClient).DownloadFile('https://logger:8888/conf.yml', $cagentConfPath)
|
||||||
|
Start-Process -FilePath $cagentPath -ArgumentList '--startup', 'auto', 'install' -Wait
|
||||||
|
Start-Process -FilePath $cagentPath -ArgumentList 'start' -Wait
|
||||||
|
} Else {
|
||||||
|
Write-Host "Caldera Agent is already installed. Moving on."
|
||||||
|
}
|
||||||
|
Write-Host "Cagent installation complete!"
|
||||||
@@ -38,6 +38,9 @@ Invoke-WebRequest -Uri "https://raw.githubusercontent.com/SwiftOnSecurity/sysmon
|
|||||||
# Convert Sysmon config schema from 3.30 to 4.0 per GitHub Issue #38
|
# Convert Sysmon config schema from 3.30 to 4.0 per GitHub Issue #38
|
||||||
(Get-Content $sysmonConfigPath) -replace 'schemaversion="3.30"', 'schemaversion="4.00"' | Set-Content $sysmonConfigPath
|
(Get-Content $sysmonConfigPath) -replace 'schemaversion="3.30"', 'schemaversion="4.00"' | Set-Content $sysmonConfigPath
|
||||||
|
|
||||||
|
# Convert Schema from 3.30 to 4.0 per GitHub Issue #38
|
||||||
|
(Get-Content $sysmonConfigPath) -replace 'schemaversion="3.30"', 'schemaversion="4.00"' | Set-Content $sysmonConfigPath
|
||||||
|
|
||||||
# Startup Sysmon
|
# Startup Sysmon
|
||||||
Write-Host "Starting Sysmon..."
|
Write-Host "Starting Sysmon..."
|
||||||
Start-Process -FilePath "$sysmonDir\Sysmon64.exe" -ArgumentList "-accepteula -i $sysmonConfigPath"
|
Start-Process -FilePath "$sysmonDir\Sysmon64.exe" -ArgumentList "-accepteula -i $sysmonConfigPath"
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ $DomainCred = New-Object System.Management.Automation.PSCredential $user, $pass
|
|||||||
If ($hostname -eq "wef") {
|
If ($hostname -eq "wef") {
|
||||||
Add-Computer -DomainName "windomain.local" -credential $DomainCred -OUPath "ou=Servers,dc=windomain,dc=local" -PassThru
|
Add-Computer -DomainName "windomain.local" -credential $DomainCred -OUPath "ou=Servers,dc=windomain,dc=local" -PassThru
|
||||||
} ElseIf ($hostname -eq "win10") {
|
} ElseIf ($hostname -eq "win10") {
|
||||||
Write-Host "Adding Win10 to the domain. Sometimes this step times out when using VMWare. If that happens, just run 'vagrant reload win10 --provision'" #debug
|
Write-Host "Adding Win10 to the domain. Sometimes this step times out. If that happens, just run 'vagrant reload win10 --provision'" #debug
|
||||||
Add-Computer -DomainName "windomain.local" -credential $DomainCred -OUPath "ou=Workstations,dc=windomain,dc=local"
|
Add-Computer -DomainName "windomain.local" -credential $DomainCred -OUPath "ou=Workstations,dc=windomain,dc=local"
|
||||||
} Else {
|
} Else {
|
||||||
Add-Computer -DomainName "windomain.local" -credential $DomainCred -PassThru
|
Add-Computer -DomainName "windomain.local" -credential $DomainCred -PassThru
|
||||||
|
|||||||
Reference in New Issue
Block a user