feat: add timesketch
This commit is contained in:
parent
46de9b3040
commit
efb22e4133
22 changed files with 2242 additions and 0 deletions
1
charts/timesketch/.helmignore
Normal file
1
charts/timesketch/.helmignore
Normal file
|
@ -0,0 +1 @@
|
|||
*/configs/*
|
17
charts/timesketch/Chart.yaml
Normal file
17
charts/timesketch/Chart.yaml
Normal file
|
@ -0,0 +1,17 @@
|
|||
apiVersion: v2
|
||||
name: timesketch
|
||||
description: |
|
||||
A toolset of DFIR tools
|
||||
appVersion: "20240508"
|
||||
type: application
|
||||
version: 0.1.2
|
||||
maintainers:
|
||||
- name: Tommy Skaug
|
||||
email: tommy@skaug.me
|
||||
keywords:
|
||||
- timesketch
|
||||
- forensics
|
||||
- google
|
||||
- scale
|
||||
sources:
|
||||
- https://github.com/google/osdfir-infrastructure
|
46
charts/timesketch/configs/context_links.yaml
Normal file
46
charts/timesketch/configs/context_links.yaml
Normal file
|
@ -0,0 +1,46 @@
|
|||
hardcoded_modules:
|
||||
### format xml dialog
|
||||
xml_formatter:
|
||||
short_name: 'Prettify XML'
|
||||
match_fields:
|
||||
- xml
|
||||
- xml_string
|
||||
### unfurl dialog
|
||||
unfurl_graph:
|
||||
short_name: 'Unfurl URL'
|
||||
match_fields:
|
||||
- url
|
||||
- uri
|
||||
- original_url
|
||||
|
||||
### Add Threat Intel
|
||||
threat_intel:
|
||||
short_name: 'Add to Threat Intel'
|
||||
match_fields:
|
||||
- url
|
||||
- uri
|
||||
- original_url
|
||||
- ip
|
||||
- ip_address
|
||||
- domain
|
||||
- domain_name
|
||||
- host
|
||||
- hostname
|
||||
- email
|
||||
- email_address
|
||||
- hash
|
||||
- sha256_hash
|
||||
- sha256
|
||||
- sha1_hash
|
||||
- sha1
|
||||
- md5_hash
|
||||
- md5
|
||||
|
||||
## External Services
|
||||
linked_services:
|
||||
### Virustotal Example:
|
||||
virustotal_hash_lookup:
|
||||
short_name: 'VirusTotal'
|
||||
match_fields: ['hash', 'sha256_hash', 'sha256', 'sha1_hash', 'sha1', 'md5_hash', 'md5']
|
||||
context_link: 'https://www.virustotal.com/gui/search/<ATTR_VALUE>'
|
||||
redirect_warning: TRUE
|
11
charts/timesketch/configs/generic.mappings
Normal file
11
charts/timesketch/configs/generic.mappings
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"date_detection": false,
|
||||
"properties": {
|
||||
"datetime": {
|
||||
"type": "date"
|
||||
},
|
||||
"timesketch_label": {
|
||||
"type": "nested"
|
||||
}
|
||||
}
|
||||
}
|
30
charts/timesketch/configs/intelligence_tag_metadata.yaml
Normal file
30
charts/timesketch/configs/intelligence_tag_metadata.yaml
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Configuration file for tags that need highlighting in the intelligence page
|
||||
#
|
||||
# For each tag name, the following attributes are defined:
|
||||
# * weight: Used for ordering, tags with larger weight will appear first in the list of tags.
|
||||
# * class: Used in the UI to defined a Buefy class to color the tag with (common classes are danger, warning, success, and info)
|
||||
#
|
||||
# The `regex` attribute is used to specify regexes to match against the tags. 1:1 tag matches take precedence over regex matches.
|
||||
#
|
||||
# With the configuration below, an IOC with the 'malware' tag will have that tag displayed first (heavy weight), in red (danger)
|
||||
|
||||
malware:
|
||||
weight: 100
|
||||
class: 'danger'
|
||||
|
||||
suspicious:
|
||||
weight: 50
|
||||
class: 'warning'
|
||||
|
||||
legit:
|
||||
weight: 10
|
||||
class: 'success'
|
||||
|
||||
default:
|
||||
weight: 0
|
||||
class: 'info'
|
||||
|
||||
regexes:
|
||||
'^GROUPNAME':
|
||||
weight: 100
|
||||
class: 'danger'
|
38
charts/timesketch/configs/ontology.yaml
Normal file
38
charts/timesketch/configs/ontology.yaml
Normal file
|
@ -0,0 +1,38 @@
|
|||
# Define the ontology that is available for Timesketch.
|
||||
# An ontology needs to define the name, which is what will
|
||||
# be used to identify the ontology.
|
||||
# + cast_as is used to define how the value should be
|
||||
# interpreted in code.
|
||||
# + description is a short text describing the ontology.
|
||||
|
||||
text:
|
||||
cast_as: str
|
||||
description: "Free form text."
|
||||
|
||||
int:
|
||||
cast_as: int
|
||||
description: "Integer"
|
||||
|
||||
url.safe:
|
||||
cast_as: str
|
||||
description: "Safe URL that can be visited."
|
||||
|
||||
url.bad:
|
||||
cast_as: str
|
||||
description: "URL related to a sketch, can morph into a search."
|
||||
|
||||
domain:
|
||||
cast_as: str
|
||||
description: "Domain related to a sketch, can morp into a search."
|
||||
|
||||
float:
|
||||
cast_as: float
|
||||
description: "Float."
|
||||
|
||||
bool:
|
||||
cast_as: bool
|
||||
description: "Boolean, True or False values."
|
||||
|
||||
intelligence:
|
||||
cast_as: dict
|
||||
description: "Set of key/value pairs to summarize an intelligence report."
|
87
charts/timesketch/configs/plaso.mappings
Normal file
87
charts/timesketch/configs/plaso.mappings
Normal file
|
@ -0,0 +1,87 @@
|
|||
{
|
||||
"properties": {
|
||||
"application": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"timesketch_label": {
|
||||
"type": "nested"
|
||||
},
|
||||
"datetime": {
|
||||
"type": "date"
|
||||
},
|
||||
"data": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"doc_type": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"event_type": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"exit_status": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"facility": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"file_reference": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"file_size": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"flags": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"identifier": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"message_status": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"message_type": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"offset": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"sequence_number": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"severity": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"source_port": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"user_identifier": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"version": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
},
|
||||
"http_response_bytes": {
|
||||
"type": "text",
|
||||
"fields": {"keyword": {"type": "keyword"}}
|
||||
}
|
||||
}
|
||||
}
|
23
charts/timesketch/configs/plaso_formatters.yaml
Normal file
23
charts/timesketch/configs/plaso_formatters.yaml
Normal file
|
@ -0,0 +1,23 @@
|
|||
# Plaso uses formatter definitions to format events into a human readable format.
|
||||
# The formatter definitions are defined in YAML and loaded by Plaso at runtime.
|
||||
# This file overrides or extend the default formatter definitions.
|
||||
# For more information about the formatter definitions see: https://plaso.readthedocs.io/en/latest/sources/user/Output-and-formatting.html#formatter-configuration-file-format
|
||||
|
||||
# Windows Event Log (EVTX) formatter definitions.
|
||||
type: 'conditional'
|
||||
data_type: 'windows:evtx:record'
|
||||
custom_helpers:
|
||||
- identifier: 'windows_eventlog_message'
|
||||
output_attribute: 'message_string'
|
||||
message:
|
||||
- '[{event_identifier}]'
|
||||
- '{message_string}'
|
||||
- 'Source Name: {source_name}'
|
||||
- 'Strings: {strings}'
|
||||
short_message:
|
||||
- '[{event_identifier} / 0x{event_identifier:04x}]'
|
||||
- 'Source Name: {source_name}'
|
||||
- 'Strings: {strings}'
|
||||
- 'Provider identifier: {provider_identifier}'
|
||||
short_source: 'EVTX'
|
||||
source: 'WinEVTX'
|
182
charts/timesketch/configs/regex_features.yaml
Normal file
182
charts/timesketch/configs/regex_features.yaml
Normal file
|
@ -0,0 +1,182 @@
|
|||
# Config file for the feature extraction analyzer.
|
||||
# A feature extraction definition looks like this:
|
||||
# name:
|
||||
# # Define either a query_string or query_dsl.
|
||||
# query_string: *
|
||||
# query_dsl:
|
||||
# # Mandatory fields.
|
||||
# attribute:
|
||||
# store_as:
|
||||
# re:
|
||||
# # Optional fields.
|
||||
# re_flags: []
|
||||
# emojis: []
|
||||
# tags: []
|
||||
# overwrite_store_as: True
|
||||
# overwrite_and_merge_store_as: False
|
||||
# store_type_list: False
|
||||
# keep_multimatch: False
|
||||
#
|
||||
# Each definition needs to define either a query_string or a query_dsl.
|
||||
#
|
||||
# re_flags is a list of flags as strings from the re module. These include:
|
||||
# - DEBUG
|
||||
# - DOTALL
|
||||
# - IGNORECASE
|
||||
# - LOCALE
|
||||
# - MULTILINE
|
||||
# - TEMPLATE
|
||||
# - UNICODE
|
||||
# - VERBOSE
|
||||
#
|
||||
# The fields tags and emojis are optional.
|
||||
#
|
||||
# The field store_as defines the name of the attribute the feature is
|
||||
# stored as.
|
||||
#
|
||||
# The overwrite_store_as is an optional boolean that determines if
|
||||
# we want to overwrite the field store_as if it already exists.
|
||||
#
|
||||
# The overwrite_and_merge_store_as is an optional boolean that determines
|
||||
# if we want to overwrite the field store_as and merge the existing values.
|
||||
#
|
||||
# The store_type_list is an optional boolean that determines if we want to
|
||||
# store the extracted data in List type (default is text).
|
||||
#
|
||||
# The keep_multimatch is an optional boolean that determines if we want to
|
||||
# store all matching results (default store first result).
|
||||
#
|
||||
# The feature extraction works in the way that the query is run, and
|
||||
# the regular expression is run against the attribute to extract a value.
|
||||
# The first value extracted is then stored inside the "store_as" attribute.
|
||||
# If there are emojis or tags defined they are also applied to that event.
|
||||
# ------------------------------------------------------------------------
|
||||
|
||||
email_addresses:
|
||||
query_string: 'source_short:"WEBHIST"'
|
||||
attribute: 'message'
|
||||
store_as: 'email_address'
|
||||
re: '([a-zA-Z0-9_\.+\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+)'
|
||||
re_flags: []
|
||||
tags: ['email-address']
|
||||
|
||||
gmail_accounts:
|
||||
query_string: 'source_short:"WEBHIST" AND url:"mail.google.com"'
|
||||
attribute: 'message'
|
||||
store_as: 'found_account'
|
||||
re: '[a-zA-Z0-9_\.+\-]+@(gmail|googlemail)\.com'
|
||||
re_flags: []
|
||||
tags: ['gmail-account']
|
||||
emojis: ['ID_BUTTON']
|
||||
|
||||
github_accounts:
|
||||
query_string: 'source_short:"WEBHIST" AND
|
||||
url:"https://github.com/users" AND title:"Your Profile"'
|
||||
attribute: 'url'
|
||||
store_as: 'found_account'
|
||||
re: 'https://github.com/users/([A-z-\d]{1,39})'
|
||||
re_flags: []
|
||||
tags: ['github-account']
|
||||
emojis: ['ID_BUTTON']
|
||||
|
||||
# Linkedin account extraction from profile edit url
|
||||
linkedin_accounts:
|
||||
query_string: 'source_short:"WEBHIST" AND
|
||||
url:"https://www.linkedin.com/in/" AND url:"/edit/"'
|
||||
attribute: 'url'
|
||||
store_as: 'found_account'
|
||||
re: 'https://www.linkedin.com/in/([A-z-\d]{5,32})/edit/'
|
||||
tags: ['linkedin-account']
|
||||
emojis: ['ID_BUTTON']
|
||||
|
||||
rdp_ts_ipv4_addresses:
|
||||
query_string: 'data_type:"windows:evtx:record" AND
|
||||
source_name:"Microsoft-Windows-TerminalServices-LocalSessionManager"'
|
||||
attribute: 'strings'
|
||||
store_as: 'ip_address'
|
||||
re: '(?:[0-9]{1,3}\.){3}[0-9]{1,3}'
|
||||
|
||||
rdp_rds_ipv4_addresses:
|
||||
query_string: 'data_type:"windows:evtx:record" AND
|
||||
source_name:"Microsoft-Windows-RemoteDesktopServices-RdpCoreTS"'
|
||||
attribute: 'strings'
|
||||
store_as: 'client_ip'
|
||||
re: '(?:[0-9]{1,3}\.){3}[0-9]{1,3}'
|
||||
|
||||
ssh_client_ipv4_addresses:
|
||||
query_string: 'reporter:"sshd"'
|
||||
attribute: 'message'
|
||||
store_as: 'client_ip'
|
||||
re: 'Connection from ((?:[0-9]{1,3}\.){3}[0-9]{1,3}) port \d+ on (?:[0-9]{1,3}\.){3}[0-9]{1,3} port \d+(?: rdomain ? .*)?$'
|
||||
|
||||
ssh_client_ipv4_addresses_2:
|
||||
query_string: 'reporter:"sshd"'
|
||||
attribute: 'message'
|
||||
store_as: 'client_ip'
|
||||
re: 'Connection [a-z]+ by ((?:[0-9]{1,3}\.){3}[0-9]{1,3}) port \d+'
|
||||
|
||||
ssh_host_ipv4_addresses:
|
||||
query_string: 'reporter:"sshd"'
|
||||
attribute: 'message'
|
||||
store_as: 'host_ip'
|
||||
re: '^\[sshd\] \[\d+\]: Connection from (?:[0-9]{1,3}\.){3}[0-9]{1,3} port \d+ on ((?:[0-9]{1,3}\.){3}[0-9]{1,3}) port \d+(?: rdomain ? .*)?$'
|
||||
|
||||
ssh_client_password_ipv4_addresses:
|
||||
query_string: 'reporter:"sshd"'
|
||||
attribute: 'message'
|
||||
store_as: 'client_ip'
|
||||
re: '(?:Accepted|Failed) (?:password|publickey) for \w+ from ((?:[0-9]{1,3}\.){3}[0-9]{1,3}) port \d+'
|
||||
|
||||
ssh_disconnected_username:
|
||||
query_string: 'reporter:"sshd"'
|
||||
attribute: 'body'
|
||||
store_as: 'username'
|
||||
re: 'Disconnected\s+from user (?P<username>[^\s]+) [^\s]+ port \d+$'
|
||||
|
||||
ssh_disconnected_ip_address:
|
||||
query_string: 'reporter:"sshd"'
|
||||
attribute: 'body'
|
||||
store_as: 'ip_address'
|
||||
re: 'Disconnected from user [^\s]+ (?P<ip_address>[^\s]+) port \d+$'
|
||||
|
||||
ssh_disconnected_port:
|
||||
query_string: 'reporter:"sshd"'
|
||||
attribute: 'body'
|
||||
store_as: 'port'
|
||||
re: 'Disconnected from user [^\s]+ [^\s]+ port (?P<port>\d+)$'
|
||||
|
||||
ssh_failed_username:
|
||||
query_string: 'reporter:"sshd"'
|
||||
attribute: 'body'
|
||||
store_as: 'username'
|
||||
re: 'Failed password for (?:invalid user)?\s*(?P<username>[^\s]+) from [^\s]+ port \d+ ssh\d'
|
||||
|
||||
ssh_failed_ip_address:
|
||||
query_string: 'reporter:"sshd"'
|
||||
attribute: 'body'
|
||||
store_as: 'ip_address'
|
||||
re: 'Failed password for (?:invalid user)?\s*[^\s]+ from (?P<ip_address>[^\s]+) port \d+ ssh\d'
|
||||
|
||||
ssh_failed_port:
|
||||
query_string: 'reporter:"sshd"'
|
||||
attribute: 'body'
|
||||
store_as: 'port'
|
||||
re: 'Failed password for (?:invalid user)?\s*[^\s]+ from [^\s]+ port (?P<port>\d+) ssh\d'
|
||||
|
||||
ssh_failed_method:
|
||||
query_string: 'reporter:"sshd"'
|
||||
attribute: 'body'
|
||||
store_as: 'authentication_method'
|
||||
re: 'Failed (?P<authentication_method>[^\s]+) for .*ssh\d'
|
||||
|
||||
win_bits_client_ipv4_addresses:
|
||||
query_string: 'data_type:"windows:evtx:record" AND source_name:Microsoft-Windows-Bits-Client'
|
||||
attribute: 'strings'
|
||||
store_as: 'ip_address'
|
||||
re: '(?:[0-9]{1,3}\.){3}[0-9]{1,3}'
|
||||
|
||||
win_bits_client_url:
|
||||
query_string: 'data_type:"windows:evtx:record" AND source_name:Microsoft-Windows-Bits-Client'
|
||||
attribute: 'strings'
|
||||
store_as: 'url'
|
||||
re: '(?<=")(?:(?:https?:\/\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+)(?:[\/\?#][^\s,"]*)?(?=")'
|
367
charts/timesketch/configs/sigma_config.yaml
Normal file
367
charts/timesketch/configs/sigma_config.yaml
Normal file
|
@ -0,0 +1,367 @@
|
|||
title: Timesketch Sigma config
|
||||
order: 20
|
||||
backends:
|
||||
- es-dsl
|
||||
- es-qs
|
||||
- es-qr
|
||||
- es-rule
|
||||
logsources:
|
||||
linux_file:
|
||||
category: file_event
|
||||
product: linux
|
||||
conditions:
|
||||
data_type: "fs:stat"
|
||||
linux_network:
|
||||
category: network_connection
|
||||
product: linux
|
||||
conditions:
|
||||
data_type:
|
||||
- "shell:zsh:history"
|
||||
- "bash:history:command"
|
||||
- "apt:history:line"
|
||||
- "selinux:line"
|
||||
- "syslog"
|
||||
linux_process_creation:
|
||||
category: process_creation
|
||||
product: linux
|
||||
conditions:
|
||||
data_type:
|
||||
- "shell:zsh:history"
|
||||
- "bash:history:command"
|
||||
- "apt:history:line"
|
||||
- "selinux:line"
|
||||
sshd:
|
||||
service: sshd
|
||||
conditions:
|
||||
data_type: "syslog/sshd"
|
||||
auth:
|
||||
service: auth
|
||||
conditions:
|
||||
data_type: "syslog"
|
||||
apache:
|
||||
product: apache
|
||||
conditions:
|
||||
data_type: "apache:access"
|
||||
vsftp:
|
||||
service: vsftp
|
||||
conditions:
|
||||
data_type: "vsftpd:log"
|
||||
webserver:
|
||||
category: webserver
|
||||
conditions:
|
||||
data_type:
|
||||
- "apache:access"
|
||||
- "iis:log:line"
|
||||
santa:
|
||||
category: osx_santa
|
||||
conditions:
|
||||
data_type:
|
||||
- "filesystem:santa:entry"
|
||||
shell:
|
||||
service: shell
|
||||
conditions:
|
||||
data_type:
|
||||
- "shell:zsh:history"
|
||||
- "bash:history:command"
|
||||
- "apt:history:line"
|
||||
- "selinux:line"
|
||||
selinux:
|
||||
service: selinux
|
||||
conditions:
|
||||
data_type:
|
||||
- "selinux:line"
|
||||
winprefetch:
|
||||
service: winprefetch
|
||||
conditions:
|
||||
data_type: "windows:prefetch:execution"
|
||||
product_windows:
|
||||
product: windows
|
||||
conditions:
|
||||
data_type: "windows:evtx:record"
|
||||
service_windows_security:
|
||||
service: security
|
||||
conditions:
|
||||
source_name:
|
||||
- "Microsoft-Windows-Security-Auditing"
|
||||
- "Microsoft-Windows-Eventlog"
|
||||
service_windows_system:
|
||||
service: system
|
||||
conditions:
|
||||
source_name:
|
||||
- "Microsoft-Windows-Eventlog"
|
||||
powershell:
|
||||
service: powershell
|
||||
conditions:
|
||||
source_name:
|
||||
- "Microsoft-Windows-Security-Auditing"
|
||||
files:
|
||||
service: filesystem
|
||||
conditions:
|
||||
data_type:
|
||||
- "fs:stat"
|
||||
- "fs:mactime:line"
|
||||
- "filesystem:santa:entry"
|
||||
- "fs:bodyfile:entry"
|
||||
sysmon:
|
||||
service: sysmon
|
||||
conditions:
|
||||
source_name:
|
||||
- "Microsoft-Windows-Sysmon"
|
||||
syslog:
|
||||
service: syslog
|
||||
conditions:
|
||||
data_type:
|
||||
- "syslog:line"
|
||||
# GCP
|
||||
gcp_audit:
|
||||
service: gcp.audit
|
||||
conditions:
|
||||
query:
|
||||
- "cloudaudit.googleapis.com"
|
||||
# log source configurations for generic sigma rules
|
||||
process_creation:
|
||||
category: process_creation
|
||||
product: windows
|
||||
conditions:
|
||||
EventID:
|
||||
- 1
|
||||
- 4688
|
||||
source_name:
|
||||
- "Microsoft-Windows-Sysmon"
|
||||
- "Microsoft-Windows-Security-Auditing"
|
||||
- "Microsoft-Windows-Eventlog"
|
||||
fieldmappings:
|
||||
Image: NewProcessName
|
||||
ParentImage: ParentProcessName
|
||||
network_connection:
|
||||
category: network_connection
|
||||
product: windows
|
||||
conditions:
|
||||
EventID: 3
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
process_terminated:
|
||||
category: process_termination
|
||||
product: windows
|
||||
conditions:
|
||||
EventID: 5
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
driver_loaded:
|
||||
category: driver_load
|
||||
product: windows
|
||||
conditions:
|
||||
EventID: 6
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
image_loaded:
|
||||
category: image_load
|
||||
product: windows
|
||||
conditions:
|
||||
EventID: 7
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
create_remote_thread:
|
||||
category: create_remote_thread
|
||||
product: windows
|
||||
conditions:
|
||||
EventID: 8
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
raw_access_thread:
|
||||
category: raw_access_thread
|
||||
product: windows
|
||||
conditions:
|
||||
EventID: 9
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
process_access:
|
||||
category: process_access
|
||||
product: windows
|
||||
conditions:
|
||||
EventID: 10
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
file_creation:
|
||||
category: file_event
|
||||
product: windows
|
||||
conditions:
|
||||
EventID: 11
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
registry_event:
|
||||
category: registry_event
|
||||
product: windows
|
||||
conditions:
|
||||
EventID:
|
||||
- 12
|
||||
- 13
|
||||
- 14
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
create_stream_hash:
|
||||
category: create_stream_hash
|
||||
product: windows
|
||||
conditions:
|
||||
EventID: 15
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
pipe_created:
|
||||
category: pipe_created
|
||||
product: windows
|
||||
conditions:
|
||||
EventID:
|
||||
- 17
|
||||
- 18
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
wmi_event:
|
||||
category: wmi_event
|
||||
product: windows
|
||||
conditions:
|
||||
EventID:
|
||||
- 19
|
||||
- 20
|
||||
- 21
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
dns_query:
|
||||
category: dns_query
|
||||
product: windows
|
||||
conditions:
|
||||
EventID: 22
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
file_delete:
|
||||
category: file_delete
|
||||
product: windows
|
||||
conditions:
|
||||
EventID: 23
|
||||
rewrite:
|
||||
product: windows
|
||||
service: sysmon
|
||||
ssh:
|
||||
service: ssh
|
||||
conditions:
|
||||
data_type:
|
||||
- "syslog:ssh:login"
|
||||
- "syslog:line"
|
||||
fieldmappings:
|
||||
EventID: event_identifier
|
||||
ComputerName: computer_name
|
||||
EventType: event_type
|
||||
EventIdentifier: event_identifier
|
||||
ObjectName: xml_string # that is a bit hacky but the processName is currently not being parsed that is why searching in the raw xml
|
||||
ObjectType: xml_string # that is a bit hacky but the processName is currently not being parsed that is why searching in the raw xml
|
||||
ProcessName: xml_string # that is a bit hacky but the processName is currently not being parsed that is why searching in the raw xml
|
||||
GroupSid: xml_string
|
||||
CommandLine: xml_string
|
||||
ServiceName: xml_string
|
||||
Service: xml_string
|
||||
Message: xml_string
|
||||
keywords: xml_string # that might be wrong, only introduced during powershell stuff
|
||||
Source: message
|
||||
LogonType: xml_string
|
||||
LogonProcessName: xml_string
|
||||
LogonGuid: xml_string
|
||||
SubjectDomainName: xml_string
|
||||
SubjectUserName: xml_string
|
||||
TargetUserSid: xml_string
|
||||
TargetUserName: xml_String
|
||||
TargetDomainName: xml_string
|
||||
TargetLogonId: xml_string
|
||||
AuthenticationPackageName: xml_string
|
||||
WorkstationName: xml_string
|
||||
TransmittedServices: xml_string
|
||||
ProcessId: xml_string
|
||||
IpAddress: xml_string
|
||||
IpPort: xml_String #not sure if that mapping is used somewhere else
|
||||
SourceNetworkAddress: xml_string
|
||||
TargetOutboundUserName: xml_string
|
||||
TargetOutboundDomainName: xml_string
|
||||
Level: xml_string # this might also cause conflicts.
|
||||
ServiceFileName: xml_string
|
||||
ObjectValueName: xml_string
|
||||
DestPort: xml_string
|
||||
LayerRTID: xml_string
|
||||
AccessMask: xml_string
|
||||
ShareName: xml_string
|
||||
RelativeTargetName: xml_string
|
||||
AccountName: xml_string
|
||||
PrivilegeList: xml_string
|
||||
SubjectLogonId: xml_string
|
||||
CallingProcessName: xml_string
|
||||
SAMAccountName: xml_string
|
||||
ObjectServer: xml_string
|
||||
Properties: xml_string
|
||||
HiveName: xml_string
|
||||
AttributeLDAPDisplayName: xml_string
|
||||
GroupName: xml_string
|
||||
UserName: xml_string
|
||||
DeviceDescription: xml_string
|
||||
DeviceClassName: xml_string
|
||||
TicketOptions: xml_string
|
||||
TicketEncryptionType: xml_string
|
||||
SourceWorkstation: xml_string
|
||||
DestinationAddress: xml_string
|
||||
DestinationPort: xml_string
|
||||
SourceAddress: xml_string
|
||||
Keywords: xml_string
|
||||
LDAPDisplayName: xml_string
|
||||
AuditPolicyChanges: xml_string
|
||||
SourceImage: xml_string
|
||||
TargetImage: xml_string
|
||||
TargetFilename:
|
||||
product=linux: filename
|
||||
default: xml_string
|
||||
ImageLoaded: xml_string
|
||||
QueryName: xml_string
|
||||
TargetProcessAddress: xml_string
|
||||
TargetObject: xml_string
|
||||
Signature: xml_string
|
||||
StartModule: xml_string
|
||||
StartFunction: xml_string
|
||||
IntegrityLevel: xml_string
|
||||
Description: xml_string
|
||||
Signed: xml_string
|
||||
ScriptBlockText: xml_string
|
||||
ContextInfo: xml_string
|
||||
OriginalFileName: xml_string # 80167ada-7a12-41ed-b8e9-aa47195c66a1
|
||||
Payload: xml_string
|
||||
HostName: xml_string #96b9f619-aa91-478f-bacb-c3e50f8df575
|
||||
HostApplication: xml_string #96b9f619-aa91-478f-bacb-c3e50f8df575
|
||||
gcp.audit.method_name: methodName
|
||||
ParentImage: xml_string
|
||||
Mutex: message
|
||||
Value:
|
||||
service=windefend: xml_string
|
||||
default: Value
|
||||
Provider_Name: xml_string
|
||||
param1: #6c0a7755-6d31-44fa-80e1-133e57752680
|
||||
product=windows: xml_string
|
||||
default: param1
|
||||
param2: #6c0a7755-6d31-44fa-80e1-133e57752680
|
||||
product=windows: xml_string
|
||||
default: param2
|
||||
GrantedAccess: xml_string #aa35a627-33fb-4d04-a165-d33b4afca3e8
|
||||
DestinationIp:
|
||||
product=linux: message
|
||||
product=windows: xml_string
|
||||
default: message
|
||||
Image: #42df45e7-e6e9-43b5-8f26-bec5b39cc239
|
||||
product=linux: message
|
||||
product=windows: xml_string
|
||||
default: message
|
39
charts/timesketch/configs/tags.yaml
Normal file
39
charts/timesketch/configs/tags.yaml
Normal file
|
@ -0,0 +1,39 @@
|
|||
# Config file for the tagger analyzer.
|
||||
#
|
||||
# Please refer to docs/guides/analyzers/tagger.md for
|
||||
# instructions on how to edit this file.
|
||||
|
||||
gcs_bucket_creation_tagger:
|
||||
query_string: 'serviceName: "storage.googleapis.com" AND methodName: "storage.buckets.create"'
|
||||
tags: ['gcs-bucket-create']
|
||||
emojis: ['BUCKET', 'SPARKLES']
|
||||
save_search: true
|
||||
search_name: 'Bucket creation'
|
||||
|
||||
gcs_bucket_permission_added_tagger:
|
||||
query_string: 'serviceName: "storage.googleapis.com" AND methodName: "storage.setIamPermissions" AND policyDelta:*ADD*'
|
||||
tags: ['gcs-bucket-add']
|
||||
emojis: ['BUCKET', 'PERSON_STANDING']
|
||||
save_search: true
|
||||
search_name: 'Bucket permission - Add'
|
||||
|
||||
gcs_bucket_permission_remove_tagger:
|
||||
query_string: 'serviceName: "storage.googleapis.com" AND methodName: "storage.setIamPermissions" AND policyDelta:*REMOVE*'
|
||||
tags: ['gcs-bucket-remove']
|
||||
emojis: ['BUCKET', 'WASTEBASKET']
|
||||
save_search: true
|
||||
search_name: 'Bucket permission - Remove'
|
||||
|
||||
gcs_bucket_permission_world_added_tagger:
|
||||
query_string: 'serviceName: "storage.googleapis.com" AND methodName: "storage.setIamPermissions" AND policyDelta:*ADD allUsers* OR policyDelta:*ADD allAuthenticatedUsers*'
|
||||
tags: ['gcs-bucket-world-add']
|
||||
emojis: ['BUCKET', 'GLOBE']
|
||||
save_search: true
|
||||
search_name: 'Bucket permission - World Readable'
|
||||
|
||||
yara_match_tagger:
|
||||
query_string: '_exists_:yara_match AND NOT yara_match.keyword:"-"'
|
||||
tags: ['yara', '$yara_match']
|
||||
modifiers: ['split']
|
||||
save_search: true
|
||||
search_name: 'Yara rule matches'
|
1011
charts/timesketch/configs/winevt_features.yaml
Normal file
1011
charts/timesketch/configs/winevt_features.yaml
Normal file
File diff suppressed because it is too large
Load diff
56
charts/timesketch/templates/_helpers.tpl
Normal file
56
charts/timesketch/templates/_helpers.tpl
Normal file
|
@ -0,0 +1,56 @@
|
|||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "timesketch.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{- define "timesketch.fullname" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "timesketch.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "timesketch.labels" -}}
|
||||
helm.sh/chart: {{ include "timesketch.chart" . }}
|
||||
{{ include "timesketch.selectorLabels" . }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
date: "{{ now | htmlDate }}"
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "timesketch.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "timesketch.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Timesketch service port
|
||||
*/}}
|
||||
{{- define "timesketch.service.port" -}}
|
||||
{{- if .Values.global.timesketch.servicePort -}}
|
||||
{{ .Values.global.timesketch.servicePort }}
|
||||
{{- else -}}
|
||||
{{ .Values.service.port }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the upload path.
|
||||
*/}}
|
||||
{{- define "timesketch.uploadPath" -}}
|
||||
{{- printf "/data/upload" }}
|
||||
{{- end }}
|
|
@ -0,0 +1,9 @@
|
|||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ include "timesketch.fullname" . }}-configs
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
labels:
|
||||
{{- include "timesketch.labels" . | nindent 4 }}
|
||||
data:
|
||||
{{- (.Files.Glob "configs/**.{yaml,mappings}").AsConfig | nindent 2 }}
|
20
charts/timesketch/templates/db-init.yaml
Normal file
20
charts/timesketch/templates/db-init.yaml
Normal file
|
@ -0,0 +1,20 @@
|
|||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: {{ include "timesketch.fullname" . }}-db-init
|
||||
labels:
|
||||
{{- include "timesketch.labels" . | nindent 4 }}
|
||||
annotations:
|
||||
"helm.sh/hook": pre-install
|
||||
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
containers:
|
||||
- name: general-db-init
|
||||
image: "{{ .Values.initContainers.dbInit.image.repository }}:{{ .Values.initContainers.dbInit.image.tag }}"
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: {{ .Values.postgres.secretName }}
|
||||
backoffLimit: 3
|
93
charts/timesketch/templates/deployment-frontend.yaml
Normal file
93
charts/timesketch/templates/deployment-frontend.yaml
Normal file
|
@ -0,0 +1,93 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "timesketch.fullname" . }}-frontend
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
labels:
|
||||
app.kubernetes.io/component: frontend
|
||||
{{- include "timesketch.labels" . | nindent 4 }}
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/component: frontend
|
||||
{{- include "timesketch.selectorLabels" . | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
# Have Deployment restart after each upgrade
|
||||
roll: {{ randAlphaNum 5 | quote }}
|
||||
prometheus.io/port: {{ .Values.metrics.port | quote }}
|
||||
prometheus.io/scrape: "true"
|
||||
labels:
|
||||
app.kubernetes.io/component: frontend
|
||||
{{- include "timesketch.selectorLabels" . | nindent 8 }}
|
||||
spec:
|
||||
serviceAccountName: {{ include "timesketch.fullname" . }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.frontend.podSecurityContext | nindent 8 }}
|
||||
containers:
|
||||
- name: frontend
|
||||
securityContext:
|
||||
{{- toYaml .Values.frontend.securityContext | nindent 12 }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
command: ["sh", "-c", "gunicorn --bind 0.0.0.0:5000 --log-file - \
|
||||
--error-logfile - --log-level info \
|
||||
--capture-output --timeout 600 --limit-request-line 8190 \
|
||||
--workers 4 timesketch.wsgi:application"]
|
||||
lifecycle:
|
||||
postStart:
|
||||
exec:
|
||||
command: ["/bin/sh", "-c", "tsctl create-user $TIMESKETCH_USER_USERNAME --password $TIMESKETCH_USER_PASSWORD"]
|
||||
env:
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
apiVersion: v1
|
||||
- name: TIMESKETCH_USER_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ .Values.config.existingUserSecret }}
|
||||
key: TIMESKETCH_USER_USERNAME
|
||||
- name: TIMESKETCH_USER_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ .Values.config.existingUserSecret }}
|
||||
key: TIMESKETCH_USER_PASSWORD
|
||||
volumeMounts:
|
||||
- name: upload-volume
|
||||
mountPath: /data/uploads
|
||||
subPath: uploads
|
||||
- name: timesketch-default-configs
|
||||
mountPath: /config
|
||||
readOnly: true
|
||||
- name: timesketch-conf
|
||||
mountPath: /etc/timesketch.conf
|
||||
subPath: timesketch.conf
|
||||
readOnly: true
|
||||
ports:
|
||||
- containerPort: {{ .Values.metrics.port }}
|
||||
- containerPort: 5000
|
||||
resources:
|
||||
{{- toYaml .Values.frontend.resources | nindent 12 }}
|
||||
volumes:
|
||||
- name: upload-volume
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ include "timesketch.fullname" . }}-upload
|
||||
readOnly: false
|
||||
- name: timesketch-default-configs
|
||||
configMap:
|
||||
name: {{ include "timesketch.fullname" . }}-configs
|
||||
optional: true
|
||||
- name: timesketch-conf
|
||||
secret:
|
||||
secretName: {{ .Values.config.existingConfSecret }}
|
||||
optional: true
|
||||
nodeSelector:
|
||||
{{- toYaml .Values.frontend.nodeSelector | nindent 8 }}
|
||||
affinity:
|
||||
{{- toYaml .Values.frontend.affinity | nindent 8 }}
|
||||
tolerations:
|
||||
{{- toYaml .Values.frontend.tolerations | nindent 8 }}
|
89
charts/timesketch/templates/deployment-worker.yaml
Normal file
89
charts/timesketch/templates/deployment-worker.yaml
Normal file
|
@ -0,0 +1,89 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "timesketch.fullname" . }}-worker
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
labels:
|
||||
app.kubernetes.io/component: worker
|
||||
{{- include "timesketch.labels" . | nindent 4 }}
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/component: worker
|
||||
{{- include "timesketch.selectorLabels" . | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
# Have Deployment restart after each upgrade
|
||||
roll: {{ randAlphaNum 5 | quote }}
|
||||
prometheus.io/port: {{ .Values.metrics.port | quote }}
|
||||
prometheus.io/scrape: "true"
|
||||
labels:
|
||||
app.kubernetes.io/component: worker
|
||||
{{- include "timesketch.selectorLabels" . | nindent 8 }}
|
||||
spec:
|
||||
serviceAccountName: {{ include "timesketch.fullname" . }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.worker.podSecurityContext | nindent 8 }}
|
||||
containers:
|
||||
- name: worker
|
||||
securityContext:
|
||||
{{- toYaml .Values.worker.securityContext | nindent 12 }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
command: ["sh", "-c", "celery -A timesketch.lib.tasks worker \
|
||||
--loglevel=DEBUG"]
|
||||
env:
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
apiVersion: v1
|
||||
- name: WORKER_LOG_LEVEL
|
||||
value: "DEBUG"
|
||||
- name: TIMESKETCH_USER_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ .Values.config.existingUserSecret }}
|
||||
key: TIMESKETCH_USER_USERNAME
|
||||
- name: TIMESKETCH_USER_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ .Values.config.existingUserSecret }}
|
||||
key: TIMESKETCH_USER_PASSWORD
|
||||
volumeMounts:
|
||||
- name: upload-volume
|
||||
mountPath: /data/uploads
|
||||
subPath: uploads
|
||||
- name: timesketch-default-configs
|
||||
mountPath: /config
|
||||
readOnly: true
|
||||
- name: timesketch-conf
|
||||
mountPath: /etc/timesketch.conf
|
||||
subPath: timesketch.conf
|
||||
readOnly: true
|
||||
ports:
|
||||
- containerPort: {{ .Values.metrics.port }}
|
||||
- containerPort: 5000
|
||||
resources:
|
||||
{{- toYaml .Values.worker.resources | nindent 12 }}
|
||||
volumes:
|
||||
- name: upload-volume
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ include "timesketch.fullname" . }}-upload
|
||||
readOnly: false
|
||||
- name: timesketch-default-configs
|
||||
configMap:
|
||||
name: {{ include "timesketch.fullname" . }}-configs
|
||||
optional: true
|
||||
- name: timesketch-conf
|
||||
secret:
|
||||
secretName: {{ .Values.config.existingConfSecret }}
|
||||
optional: false
|
||||
nodeSelector:
|
||||
{{- toYaml .Values.worker.nodeSelector | nindent 8 }}
|
||||
affinity:
|
||||
{{- toYaml .Values.worker.affinity | nindent 8 }}
|
||||
tolerations:
|
||||
{{- toYaml .Values.worker.tolerations | nindent 8 }}
|
20
charts/timesketch/templates/pvc.yaml
Normal file
20
charts/timesketch/templates/pvc.yaml
Normal file
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ include "timesketch.fullname" . }}-upload
|
||||
labels:
|
||||
{{- include "timesketch.labels" . | nindent 4 }}
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.upload.persistence.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.upload.persistence.size | quote }}
|
||||
{{- if .Values.upload.persistence.storageClass }}
|
||||
{{- if (eq "-" .Values.upload.persistence.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.upload.persistence.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
16
charts/timesketch/templates/service.yaml
Normal file
16
charts/timesketch/templates/service.yaml
Normal file
|
@ -0,0 +1,16 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "timesketch.fullname" . }}-frontend
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
labels:
|
||||
{{- include "timesketch.labels" . | nindent 4 }}
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 8080
|
||||
protocol: TCP
|
||||
targetPort: 5000
|
||||
selector:
|
||||
app.kubernetes.io/component: frontend
|
||||
{{- include "timesketch.selectorLabels" . | nindent 4 }}
|
6
charts/timesketch/templates/serviceaccount.yaml
Normal file
6
charts/timesketch/templates/serviceaccount.yaml
Normal file
|
@ -0,0 +1,6 @@
|
|||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ include "timesketch.fullname" . }}
|
||||
labels:
|
||||
{{- include "timesketch.labels" . | nindent 4 }}
|
31
charts/timesketch/tests/values.yaml
Normal file
31
charts/timesketch/tests/values.yaml
Normal file
|
@ -0,0 +1,31 @@
|
|||
config:
|
||||
externalUrl: https://cache.example.com/
|
||||
|
||||
persistence:
|
||||
existingClaim: attic
|
||||
|
||||
initContainers:
|
||||
dbInit:
|
||||
image:
|
||||
repository: ghcr.io/onedr0p/postgres-init
|
||||
tag: "16"
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: attic-secret
|
||||
|
||||
envFromSecret: attic-secret
|
||||
|
||||
image:
|
||||
repository: ghcr.io/zhaofengli/attic
|
||||
tag: 4dbdbee45728d8ce5788db6461aaaa89d98081f0
|
||||
|
||||
postgres:
|
||||
secretName: attic-secret
|
||||
|
||||
resources:
|
||||
limits:
|
||||
memory: "3Gi"
|
||||
cpu: "1000m"
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 250Mi
|
50
charts/timesketch/values.yaml
Normal file
50
charts/timesketch/values.yaml
Normal file
|
@ -0,0 +1,50 @@
|
|||
config:
|
||||
externalUrl: https://timesketch.example.com/
|
||||
existingConfSecret: timesketch-conf
|
||||
existingUserSecret: timesketch-user
|
||||
createUser: true
|
||||
|
||||
initContainers:
|
||||
dbInit:
|
||||
image:
|
||||
repository: ghcr.io/onedr0p/postgres-init
|
||||
tag: "16"
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: timesketch-secret
|
||||
|
||||
image:
|
||||
repository: us-docker.pkg.dev/osdfir-registry/timesketch/timesketch
|
||||
pullPolicy: IfNotPresent
|
||||
tag: "20240508"
|
||||
imagePullSecrets: []
|
||||
|
||||
worker:
|
||||
podSecurityContext: {}
|
||||
securityContext: {}
|
||||
|
||||
frontend:
|
||||
podSecurityContext: {}
|
||||
securityContext: {}
|
||||
|
||||
postgres:
|
||||
secretName: timesketch-secret
|
||||
|
||||
upload:
|
||||
persistence:
|
||||
accessMode: ReadWriteMany
|
||||
size: 10Gi
|
||||
storageClass: ceph-filesystem
|
||||
persistentVolumeClaim: timesketch-upload
|
||||
|
||||
resources:
|
||||
limits:
|
||||
memory: "3Gi"
|
||||
cpu: "1000m"
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 250Mi
|
||||
|
||||
metrics:
|
||||
enabled: true
|
||||
port: 9001
|
Loading…
Reference in a new issue