mirror of
https://github.com/Security-Onion-Solutions/securityonion.git
synced 2026-08-08 08:53:48 +02:00
Compare commits
27
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9762523849 | ||
|
|
f1f672892e | ||
|
|
a8053e2c9d | ||
|
|
e998a21b4d | ||
|
|
d77760c268 | ||
|
|
4f7ad76d5b | ||
|
|
41dba204c3 | ||
|
|
12bb16e89c | ||
|
|
45f1a1b8b1 | ||
|
|
d3c6fdce7e | ||
|
|
c9642489d3 | ||
|
|
7b080797b4 | ||
|
|
d94c16eea1 | ||
|
|
3e3d409c42 | ||
|
|
a45ca12076 | ||
|
|
2e141a1ad7 | ||
|
|
4de8f0208f | ||
|
|
4aabf7d638 | ||
|
|
812310088e | ||
|
|
4e17390cfa | ||
|
|
57d629683d | ||
|
|
3666b5b0de | ||
|
|
7f64f143d7 | ||
|
|
162c66a705 | ||
|
|
14d11cc180 | ||
|
|
112fcf7804 | ||
|
|
120b426a79 |
@@ -12,6 +12,7 @@ body:
|
|||||||
- 3.0.0
|
- 3.0.0
|
||||||
- 3.1.0
|
- 3.1.0
|
||||||
- 3.2.0
|
- 3.2.0
|
||||||
|
- 3.3.0
|
||||||
- Other (please provide detail below)
|
- Other (please provide detail below)
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|||||||
+11
-11
@@ -1,17 +1,17 @@
|
|||||||
### 3.1.0-20260528 ISO image released on 2026/05/28
|
### 3.2.0-20260729 ISO image released on 2026/07/29
|
||||||
|
|
||||||
|
|
||||||
### Download and Verify
|
### Download and Verify
|
||||||
|
|
||||||
3.1.0-20260528 ISO image:
|
3.2.0-20260729 ISO image:
|
||||||
https://download.securityonion.net/file/securityonion/securityonion-3.1.0-20260528.iso
|
https://download.securityonion.net/file/securityonion/securityonion-3.2.0-20260729.iso
|
||||||
|
|
||||||
MD5: 9D6FF58DEEE24089D722C73169765B3E
|
MD5: B1E10F46DF872B655C29325DF965A4DB
|
||||||
SHA1: 2B8B816B6CEC3B7F96B3C5E040EBF502DD2C412F
|
SHA1: 0F3C7ED80F6D326B7A993C2F899B986320C01BF9
|
||||||
SHA256: 62FAB57E247C843D6A04F0796D8162C732B65D82FC3E4A59D087135B9FD32912
|
SHA256: 7465163C1D1ADFCDC3935530EAFB312E987C016941ADC11841B214553314D1FF
|
||||||
|
|
||||||
Signature for ISO image:
|
Signature for ISO image:
|
||||||
https://github.com/Security-Onion-Solutions/securityonion/raw/3/main/sigs/securityonion-3.1.0-20260528.iso.sig
|
https://github.com/Security-Onion-Solutions/securityonion/raw/3/main/sigs/securityonion-3.2.0-20260729.iso.sig
|
||||||
|
|
||||||
Signing key:
|
Signing key:
|
||||||
https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/3/main/KEYS
|
https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/3/main/KEYS
|
||||||
@@ -25,22 +25,22 @@ wget https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/3/
|
|||||||
|
|
||||||
Download the signature file for the ISO:
|
Download the signature file for the ISO:
|
||||||
```
|
```
|
||||||
wget https://github.com/Security-Onion-Solutions/securityonion/raw/3/main/sigs/securityonion-3.1.0-20260528.iso.sig
|
wget https://github.com/Security-Onion-Solutions/securityonion/raw/3/main/sigs/securityonion-3.2.0-20260729.iso.sig
|
||||||
```
|
```
|
||||||
|
|
||||||
Download the ISO image:
|
Download the ISO image:
|
||||||
```
|
```
|
||||||
wget https://download.securityonion.net/file/securityonion/securityonion-3.1.0-20260528.iso
|
wget https://download.securityonion.net/file/securityonion/securityonion-3.2.0-20260729.iso
|
||||||
```
|
```
|
||||||
|
|
||||||
Verify the downloaded ISO image using the signature file:
|
Verify the downloaded ISO image using the signature file:
|
||||||
```
|
```
|
||||||
gpg --verify securityonion-3.1.0-20260528.iso.sig securityonion-3.1.0-20260528.iso
|
gpg --verify securityonion-3.2.0-20260729.iso.sig securityonion-3.2.0-20260729.iso
|
||||||
```
|
```
|
||||||
|
|
||||||
The output should show "Good signature" and the Primary key fingerprint should match what's shown below:
|
The output should show "Good signature" and the Primary key fingerprint should match what's shown below:
|
||||||
```
|
```
|
||||||
gpg: Signature made Wed 27 May 2026 03:03:59 PM EDT using RSA key ID FE507013
|
gpg: Signature made Tue 28 Jul 2026 06:17:34 PM EDT using RSA key ID FE507013
|
||||||
gpg: Good signature from "Security Onion Solutions, LLC <info@securityonionsolutions.com>"
|
gpg: Good signature from "Security Onion Solutions, LLC <info@securityonionsolutions.com>"
|
||||||
gpg: WARNING: This key is not certified with a trusted signature!
|
gpg: WARNING: This key is not certified with a trusted signature!
|
||||||
gpg: There is no indication that the signature belongs to the owner.
|
gpg: There is no indication that the signature belongs to the owner.
|
||||||
|
|||||||
@@ -231,7 +231,7 @@ if [[ $EXCLUDE_KNOWN_ERRORS == 'Y' ]]; then
|
|||||||
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|from NIC checksum offloading" # zeek reporter.log
|
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|from NIC checksum offloading" # zeek reporter.log
|
||||||
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|marked for removal" # docker container getting recycled
|
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|marked for removal" # docker container getting recycled
|
||||||
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|tcp 127.0.0.1:6791: bind: address already in use" # so-elastic-fleet agent restarting. Seen starting w/ 8.18.8 https://github.com/elastic/kibana/issues/201459
|
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|tcp 127.0.0.1:6791: bind: address already in use" # so-elastic-fleet agent restarting. Seen starting w/ 8.18.8 https://github.com/elastic/kibana/issues/201459
|
||||||
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|TransformTask\] \[logs-(tychon|aws_billing|microsoft_defender_endpoint|armis|o365_metrics|microsoft_sentinel|snyk|cyera|island_browser).*user so_kibana lacks the required permissions \[(logs|metrics)-\1" # Known issue with integrations starting transform jobs that are explicitly not allowed to start as a system user. This error should not be seen on fresh ES 9.3.3 installs or after SO 3.1.0 with soups addition of check_transform_health_and_reauthorize()
|
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|TransformTask\] \[logs-.*user so_kibana lacks the required permissions" # Known issue with integrations starting transform jobs that are explicitly not allowed to start as a system user
|
||||||
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|manifest unknown" # appears in so-dockerregistry log for so-tcpreplay following docker upgrade to 29.2.1-1
|
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|manifest unknown" # appears in so-dockerregistry log for so-tcpreplay following docker upgrade to 29.2.1-1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -138,6 +138,8 @@ function getinstallinfo() {
|
|||||||
log "ERROR" "Failed to source install variables"
|
log "ERROR" "Failed to source install variables"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
log "INFO" "Fetched install info for $MINION_ID (node type: ${NODETYPE:-unset})"
|
||||||
}
|
}
|
||||||
|
|
||||||
function pcapspace() {
|
function pcapspace() {
|
||||||
@@ -483,6 +485,7 @@ function add_sensoroni_with_analyze_to_minion() {
|
|||||||
|
|
||||||
# Sensor settings for the minion pillar
|
# Sensor settings for the minion pillar
|
||||||
function add_sensor_to_minion() {
|
function add_sensor_to_minion() {
|
||||||
|
log "INFO" "Writing sensor configuration for $MINION_ID (interface: ${INTERFACE:-unset})"
|
||||||
{
|
{
|
||||||
echo "sensor:"
|
echo "sensor:"
|
||||||
echo " interface: '$INTERFACE'"
|
echo " interface: '$INTERFACE'"
|
||||||
@@ -509,6 +512,8 @@ function add_sensor_to_minion() {
|
|||||||
log "ERROR" "Failed to add sensor configuration to $PILLARFILE"
|
log "ERROR" "Failed to add sensor configuration to $PILLARFILE"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
log "INFO" "Wrote sensor configuration for $MINION_ID"
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_elastalert_to_minion() {
|
function add_elastalert_to_minion() {
|
||||||
@@ -581,11 +586,14 @@ function add_telegraf_to_minion() {
|
|||||||
# generates a password on first add and is a no-op on re-add so the cred
|
# generates a password on first add and is a no-op on re-add so the cred
|
||||||
# is stable across repeated so-minion runs. postgres.telegraf_users on the
|
# is stable across repeated so-minion runs. postgres.telegraf_users on the
|
||||||
# manager creates/updates the DB role from the same pillar.
|
# manager creates/updates the DB role from the same pillar.
|
||||||
so-telegraf-cred add "$MINION_ID"
|
log "INFO" "Provisioning postgres telegraf credential for $MINION_ID"
|
||||||
if [ $? -ne 0 ]; then
|
so-telegraf-cred add "$MINION_ID"
|
||||||
log "ERROR" "Failed to provision postgres telegraf cred for $MINION_ID"
|
local result=$?
|
||||||
return 1
|
if [ $result -ne 0 ]; then
|
||||||
fi
|
log "ERROR" "Failed to provision postgres telegraf cred for $MINION_ID (exit code: $result)"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
log "INFO" "Provisioned postgres telegraf credential for $MINION_ID"
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_influxdb_to_minion() {
|
function add_influxdb_to_minion() {
|
||||||
@@ -1043,7 +1051,7 @@ function updateMineAndApplyStates() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setupMinionFiles() {
|
function setupMinionFiles() {
|
||||||
log "INFO" "Setting up minion files for $MINION_ID"
|
log "INFO" "Setting up minion files for $MINION_ID (pillar: $PILLARFILE)"
|
||||||
|
|
||||||
# Check to see if nodetype is set
|
# Check to see if nodetype is set
|
||||||
if [ -z $NODETYPE ]; then
|
if [ -z $NODETYPE ]; then
|
||||||
@@ -1069,7 +1077,10 @@ function setupMinionFiles() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Create node-specific configuration
|
# Create node-specific configuration
|
||||||
create$NODETYPE || return 1
|
create$NODETYPE || {
|
||||||
|
log "ERROR" "Failed to create $NODETYPE configuration for $MINION_ID"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
# Ensure proper ownership after all content is written
|
# Ensure proper ownership after all content is written
|
||||||
ensure_socore_ownership || return 1
|
ensure_socore_ownership || return 1
|
||||||
|
|||||||
@@ -479,6 +479,7 @@ preupgrade_changes() {
|
|||||||
[[ "$INSTALLEDVERSION" =~ ^2\.4\.21[0-9]+$ ]] && up_to_3.0.0
|
[[ "$INSTALLEDVERSION" =~ ^2\.4\.21[0-9]+$ ]] && up_to_3.0.0
|
||||||
[[ "$INSTALLEDVERSION" == "3.0.0" ]] && up_to_3.1.0
|
[[ "$INSTALLEDVERSION" == "3.0.0" ]] && up_to_3.1.0
|
||||||
[[ "$INSTALLEDVERSION" == "3.1.0" ]] && up_to_3.2.0
|
[[ "$INSTALLEDVERSION" == "3.1.0" ]] && up_to_3.2.0
|
||||||
|
[[ "$INSTALLEDVERSION" == "3.2.0" ]] && up_to_3.3.0
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,6 +497,7 @@ postupgrade_changes() {
|
|||||||
[[ "$POSTVERSION" =~ ^2\.4\.21[0-9]+$ ]] && post_to_3.0.0
|
[[ "$POSTVERSION" =~ ^2\.4\.21[0-9]+$ ]] && post_to_3.0.0
|
||||||
[[ "$POSTVERSION" == "3.0.0" ]] && post_to_3.1.0
|
[[ "$POSTVERSION" == "3.0.0" ]] && post_to_3.1.0
|
||||||
[[ "$POSTVERSION" == "3.1.0" ]] && post_to_3.2.0
|
[[ "$POSTVERSION" == "3.1.0" ]] && post_to_3.2.0
|
||||||
|
[[ "$POSTVERSION" == "3.2.0" ]] && post_to_3.3.0
|
||||||
# All applicable post-upgrade steps completed; clear the resume marker.
|
# All applicable post-upgrade steps completed; clear the resume marker.
|
||||||
rm -f "$POSTVERSION_FILE"
|
rm -f "$POSTVERSION_FILE"
|
||||||
true
|
true
|
||||||
@@ -878,7 +880,7 @@ post_to_3.1.0() {
|
|||||||
recollate_postgres() {
|
recollate_postgres() {
|
||||||
echo ""
|
echo ""
|
||||||
echo "Recollating PostgreSQL databases. The following output may contain warnings about a version mismatch, followed by a note indicating that the collation version has been changed."
|
echo "Recollating PostgreSQL databases. The following output may contain warnings about a version mismatch, followed by a note indicating that the collation version has been changed."
|
||||||
for db in postgres securityonion so_telegraf; do
|
for db in template1 postgres securityonion so_telegraf; do
|
||||||
docker exec so-postgres psql -U postgres $db -c "reindex database $db"
|
docker exec so-postgres psql -U postgres $db -c "reindex database $db"
|
||||||
docker exec so-postgres psql -U postgres $db -c "alter database $db refresh collation version"
|
docker exec so-postgres psql -U postgres $db -c "alter database $db refresh collation version"
|
||||||
done
|
done
|
||||||
@@ -1004,9 +1006,19 @@ post_to_3.2.0() {
|
|||||||
|
|
||||||
set_postversion 3.2.0
|
set_postversion 3.2.0
|
||||||
}
|
}
|
||||||
|
|
||||||
### 3.2.0 End ###
|
### 3.2.0 End ###
|
||||||
|
|
||||||
|
### 3.2.0 Scripts ###
|
||||||
|
up_to_3.3.0() {
|
||||||
|
INSTALLEDVERSION=3.3.0
|
||||||
|
}
|
||||||
|
|
||||||
|
post_to_3.3.0() {
|
||||||
|
# Recollate again since some internal DBs were excluded during 3.2.0 soup
|
||||||
|
recollate_postgres
|
||||||
|
}
|
||||||
|
### 3.3.0 End ###
|
||||||
|
|
||||||
|
|
||||||
repo_sync() {
|
repo_sync() {
|
||||||
echo "Sync the local repo."
|
echo "Sync the local repo."
|
||||||
|
|||||||
@@ -96,14 +96,14 @@ http {
|
|||||||
add_header X-XSS-Protection "1; mode=block";
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
add_header X-Content-Type-Options nosniff;
|
add_header X-Content-Type-Options nosniff;
|
||||||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
|
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
|
||||||
add_header referrer-Policy no-referrer;
|
add_header Referrer-Policy no-referrer;
|
||||||
|
|
||||||
ssl_certificate "/etc/pki/nginx/server.crt";
|
ssl_certificate "/etc/pki/nginx/server.crt";
|
||||||
ssl_certificate_key "/etc/pki/nginx/server.key";
|
ssl_certificate_key "/etc/pki/nginx/server.key";
|
||||||
ssl_session_cache shared:SSL:1m;
|
ssl_session_cache shared:SSL:1m;
|
||||||
ssl_session_timeout 10m;
|
ssl_session_timeout 10m;
|
||||||
ssl_ciphers TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256:TLS_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_CCM:TLS_RSA_WITH_ARIA_256_GCM_SHA384:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_128_CCM:TLS_RSA_WITH_ARIA_128_GCM_SHA256;
|
ssl_ciphers TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256:TLS_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_CCM:TLS_RSA_WITH_ARIA_256_GCM_SHA384:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_128_CCM:TLS_RSA_WITH_ARIA_128_GCM_SHA256;
|
||||||
ssl_ecdh_curve secp521r1:secp384r1;
|
ssl_ecdh_curve X25519:secp521r1:secp384r1;
|
||||||
ssl_prefer_server_ciphers on;
|
ssl_prefer_server_ciphers on;
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
}
|
}
|
||||||
@@ -138,14 +138,14 @@ http {
|
|||||||
add_header X-XSS-Protection "1; mode=block";
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
add_header X-Content-Type-Options nosniff;
|
add_header X-Content-Type-Options nosniff;
|
||||||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
|
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
|
||||||
add_header referrer-Policy no-referrer;
|
add_header Referrer-Policy no-referrer;
|
||||||
|
|
||||||
ssl_certificate "/etc/pki/nginx/server.crt";
|
ssl_certificate "/etc/pki/nginx/server.crt";
|
||||||
ssl_certificate_key "/etc/pki/nginx/server.key";
|
ssl_certificate_key "/etc/pki/nginx/server.key";
|
||||||
ssl_session_cache shared:SSL:1m;
|
ssl_session_cache shared:SSL:1m;
|
||||||
ssl_session_timeout 10m;
|
ssl_session_timeout 10m;
|
||||||
ssl_ciphers TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256:TLS_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_CCM:TLS_RSA_WITH_ARIA_256_GCM_SHA384:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_128_CCM:TLS_RSA_WITH_ARIA_128_GCM_SHA256;
|
ssl_ciphers TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256:TLS_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_CCM:TLS_RSA_WITH_ARIA_256_GCM_SHA384:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_128_CCM:TLS_RSA_WITH_ARIA_128_GCM_SHA256;
|
||||||
ssl_ecdh_curve secp521r1:secp384r1;
|
ssl_ecdh_curve X25519:secp521r1:secp384r1;
|
||||||
ssl_prefer_server_ciphers on;
|
ssl_prefer_server_ciphers on;
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
location / {
|
location / {
|
||||||
@@ -172,14 +172,14 @@ http {
|
|||||||
add_header X-XSS-Protection "1; mode=block";
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
add_header X-Content-Type-Options nosniff;
|
add_header X-Content-Type-Options nosniff;
|
||||||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
|
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
|
||||||
add_header referrer-Policy no-referrer;
|
add_header Referrer-Policy no-referrer;
|
||||||
|
|
||||||
ssl_certificate "/etc/pki/nginx/server.crt";
|
ssl_certificate "/etc/pki/nginx/server.crt";
|
||||||
ssl_certificate_key "/etc/pki/nginx/server.key";
|
ssl_certificate_key "/etc/pki/nginx/server.key";
|
||||||
ssl_session_cache shared:SSL:1m;
|
ssl_session_cache shared:SSL:1m;
|
||||||
ssl_session_timeout 10m;
|
ssl_session_timeout 10m;
|
||||||
ssl_ciphers TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256:TLS_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_CCM:TLS_RSA_WITH_ARIA_256_GCM_SHA384:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_128_CCM:TLS_RSA_WITH_ARIA_128_GCM_SHA256;
|
ssl_ciphers TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256:TLS_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_256_CCM:TLS_RSA_WITH_ARIA_256_GCM_SHA384:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_128_CCM:TLS_RSA_WITH_ARIA_128_GCM_SHA256;
|
||||||
ssl_ecdh_curve secp521r1:secp384r1;
|
ssl_ecdh_curve X25519:secp521r1:secp384r1;
|
||||||
ssl_prefer_server_ciphers on;
|
ssl_prefer_server_ciphers on;
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
|
||||||
@@ -198,6 +198,10 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
|
if ($http_authorization ~* "^Bearer .*$") {
|
||||||
|
return 401;
|
||||||
|
}
|
||||||
|
|
||||||
auth_request /auth/sessions/whoami;
|
auth_request /auth/sessions/whoami;
|
||||||
auth_request_set $userid $upstream_http_x_kratos_authenticated_identity_id;
|
auth_request_set $userid $upstream_http_x_kratos_authenticated_identity_id;
|
||||||
proxy_set_header x-user-id $userid;
|
proxy_set_header x-user-id $userid;
|
||||||
@@ -218,6 +222,13 @@ http {
|
|||||||
add_header Cache-Control "no-cache, no-store, must-revalidate";
|
add_header Cache-Control "no-cache, no-store, must-revalidate";
|
||||||
add_header Pragma "no-cache";
|
add_header Pragma "no-cache";
|
||||||
add_header Expires "0";
|
add_header Expires "0";
|
||||||
|
|
||||||
|
add_header Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval' https: data: blob: wss:; frame-ancestors 'self'";
|
||||||
|
add_header X-Frame-Options SAMEORIGIN;
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
add_header X-Content-Type-Options nosniff;
|
||||||
|
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
|
||||||
|
add_header Referrer-Policy no-referrer;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ ^/auth/.*?(login|oidc/callback) {
|
location ~ ^/auth/.*?(login|oidc/callback) {
|
||||||
@@ -383,6 +394,11 @@ http {
|
|||||||
if ($http_authorization = "") {
|
if ($http_authorization = "") {
|
||||||
return 403;
|
return 403;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($http_authorization ~* "^Bearer .*$") {
|
||||||
|
return 401;
|
||||||
|
}
|
||||||
|
|
||||||
proxy_pass http://{{ GLOBALS.manager }}:9822/;
|
proxy_pass http://{{ GLOBALS.manager }}:9822/;
|
||||||
proxy_read_timeout 90;
|
proxy_read_timeout 90;
|
||||||
proxy_connect_timeout 90;
|
proxy_connect_timeout 90;
|
||||||
@@ -399,7 +415,7 @@ http {
|
|||||||
error_page 429 = @error429;
|
error_page 429 = @error429;
|
||||||
|
|
||||||
location @error401 {
|
location @error401 {
|
||||||
if ($request_uri ~* (^.*/api/.*|^/connect/.*|^/oauth2/.*|^/.*\.map$)) {
|
if ($request_uri ~* (^.*/api/.*|^.*/login.*|^.*/logout.*|^/connect/.*|^/oauth2/.*|^/.*\.map$)) {
|
||||||
return 401;
|
return 401;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ versionlock:
|
|||||||
# grain (compound supports nested grain matching via G@<key>:<subkey>:<value>).
|
# grain (compound supports nested grain matching via G@<key>:<subkey>:<value>).
|
||||||
# pillar/vm/soc_vm.sls write path is referenced at salt/_runners/setup_hypervisor.py:856.
|
# pillar/vm/soc_vm.sls write path is referenced at salt/_runners/setup_hypervisor.py:856.
|
||||||
vm:
|
vm:
|
||||||
- state: vm
|
- state: vm.user
|
||||||
tgt: 'G@salt-cloud:driver:libvirt'
|
tgt: 'G@salt-cloud:driver:libvirt'
|
||||||
|
|
||||||
# zeek: sensor_roles + so-import (5 roles).
|
# zeek: sensor_roles + so-import (5 roles).
|
||||||
|
|||||||
@@ -60,6 +60,9 @@ so_repo:
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
- enabled: 1
|
- enabled: 1
|
||||||
- gpgcheck: 1
|
- gpgcheck: 1
|
||||||
|
{% if not GLOBALS.is_manager %}
|
||||||
|
- sslverify: 0
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
# Only assign the kernel repo once this node's running salt matches the version this
|
# Only assign the kernel repo once this node's running salt matches the version this
|
||||||
# SO release ships. During a soup the grid is mid-salt-upgrade; gating here keeps the
|
# SO release ships. During a soup the grid is mid-salt-upgrade; gating here keeps the
|
||||||
@@ -77,6 +80,9 @@ so_kernel_repo:
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
- enabled: 1
|
- enabled: 1
|
||||||
- gpgcheck: 1
|
- gpgcheck: 1
|
||||||
|
{% if not GLOBALS.is_manager %}
|
||||||
|
- sslverify: 0
|
||||||
|
{% endif %}
|
||||||
# Supplementary kernel repo: tolerate it being empty/unreachable (e.g. before the
|
# Supplementary kernel repo: tolerate it being empty/unreachable (e.g. before the
|
||||||
# manager has populated /nsm/kernelrepo) so a missing repomd.xml can't make every
|
# manager has populated /nsm/kernelrepo) so a missing repomd.xml can't make every
|
||||||
# dnf/pkg operation on the grid fail.
|
# dnf/pkg operation on the grid fail.
|
||||||
|
|||||||
+17
-3
@@ -1512,6 +1512,10 @@ soc:
|
|||||||
rulesetName: sos-resources-ag
|
rulesetName: sos-resources-ag
|
||||||
branch: main
|
branch: main
|
||||||
folder: securityonion-normalized
|
folder: securityonion-normalized
|
||||||
|
- repo: file:///nsm/airgap-resources/playbooks/securityonion-resources-playbooks
|
||||||
|
rulesetName: sos-published-ag
|
||||||
|
branch: published
|
||||||
|
folder: sigma
|
||||||
assistant:
|
assistant:
|
||||||
systemPromptAddendum: ""
|
systemPromptAddendum: ""
|
||||||
systemPromptAddendumMaxLength: 50000
|
systemPromptAddendumMaxLength: 50000
|
||||||
@@ -1530,9 +1534,9 @@ soc:
|
|||||||
healthTimeoutSeconds: 5
|
healthTimeoutSeconds: 5
|
||||||
agentic: false
|
agentic: false
|
||||||
agentMapping:
|
agentMapping:
|
||||||
Orchestrator: Claude Sonnet
|
Orchestrator: sonnet@SOAI
|
||||||
Investigator: Claude Sonnet
|
Investigator: gemma@SOAI
|
||||||
DetectionEngineer: Claude Sonnet
|
DetectionEngineer: gemma@SOAI
|
||||||
onionconfig:
|
onionconfig:
|
||||||
saltstackDir: /opt/so/saltstack
|
saltstackDir: /opt/so/saltstack
|
||||||
bypassEnabled: false
|
bypassEnabled: false
|
||||||
@@ -2714,4 +2718,14 @@ soc:
|
|||||||
enabled: true
|
enabled: true
|
||||||
adapter: SOAI
|
adapter: SOAI
|
||||||
charsPerTokenEstimate: 4
|
charsPerTokenEstimate: 4
|
||||||
|
- id: gemma
|
||||||
|
displayName: Gemma
|
||||||
|
origin: USA
|
||||||
|
contextLimitSmall: 256000
|
||||||
|
contextLimitLarge: 256000
|
||||||
|
lowBalanceColorAlert: 500000
|
||||||
|
enabled: true
|
||||||
|
adapter: SOAI
|
||||||
|
charsPerTokenEstimate: 4
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,30 @@ transformations:
|
|||||||
process.command_line: process.command_line.caseless
|
process.command_line: process.command_line.caseless
|
||||||
process.parent.command_line: process.parent.command_line.caseless
|
process.parent.command_line: process.parent.command_line.caseless
|
||||||
file.path: file.path.caseless
|
file.path: file.path.caseless
|
||||||
|
# entity_id pivots must also match processes that were already running when the
|
||||||
|
# agent started: Defend emits already_running (event.type:info), not start.
|
||||||
|
# Kept out of Playbook sigma query because Sysmon has no equivalent concept.
|
||||||
|
# contains_field is exact, so child pivots (process.parent.entity_id) stay
|
||||||
|
# start-only. Drop must precede add;
|
||||||
|
- id: playbook_process_lifecycle_drop_start_scope
|
||||||
|
type: drop_detection_item
|
||||||
|
field_name_conditions:
|
||||||
|
- type: include_fields
|
||||||
|
fields: ['event.type']
|
||||||
|
rule_conditions:
|
||||||
|
- type: logsource
|
||||||
|
category: process_creation
|
||||||
|
- type: contains_field
|
||||||
|
field: process.entity_id
|
||||||
|
- id: playbook_process_lifecycle_add-fields
|
||||||
|
type: add_condition
|
||||||
|
conditions:
|
||||||
|
event.type: ['start', 'info']
|
||||||
|
rule_conditions:
|
||||||
|
- type: logsource
|
||||||
|
category: process_creation
|
||||||
|
- type: contains_field
|
||||||
|
field: process.entity_id
|
||||||
# file_activity: playbook-only pseudo-category spanning all file operations.
|
# file_activity: playbook-only pseudo-category spanning all file operations.
|
||||||
- id: playbook_file_activity_add-fields
|
- id: playbook_file_activity_add-fields
|
||||||
type: add_condition
|
type: add_condition
|
||||||
|
|||||||
@@ -68,13 +68,25 @@ transformations:
|
|||||||
- type: logsource
|
- type: logsource
|
||||||
category: antivirus
|
category: antivirus
|
||||||
# OS-agnostic process_creation scoping for product-less (NIDS/host-pivot) rules.
|
# OS-agnostic process_creation scoping for product-less (NIDS/host-pivot) rules.
|
||||||
|
# pySigma: rule_cond_expr requires rule_conditions as a mapping, not a list.
|
||||||
- id: process_creation_os_agnostic
|
- id: process_creation_os_agnostic
|
||||||
type: add_condition
|
type: add_condition
|
||||||
conditions:
|
conditions:
|
||||||
event.category: process
|
event.category: process
|
||||||
rule_conditions:
|
rule_conditions:
|
||||||
- type: logsource
|
pc_cat:
|
||||||
category: process_creation
|
type: logsource
|
||||||
|
category: process_creation
|
||||||
|
pc_win:
|
||||||
|
type: logsource
|
||||||
|
product: windows
|
||||||
|
pc_mac:
|
||||||
|
type: logsource
|
||||||
|
product: macos
|
||||||
|
pc_lin:
|
||||||
|
type: logsource
|
||||||
|
product: linux
|
||||||
|
rule_cond_expr: "pc_cat and not (pc_win or pc_mac or pc_lin)"
|
||||||
# Transforms the `Hashes` field to ECS fields
|
# Transforms the `Hashes` field to ECS fields
|
||||||
# ECS fields are used by the hash fields emitted by Elastic Defend
|
# ECS fields are used by the hash fields emitted by Elastic Defend
|
||||||
# If shipped with Elastic Agent, sysmon logs will also have hashes mapped to ECS fields
|
# If shipped with Elastic Agent, sysmon logs will also have hashes mapped to ECS fields
|
||||||
@@ -630,4 +642,4 @@ transformations:
|
|||||||
tags: '*file'
|
tags: '*file'
|
||||||
rule_conditions:
|
rule_conditions:
|
||||||
- type: logsource
|
- type: logsource
|
||||||
category: file
|
category: file
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user