mirror of
https://github.com/splunk/security_content
synced 2026-06-08 17:32:49 +00:00
Branch was auto-updated.
This commit is contained in:
@@ -1,509 +0,0 @@
|
||||
#This file makes use of a number of useful, external Github Actions.
|
||||
#Check the links below for additional documentation on each of these:
|
||||
#https://github.com/actions/setup-python
|
||||
#https://github.com/actions/setup-node
|
||||
#https://github.com/actions/checkout
|
||||
#https://github.com/actions/upload-artifact
|
||||
|
||||
#The mechanism for persisting data between jobs in a workflow is the same as for persisting it
|
||||
#permanently:
|
||||
#https://docs.github.com/en/actions/guides/storing-workflow-data-as-artifacts
|
||||
#In CircleCI, this was different (store_artifacts vs persist_to_workspace)
|
||||
|
||||
name: build-and-validate
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
types: [opened, reopened]
|
||||
jobs:
|
||||
validate-tag-if-present:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: TAGGED, Validate that the tag is in the correct format
|
||||
|
||||
run: |
|
||||
echo "The GITHUB_REF: $GITHUB_REF"
|
||||
#First check to see if the release is a tag
|
||||
if [[ $GITHUB_REF =~ refs/tags/* ]]; then
|
||||
#Yes, this is a tag, so we need to test to make sure that the tag
|
||||
#is in the correct format (like v1.10.20)
|
||||
if [[ $GITHUB_REF =~ refs/tags/v[0-9]+.[0-9]+.[0-9]+ ]]; then
|
||||
echo "PASS: Tagged release with good format"
|
||||
exit 0
|
||||
else
|
||||
echo "FAIL: Tagged release with bad format"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "PASS: Not a tagged release"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
validate-and-build:
|
||||
#Note that the CircleCI job used a Container. The way to do this with Github Actions
|
||||
#is to first start up a Virtual Machine, then we can by following:
|
||||
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idcontainer
|
||||
runs-on: ubuntu-latest
|
||||
needs: [validate-tag-if-present]
|
||||
steps:
|
||||
|
||||
- name: Configure Enrichment and Tag
|
||||
id: vars
|
||||
run: |
|
||||
if [ $(echo ${GITHUB_REF} | grep "^refs/tags/*") ]; then
|
||||
#failed to find the refs/tags/ beginning, grab and set the tag
|
||||
echo "Release is TAGGED!"
|
||||
echo "::set-output name=tag::${GITHUB_REF#refs/tags/}"
|
||||
echo "::set-output name=skip_enrichment_var::"
|
||||
else
|
||||
#Not a tagged relese
|
||||
echo "Release is NOT TAGGED!"
|
||||
echo "::set-output name=tag::"
|
||||
echo "::set-output name=skip_enrichment_var::--skip_enrichment"
|
||||
fi
|
||||
|
||||
#Previous config chose which branch/tag to operate on.
|
||||
#I think Github is smart enough to choose based on whether it's a pull request or push + other info?
|
||||
- name: Check out the repository code
|
||||
uses: actions/checkout@v3
|
||||
#with:
|
||||
# repository: splunk/security-content #check out https://github.com/mitre/cti.git, defaults to HEAD
|
||||
# path: "security-content"
|
||||
|
||||
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||
|
||||
|
||||
- name: Install System Packages
|
||||
run: |
|
||||
sudo apt update -qq
|
||||
sudo apt install jq -qq
|
||||
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
#Get the virtualenv set up
|
||||
rm -rf venv
|
||||
python -m venv --clear .venv
|
||||
source .venv/bin/activate
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install wheel
|
||||
python -m pip install -q -r requirements.txt
|
||||
|
||||
- name: content_ctl validate
|
||||
run: |
|
||||
source .venv/bin/activate
|
||||
python contentctl.py -p . ${{ steps.vars.outputs.skip_enrichment_var }} validate -pr ESCU
|
||||
python contentctl.py -p . ${{ steps.vars.outputs.skip_enrichment_var }} validate -pr SSA
|
||||
|
||||
|
||||
|
||||
- name: contentctl generate
|
||||
run: |
|
||||
source .venv/bin/activate
|
||||
rm -rf dist/escu/default/data/ui/panels/*.xml
|
||||
python contentctl.py --path . ${{ steps.vars.outputs.skip_enrichment_var }} generate --product ESCU --output dist/escu
|
||||
python contentctl.py --path . ${{ steps.vars.outputs.skip_enrichment_var }} generate --product SSA --output dist/ssa
|
||||
python contentctl.py --path . ${{ steps.vars.outputs.skip_enrichment_var }} generate --product API --output dist/api
|
||||
|
||||
- name: Copy lookups .mlmodel files
|
||||
run: |
|
||||
cd lookups
|
||||
count=`ls -1 *.mlmodel 2>/dev/null | wc -l`
|
||||
if [ $count != 0 ]
|
||||
then
|
||||
cp -rv *.mlmodel ../dist/escu/lookups
|
||||
else
|
||||
echo "No mlmodel files to copy"
|
||||
fi
|
||||
|
||||
- name: Update Version and Build number
|
||||
run : |
|
||||
# check if tag is set, get build number from the tag if set
|
||||
if [ -z "${{ steps.vars.outputs.tag }}" ]; then
|
||||
CONTENT_VERSION=$(grep -oP "(\d+.\d+.\d+$)" dist/escu/default/content-version.conf)
|
||||
echo "detected content version: $CONTENT_VERSION"
|
||||
else
|
||||
CONTENT_VERSION=$(echo ${{ steps.vars.outputs.tag }} | grep -oP "\d+.\d+.\d+")
|
||||
echo "content version: $CONTENT_VERSION, set by tag: ${{ steps.vars.outputs.tag }}"
|
||||
fi
|
||||
# update build number and version for ESCU
|
||||
sed -i "s/build = .*$/build = ${{ github.run_number }}/g" dist/escu/default/app.conf
|
||||
sed -i "s/^version = .*$/version = $CONTENT_VERSION/g" dist/escu/default/app.conf
|
||||
sed -i "s/\"version\": .*$/\"version\": \"$CONTENT_VERSION\"/g" dist/escu/app.manifest
|
||||
sed -i "s/version = .*$/version = $CONTENT_VERSION/g" dist/escu/default/content-version.conf
|
||||
mkdir build
|
||||
tar -czf build/content-pack-build-escu.tar.gz dist/escu/*
|
||||
# update build number and version for ssa
|
||||
tar -czf build/content-pack-build-ssa.tar.gz dist/ssa/*
|
||||
tar -czf build/content-pack-build-api.tar.gz dist/api/*
|
||||
|
||||
|
||||
- name: Build ESCU
|
||||
run: |
|
||||
source .venv/bin/activate
|
||||
cd build
|
||||
tar -zxf content-pack-build-escu.tar.gz
|
||||
tar -zxf content-pack-build-ssa.tar.gz
|
||||
tar -zxf content-pack-build-api.tar.gz
|
||||
mv dist/escu DA-ESS-ContentUpdate
|
||||
mv dist/ssa SSA_Content
|
||||
mv dist/api API_Content
|
||||
|
||||
#Build ESCU Content
|
||||
#Do not use slim for speed, simplicity, and compatability
|
||||
tar -zcf DA-ESS-ContentUpdate-latest.tar.gz DA-ESS-ContentUpdate
|
||||
sha256sum DA-ESS-ContentUpdate-latest.tar.gz > checksum.txt
|
||||
|
||||
#Build the SSA Content
|
||||
#Do not use slim for speed, simplicity, and compatability
|
||||
tar -zcf SSA_Content-latest.tar.gz SSA_Content
|
||||
sha256sum SSA_Content-latest.tar.gz >> checksum.txt
|
||||
|
||||
#Package the API Content
|
||||
tar -zcf API_Content-latest.tar.gz API_Content
|
||||
sha256sum API_Content-latest.tar.gz >> checksum.txt
|
||||
|
||||
|
||||
- name: store_artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: content-latest
|
||||
path: |
|
||||
build/DA-ESS-ContentUpdate-latest.tar.gz
|
||||
build/SSA_Content-latest.tar.gz
|
||||
build/API_Content-latest.tar.gz
|
||||
build/checksum.txt
|
||||
|
||||
|
||||
#Everything below this line should ONLY run on a tag and nothing else
|
||||
#We still want all of the above checks to run and pass before running these
|
||||
run-appinspect:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [validate-and-build]
|
||||
#Only run when tagged
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
steps:
|
||||
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: 'develop'
|
||||
|
||||
#Download the artifacts we want to check
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: content-latest
|
||||
path: build/
|
||||
|
||||
- name: Install System Packages
|
||||
run: |
|
||||
sudo apt update -qq
|
||||
sudo apt install jq -qq
|
||||
|
||||
- name: Submit ESCU to AppInspect API
|
||||
env:
|
||||
APPINSPECT_USERNAME: ${{ secrets.AppInspectUsername }}
|
||||
APPINSPECT_PASSWORD: ${{ secrets.AppInspectPassword }}
|
||||
run: |
|
||||
cd bin
|
||||
#Enclose in quotes in case there are any special characters in the username/password
|
||||
#Better not to pass these arguments on the command line, if possible
|
||||
./appinspect.sh ../ DA-ESS-ContentUpdate-latest.tar.gz "$APPINSPECT_USERNAME" "$APPINSPECT_PASSWORD"
|
||||
|
||||
- name: Create report artifact
|
||||
if: always()
|
||||
run: |
|
||||
#Always create this, regardless of whether success or failure above
|
||||
tar -cvzf report.tar.gz report/
|
||||
|
||||
- name: store_artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: appinspect_reports
|
||||
path: |
|
||||
report.tar.gz
|
||||
|
||||
#Still store the report, even if we have failed (otherwise we don't know why/how we failed)
|
||||
- name: store_artifacts_on_failure
|
||||
uses: actions/upload-artifact@v3
|
||||
if: failure()
|
||||
with:
|
||||
name: appinspect_reports_failure
|
||||
path: |
|
||||
report.tar.gz
|
||||
|
||||
|
||||
create-report:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [validate-and-build, run-appinspect]
|
||||
#Only run when tagged
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: 'develop'
|
||||
|
||||
- name: Install System Packages
|
||||
run: |
|
||||
sudo apt update -qq
|
||||
sudo apt install jq -qq
|
||||
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
#Get the virtualenv set up
|
||||
rm -rf venv
|
||||
python -m venv --clear venv
|
||||
source venv/bin/activate
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install wheel
|
||||
python -m pip install -q -r requirements.txt
|
||||
|
||||
- name: run reporting
|
||||
run: |
|
||||
source venv/bin/activate
|
||||
python contentctl.py -p . reporting
|
||||
|
||||
#Official, Verified Amazon-AWS Github Account Provided Action
|
||||
- uses: aws-actions/configure-aws-credentials@v2
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
# aws-session-token: ${{ secrets.AWS_SESSION_TOKEN }} # if you have/need it
|
||||
aws-region: us-west-1 #assume we will always use this, could make this an environment variable...
|
||||
|
||||
- name: Upload Reporting
|
||||
run: |
|
||||
aws s3 cp bin/reporting s3://security-content/reporting --recursive --exclude "*" --include "*.svg"
|
||||
|
||||
update-sources-github:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
# Need the write permission because this job commits changes to some folders like dist
|
||||
contents: write
|
||||
needs: [validate-and-build, run-appinspect, create-report]
|
||||
#Only run when tagged
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
steps:
|
||||
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
token: ${{ secrets.SECURITY_CONTENT_ADMIN_TASKS }}
|
||||
ref: 'develop'
|
||||
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: content-latest
|
||||
|
||||
- name: Stage artifacts in proper directories
|
||||
run: |
|
||||
mkdir latest-escu
|
||||
tar -zxf DA-ESS-ContentUpdate-latest.tar.gz -C latest-escu --strip-components=1
|
||||
|
||||
mkdir latest-ssa
|
||||
tar -zxf SSA_Content-latest.tar.gz -C latest-ssa --strip-components=1
|
||||
|
||||
mkdir latest-api
|
||||
tar -zxf API_Content-latest.tar.gz -C latest-api --strip-components=1
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
#Get the virtualenv set up
|
||||
rm -rf venv
|
||||
python -m venv --clear venv
|
||||
source venv/bin/activate
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install wheel
|
||||
python -m pip install -q -r requirements.txt
|
||||
|
||||
- name: Get branch and PR required for detection testing main.py
|
||||
id: vars
|
||||
run: |
|
||||
echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
|
||||
|
||||
- name: Run reporting
|
||||
run: |
|
||||
source venv/bin/activate
|
||||
python contentctl.py -p . reporting
|
||||
|
||||
- name: Update github with new docs and package bits
|
||||
run: |
|
||||
rm -rf dist
|
||||
mkdir dist
|
||||
mv latest-escu dist/escu
|
||||
mv latest-ssa dist/ssa
|
||||
mv latest-api dist/api
|
||||
# configure git to prep for commit
|
||||
git config user.email "research@splunk.com"
|
||||
git config user.name "research bot"
|
||||
git config --global push.default simple
|
||||
git add dist/*
|
||||
git add docs/*
|
||||
git add detections/*
|
||||
git commit --allow-empty -m "Update dist/escu, dist/ssa, and dist/api folders with the latest content associated with this tag "
|
||||
# Push quietly to prevent showing the token in log
|
||||
#No need to provide any credentials
|
||||
git push
|
||||
|
||||
publish-github-release:
|
||||
#Github-maintained release action is in archived state: https://github.com/actions/create-release
|
||||
#They recommend several and we use the following with the most stars: https://github.com/softprops/action-gh-release
|
||||
runs-on: ubuntu-latest
|
||||
needs: [validate-and-build, run-appinspect, create-report]
|
||||
#Only run when tagged
|
||||
# adding perms needed
|
||||
permissions:
|
||||
contents: write
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
steps:
|
||||
|
||||
#Get the artifacts that we need
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: content-latest
|
||||
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: appinspect_reports
|
||||
|
||||
#Rename those artifacts appropriately
|
||||
- name: Set tag
|
||||
id: vars
|
||||
run: echo "::set-output name=tag::${GITHUB_REF#refs/*/}"
|
||||
|
||||
- name: Rename the content-update appropriately
|
||||
run: |
|
||||
cp DA-ESS-ContentUpdate-latest.tar.gz DA-ESS-ContentUpdate-${{ steps.vars.outputs.tag }}.tar.gz
|
||||
cp SSA_Content-latest.tar.gz SSA_Content-${{ steps.vars.outputs.tag }}.tar.gz
|
||||
cp API_Content-latest.tar.gz API_Content-${{ steps.vars.outputs.tag }}.tar.gz
|
||||
|
||||
#No checksum on the reports
|
||||
cp report.tar.gz report-${{ steps.vars.outputs.tag }}.tar.gz
|
||||
cp checksum.txt checksum-${{ steps.vars.outputs.tag }}.txt
|
||||
|
||||
#Upload all of the artifacts that we have created using the third party
|
||||
#action recommended bu Github
|
||||
- name: Upload Release Artifacts
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: |
|
||||
DA-ESS-ContentUpdate-${{ steps.vars.outputs.tag }}.tar.gz
|
||||
SSA_Content-${{ steps.vars.outputs.tag }}.tar.gz
|
||||
API_Content-${{ steps.vars.outputs.tag }}.tar.gz
|
||||
report-${{ steps.vars.outputs.tag }}.tar.gz
|
||||
checksum-${{ steps.vars.outputs.tag }}.txt
|
||||
|
||||
attack-range-update:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [validate-and-build, run-appinspect, create-report]
|
||||
#Only run when tagged
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
steps:
|
||||
|
||||
#Get the artifacts that we need
|
||||
- uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: content-latest
|
||||
|
||||
#Official, Verified Amazon-AWS Github Account Provided Action
|
||||
- uses: aws-actions/configure-aws-credentials@v2
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
# aws-session-token: ${{ secrets.AWS_SESSION_TOKEN }} # if you have/need it
|
||||
aws-region: us-west-1 #assume we will always use this, could make this an environment variable...
|
||||
|
||||
- name: Sync latest ESCU to the Attack Range S3 bucket for apps
|
||||
run: |
|
||||
aws s3 cp DA-ESS-ContentUpdate-latest.tar.gz s3://attack-range-appbinaries/
|
||||
# make the file public since it is not by default
|
||||
aws s3api put-object-acl --bucket attack-range-appbinaries --key DA-ESS-ContentUpdate-latest.tar.gz --acl public-read
|
||||
|
||||
master-api-update:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [validate-and-build, run-appinspect, create-report]
|
||||
#Only run when tagged
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: 'develop'
|
||||
|
||||
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
#Get the virtualenv set up
|
||||
rm -rf venv
|
||||
python -m venv --clear venv
|
||||
source venv/bin/activate
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install wheel
|
||||
python -m pip install -q -r requirements.txt
|
||||
|
||||
- name: Create YML to JSON Folder
|
||||
run: |
|
||||
source venv/bin/activate
|
||||
python contentctl.py --path . generate --product API --output dist/api
|
||||
|
||||
- name: Generate content version and timestamp JSON
|
||||
run : |
|
||||
VERSION_VAL=$GITHUB_REF_NAME
|
||||
VERSION_TS=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
echo "{\"version\":{\"name\":\"$VERSION_VAL\",\"published_at\":\"$VERSION_TS\"}}" > dist/api/version.json
|
||||
echo "contents of version.json:"
|
||||
cat dist/api/version.json
|
||||
|
||||
|
||||
#Official, Verified Amazon-AWS Github Account Provided Action
|
||||
- uses: aws-actions/configure-aws-credentials@v2
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
# aws-session-token: ${{ secrets.AWS_SESSION_TOKEN }} # if you have/need it
|
||||
aws-region: us-west-1 #assume we will always use this, could make this an environment variable...
|
||||
|
||||
- name: Update API sources
|
||||
run: |
|
||||
aws s3 rm s3://security-content --recursive --exclude "*" --include "*.yml"
|
||||
aws s3 cp stories s3://security-content/stories --recursive --exclude "*" --include "*.yml"
|
||||
aws s3 cp baselines s3://security-content/baselines --recursive --exclude "*" --include "*.yml"
|
||||
aws s3 cp detections s3://security-content/detections --recursive --exclude "*" --include "*.yml"
|
||||
aws s3 cp playbooks s3://security-content/playbooks --recursive --exclude "*" --include "*.yml"
|
||||
aws s3 cp lookups s3://security-content/lookups --recursive --exclude "*" --include "*.yml"
|
||||
aws s3 cp lookups s3://security-content/lookups --recursive --exclude "*" --include "*.csv"
|
||||
aws s3 cp lookups s3://security-content/lookups --recursive --exclude "*" --include "*.mlmodel"
|
||||
aws s3 cp macros s3://security-content/macros --recursive --exclude "*" --include "*.yml"
|
||||
aws s3 cp deployments s3://security-content/deployments --recursive --exclude "*" --include "*.yml"
|
||||
aws s3 cp dist/api s3://security-content/json --recursive --exclude "*" --include "*.json"
|
||||
|
||||
- name: Security Content API Smoke Test
|
||||
run: |
|
||||
API_URL='https://content.splunkresearch.com/detections'
|
||||
API_STATUS=$(curl -s -o /dev/null -w "%{http_code}" $API_URL)
|
||||
echo "Security Content API Status: $API_STATUS"
|
||||
if [ "$API_STATUS" != "200" ]; then
|
||||
echo "Error [Security Content API status: $API_STATUS]"
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,48 +0,0 @@
|
||||
name: detection-smoketesting
|
||||
on:
|
||||
schedule:
|
||||
- cron: "44 4 * * *"
|
||||
jobs:
|
||||
docker-detection-smoketest:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v2
|
||||
#with:
|
||||
# ref: develop
|
||||
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: "3.9" #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
architecture: "x64" # optional x64 or x86. Defaults to x64 if not specified
|
||||
cache: "pip"
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate
|
||||
python -m pip install wheel
|
||||
python -m pip install -r requirements.txt
|
||||
|
||||
- name: Run the Smoketesting
|
||||
run: |
|
||||
source .venv/bin/activate
|
||||
cd bin/docker_detection_tester
|
||||
python detection_testing_execution.py run --branch develop --mode smoketest --config_file test_config_github_actions.json --num_containers 1
|
||||
|
||||
# Summarize all results in a different step so they are easy to read/jump to
|
||||
- name: Run the Smoketesting
|
||||
run: |
|
||||
source .venv/bin/activate
|
||||
cd bin/docker_detection_tester
|
||||
python summarize_json.py -o test_results/summary_smoketest.json -f test_results/summary.json --smoketest
|
||||
|
||||
# Upload Results even on failure. Results are even more important in the event of a failure
|
||||
- name: Upload Test Results Files
|
||||
uses: actions/upload-artifact@v2
|
||||
if: always()
|
||||
with:
|
||||
name: smoketest_results
|
||||
path: |
|
||||
bin/docker_detection_tester/test_results/summary.json
|
||||
bin/docker_detection_tester/test_results/summary_smoketest.json
|
||||
@@ -1,345 +1,345 @@
|
||||
name: detection-testing
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
types: [opened, reopened]
|
||||
schedule:
|
||||
- cron: "44 4 * * *"
|
||||
jobs:
|
||||
# name: detection-testing
|
||||
# on:
|
||||
# push:
|
||||
# pull_request:
|
||||
# types: [opened, reopened]
|
||||
# schedule:
|
||||
# - cron: "44 4 * * *"
|
||||
# jobs:
|
||||
|
||||
validate-tag-if-present:
|
||||
runs-on: ubuntu-latest
|
||||
# validate-tag-if-present:
|
||||
# runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: TAGGED, Validate that the tag is in the correct format
|
||||
# steps:
|
||||
# - name: TAGGED, Validate that the tag is in the correct format
|
||||
|
||||
run: |
|
||||
echo "The GITHUB_REF: $GITHUB_REF"
|
||||
#First check to see if the release is a tag
|
||||
if [[ $GITHUB_REF =~ refs/tags/* ]]; then
|
||||
#Yes, this is a tag, so we need to test to make sure that the tag
|
||||
#is in the correct format (like v1.10.20)
|
||||
if [[ $GITHUB_REF =~ refs/tags/v[0-9]+.[0-9]+.[0-9]+ ]]; then
|
||||
echo "PASS: Tagged release with good format"
|
||||
exit 0
|
||||
else
|
||||
echo "FAIL: Tagged release with bad format"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "PASS: Not a tagged release"
|
||||
exit 0
|
||||
fi
|
||||
# run: |
|
||||
# echo "The GITHUB_REF: $GITHUB_REF"
|
||||
# #First check to see if the release is a tag
|
||||
# if [[ $GITHUB_REF =~ refs/tags/* ]]; then
|
||||
# #Yes, this is a tag, so we need to test to make sure that the tag
|
||||
# #is in the correct format (like v1.10.20)
|
||||
# if [[ $GITHUB_REF =~ refs/tags/v[0-9]+.[0-9]+.[0-9]+ ]]; then
|
||||
# echo "PASS: Tagged release with good format"
|
||||
# exit 0
|
||||
# else
|
||||
# echo "FAIL: Tagged release with bad format"
|
||||
# exit 1
|
||||
# fi
|
||||
# else
|
||||
# echo "PASS: Not a tagged release"
|
||||
# exit 0
|
||||
# fi
|
||||
|
||||
quit-for-dependabot:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]'
|
||||
steps:
|
||||
- name: "Placeholder"
|
||||
run: |
|
||||
echo "yes it ran"
|
||||
# quit-for-dependabot:
|
||||
# runs-on: ubuntu-latest
|
||||
# if: github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]'
|
||||
# steps:
|
||||
# - name: "Placeholder"
|
||||
# run: |
|
||||
# echo "yes it ran"
|
||||
|
||||
docker-detection-testing-setup:
|
||||
runs-on: ubuntu-latest
|
||||
if: "!contains(github.ref, 'refs/tags/')" #don't run on tags - future steps won't run either since they depend on this job
|
||||
needs: [validate-tag-if-present, quit-for-dependabot]
|
||||
steps:
|
||||
- name: Get branch and PR required for detection testing main.py
|
||||
id: vars
|
||||
run: |
|
||||
echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
|
||||
# docker-detection-testing-setup:
|
||||
# runs-on: ubuntu-latest
|
||||
# if: "!contains(github.ref, 'refs/tags/')" #don't run on tags - future steps won't run either since they depend on this job
|
||||
# needs: [validate-tag-if-present, quit-for-dependabot]
|
||||
# steps:
|
||||
# - name: Get branch and PR required for detection testing main.py
|
||||
# id: vars
|
||||
# run: |
|
||||
# echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
|
||||
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v2
|
||||
#with:
|
||||
# ref: develop
|
||||
# - name: Checkout Repo
|
||||
# uses: actions/checkout@v2
|
||||
# #with:
|
||||
# # ref: develop
|
||||
|
||||
|
||||
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||
cache: 'pip'
|
||||
# - uses: actions/setup-python@v2
|
||||
# with:
|
||||
# python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
# architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||
# cache: 'pip'
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate
|
||||
python -m pip install wheel
|
||||
python -m pip install -r requirements.txt
|
||||
# - name: Install Python Dependencies
|
||||
# run: |
|
||||
# python -m venv .venv
|
||||
# source .venv/bin/activate
|
||||
# python -m pip install wheel
|
||||
# python -m pip install -r requirements.txt
|
||||
|
||||
- name: Run the CI
|
||||
run: |
|
||||
source .venv/bin/activate
|
||||
cd bin/docker_detection_tester
|
||||
echo "github.event.issue.pull_request : [${{ github.event.issue.pull_request }}]"
|
||||
echo "github.event.pull_request.number : [${{ github.event.pull_request.number }}]"
|
||||
echo "steps.vars.outputs.branch : [${{ steps.vars.outputs.branch }}]"
|
||||
echo "github.event.pull_request.head.ref : [${{ github.event.pull_request.head.ref }}]"
|
||||
echo "github.event_name : [${{ github.event_name }}]"
|
||||
# - name: Run the CI
|
||||
# run: |
|
||||
# source .venv/bin/activate
|
||||
# cd bin/docker_detection_tester
|
||||
# echo "github.event.issue.pull_request : [${{ github.event.issue.pull_request }}]"
|
||||
# echo "github.event.pull_request.number : [${{ github.event.pull_request.number }}]"
|
||||
# echo "steps.vars.outputs.branch : [${{ steps.vars.outputs.branch }}]"
|
||||
# echo "github.event.pull_request.head.ref : [${{ github.event.pull_request.head.ref }}]"
|
||||
# echo "github.event_name : [${{ github.event_name }}]"
|
||||
|
||||
|
||||
if [[ ${{ github.event_name }} == schedule ]]; then
|
||||
# Note that scheduled actions ONLY run on the default branch, so it won't run on all other branches!
|
||||
echo "Running a nightly test on all detections OR a commit was made directly to develop"
|
||||
python detection_testing_execution.py run --branch develop --mode all --mock --config_file test_config_github_actions.json
|
||||
elif [[ ! -z "${{ github.event.pull_request.head.ref }}" && ! -z "${{ github.event.pull_request.number }}" ]]; then
|
||||
echo "Pull request from source branch [${{ github.event.pull_request.head.ref }}] for PR number [${{ github.event.issue.number }}]"
|
||||
python detection_testing_execution.py run --branch ${{ github.event.pull_request.head.ref }} --pr_number ${{ github.event.pull_request.number }} --mode changes --mock --config_file test_config_github_actions.json
|
||||
else
|
||||
echo "Push from branch [${{ steps.vars.outputs.branch }}]"
|
||||
python detection_testing_execution.py run --branch ${{ steps.vars.outputs.branch }} --mode changes --mock --config_file test_config_github_actions.json
|
||||
fi
|
||||
# if [[ ${{ github.event_name }} == schedule ]]; then
|
||||
# # Note that scheduled actions ONLY run on the default branch, so it won't run on all other branches!
|
||||
# echo "Running a nightly test on all detections OR a commit was made directly to develop"
|
||||
# python detection_testing_execution.py run --branch develop --mode all --mock --config_file test_config_github_actions.json
|
||||
# elif [[ ! -z "${{ github.event.pull_request.head.ref }}" && ! -z "${{ github.event.pull_request.number }}" ]]; then
|
||||
# echo "Pull request from source branch [${{ github.event.pull_request.head.ref }}] for PR number [${{ github.event.issue.number }}]"
|
||||
# python detection_testing_execution.py run --branch ${{ github.event.pull_request.head.ref }} --pr_number ${{ github.event.pull_request.number }} --mode changes --mock --config_file test_config_github_actions.json
|
||||
# else
|
||||
# echo "Push from branch [${{ steps.vars.outputs.branch }}]"
|
||||
# python detection_testing_execution.py run --branch ${{ steps.vars.outputs.branch }} --mode changes --mock --config_file test_config_github_actions.json
|
||||
# fi
|
||||
|
||||
mv *-test-run.json replicate_test.json
|
||||
- name: Upload Test Results Files
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: testing-results-config
|
||||
path: |
|
||||
bin/docker_detection_tester/prior_config/apps/DA-ESS-ContentUpdate-latest.tar.gz
|
||||
bin/docker_detection_tester/prior_config/config_tests_0.json
|
||||
bin/docker_detection_tester/prior_config/config_tests_1.json
|
||||
bin/docker_detection_tester/prior_config/config_tests_2.json
|
||||
bin/docker_detection_tester/prior_config/config_tests_3.json
|
||||
bin/docker_detection_tester/prior_config/config_tests_4.json
|
||||
bin/docker_detection_tester/prior_config/config_tests_5.json
|
||||
bin/docker_detection_tester/prior_config/config_tests_6.json
|
||||
bin/docker_detection_tester/prior_config/config_tests_7.json
|
||||
bin/docker_detection_tester/prior_config/config_tests_8.json
|
||||
bin/docker_detection_tester/prior_config/config_tests_9.json
|
||||
# mv *-test-run.json replicate_test.json
|
||||
# - name: Upload Test Results Files
|
||||
# uses: actions/upload-artifact@v2
|
||||
# with:
|
||||
# name: testing-results-config
|
||||
# path: |
|
||||
# bin/docker_detection_tester/prior_config/apps/DA-ESS-ContentUpdate-latest.tar.gz
|
||||
# bin/docker_detection_tester/prior_config/config_tests_0.json
|
||||
# bin/docker_detection_tester/prior_config/config_tests_1.json
|
||||
# bin/docker_detection_tester/prior_config/config_tests_2.json
|
||||
# bin/docker_detection_tester/prior_config/config_tests_3.json
|
||||
# bin/docker_detection_tester/prior_config/config_tests_4.json
|
||||
# bin/docker_detection_tester/prior_config/config_tests_5.json
|
||||
# bin/docker_detection_tester/prior_config/config_tests_6.json
|
||||
# bin/docker_detection_tester/prior_config/config_tests_7.json
|
||||
# bin/docker_detection_tester/prior_config/config_tests_8.json
|
||||
# bin/docker_detection_tester/prior_config/config_tests_9.json
|
||||
|
||||
- name: Upload File to Enable Replication of the Test at a Different Time or Place
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: replicate_test
|
||||
path: |
|
||||
bin/docker_detection_tester/replicate_test.json
|
||||
# - name: Upload File to Enable Replication of the Test at a Different Time or Place
|
||||
# uses: actions/upload-artifact@v2
|
||||
# with:
|
||||
# name: replicate_test
|
||||
# path: |
|
||||
# bin/docker_detection_tester/replicate_test.json
|
||||
|
||||
docker-detection-testing-execution:
|
||||
runs-on: ubuntu-latest
|
||||
if: "!contains(github.ref, 'refs/tags/')" #don't run on tags - future steps won't run either since they depend on this job
|
||||
needs: [docker-detection-testing-setup]
|
||||
strategy:
|
||||
matrix:
|
||||
manifest_filename: ["config_tests_0.json",
|
||||
"config_tests_1.json",
|
||||
"config_tests_2.json",
|
||||
"config_tests_3.json",
|
||||
"config_tests_4.json",
|
||||
"config_tests_5.json",
|
||||
"config_tests_6.json",
|
||||
"config_tests_7.json",
|
||||
"config_tests_8.json",
|
||||
"config_tests_9.json"]
|
||||
steps:
|
||||
- name: Get branch and PR required for detection testing main.py
|
||||
id: vars
|
||||
run: |
|
||||
echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
|
||||
# docker-detection-testing-execution:
|
||||
# runs-on: ubuntu-latest
|
||||
# if: "!contains(github.ref, 'refs/tags/')" #don't run on tags - future steps won't run either since they depend on this job
|
||||
# needs: [docker-detection-testing-setup]
|
||||
# strategy:
|
||||
# matrix:
|
||||
# manifest_filename: ["config_tests_0.json",
|
||||
# "config_tests_1.json",
|
||||
# "config_tests_2.json",
|
||||
# "config_tests_3.json",
|
||||
# "config_tests_4.json",
|
||||
# "config_tests_5.json",
|
||||
# "config_tests_6.json",
|
||||
# "config_tests_7.json",
|
||||
# "config_tests_8.json",
|
||||
# "config_tests_9.json"]
|
||||
# steps:
|
||||
# - name: Get branch and PR required for detection testing main.py
|
||||
# id: vars
|
||||
# run: |
|
||||
# echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
|
||||
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v2
|
||||
#with:
|
||||
# ref: develop
|
||||
# - name: Checkout Repo
|
||||
# uses: actions/checkout@v2
|
||||
# #with:
|
||||
# # ref: develop
|
||||
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: testing-results-config
|
||||
path: bin/docker_detection_tester/prior_config
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v2
|
||||
# with:
|
||||
# name: testing-results-config
|
||||
# path: bin/docker_detection_tester/prior_config
|
||||
|
||||
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||
cache: 'pip'
|
||||
# - uses: actions/setup-python@v2
|
||||
# with:
|
||||
# python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
# architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||
# cache: 'pip'
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate
|
||||
python -m pip install wheel
|
||||
python -m pip install -r requirements.txt
|
||||
# - name: Install Python Dependencies
|
||||
# run: |
|
||||
# python -m venv .venv
|
||||
# source .venv/bin/activate
|
||||
# python -m pip install wheel
|
||||
# python -m pip install -r requirements.txt
|
||||
|
||||
- name: Run the CI
|
||||
run: |
|
||||
source .venv/bin/activate
|
||||
cd bin/docker_detection_tester
|
||||
# - name: Run the CI
|
||||
# run: |
|
||||
# source .venv/bin/activate
|
||||
# cd bin/docker_detection_tester
|
||||
|
||||
|
||||
python detection_testing_execution.py run -c prior_config/${{ matrix.manifest_filename}}
|
||||
# python detection_testing_execution.py run -c prior_config/${{ matrix.manifest_filename}}
|
||||
|
||||
|
||||
- name: Upload Test Results Files
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ${{ matrix.manifest_filename}}.results
|
||||
path: |
|
||||
bin/docker_detection_tester/test_results/success.csv
|
||||
bin/docker_detection_tester/test_results/error.csv
|
||||
bin/docker_detection_tester/test_results/failure.csv
|
||||
bin/docker_detection_tester/test_results/combined.csv
|
||||
bin/docker_detection_tester/test_results/success.json
|
||||
bin/docker_detection_tester/test_results/error.json
|
||||
bin/docker_detection_tester/test_results/failure.json
|
||||
bin/docker_detection_tester/test_results/combined.json
|
||||
# - name: Upload Test Results Files
|
||||
# uses: actions/upload-artifact@v2
|
||||
# with:
|
||||
# name: ${{ matrix.manifest_filename}}.results
|
||||
# path: |
|
||||
# bin/docker_detection_tester/test_results/success.csv
|
||||
# bin/docker_detection_tester/test_results/error.csv
|
||||
# bin/docker_detection_tester/test_results/failure.csv
|
||||
# bin/docker_detection_tester/test_results/combined.csv
|
||||
# bin/docker_detection_tester/test_results/success.json
|
||||
# bin/docker_detection_tester/test_results/error.json
|
||||
# bin/docker_detection_tester/test_results/failure.json
|
||||
# bin/docker_detection_tester/test_results/combined.json
|
||||
|
||||
bin/docker_detection_tester/test_results/summary.json
|
||||
# bin/docker_detection_tester/test_results/summary.json
|
||||
|
||||
docker-detection-testing-execution-merge-results:
|
||||
runs-on: ubuntu-latest
|
||||
if: "!contains(github.ref, 'refs/tags/')" #don't run on tags - future steps won't run either since they depend on this job
|
||||
needs: [docker-detection-testing-setup, docker-detection-testing-execution]
|
||||
# docker-detection-testing-execution-merge-results:
|
||||
# runs-on: ubuntu-latest
|
||||
# if: "!contains(github.ref, 'refs/tags/')" #don't run on tags - future steps won't run either since they depend on this job
|
||||
# needs: [docker-detection-testing-setup, docker-detection-testing-execution]
|
||||
|
||||
steps:
|
||||
- name: Get branch and PR required for detection testing main.py
|
||||
id: vars
|
||||
run: |
|
||||
echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
|
||||
# steps:
|
||||
# - name: Get branch and PR required for detection testing main.py
|
||||
# id: vars
|
||||
# run: |
|
||||
# echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
|
||||
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v2
|
||||
#with:
|
||||
# ref: develop
|
||||
# - name: Checkout Repo
|
||||
# uses: actions/checkout@v2
|
||||
# #with:
|
||||
# # ref: develop
|
||||
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: config_tests_0.json.results
|
||||
path: bin/docker_detection_tester/results_0
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: config_tests_1.json.results
|
||||
path: bin/docker_detection_tester/results_1
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: config_tests_2.json.results
|
||||
path: bin/docker_detection_tester/results_2
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: config_tests_3.json.results
|
||||
path: bin/docker_detection_tester/results_3
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: config_tests_4.json.results
|
||||
path: bin/docker_detection_tester/results_4
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: config_tests_5.json.results
|
||||
path: bin/docker_detection_tester/results_5
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: config_tests_6.json.results
|
||||
path: bin/docker_detection_tester/results_6
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: config_tests_7.json.results
|
||||
path: bin/docker_detection_tester/results_7
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: config_tests_8.json.results
|
||||
path: bin/docker_detection_tester/results_8
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: config_tests_9.json.results
|
||||
path: bin/docker_detection_tester/results_9
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v2
|
||||
# with:
|
||||
# name: config_tests_0.json.results
|
||||
# path: bin/docker_detection_tester/results_0
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v2
|
||||
# with:
|
||||
# name: config_tests_1.json.results
|
||||
# path: bin/docker_detection_tester/results_1
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v2
|
||||
# with:
|
||||
# name: config_tests_2.json.results
|
||||
# path: bin/docker_detection_tester/results_2
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v2
|
||||
# with:
|
||||
# name: config_tests_3.json.results
|
||||
# path: bin/docker_detection_tester/results_3
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v2
|
||||
# with:
|
||||
# name: config_tests_4.json.results
|
||||
# path: bin/docker_detection_tester/results_4
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v2
|
||||
# with:
|
||||
# name: config_tests_5.json.results
|
||||
# path: bin/docker_detection_tester/results_5
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v2
|
||||
# with:
|
||||
# name: config_tests_6.json.results
|
||||
# path: bin/docker_detection_tester/results_6
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v2
|
||||
# with:
|
||||
# name: config_tests_7.json.results
|
||||
# path: bin/docker_detection_tester/results_7
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v2
|
||||
# with:
|
||||
# name: config_tests_8.json.results
|
||||
# path: bin/docker_detection_tester/results_8
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v2
|
||||
# with:
|
||||
# name: config_tests_9.json.results
|
||||
# path: bin/docker_detection_tester/results_9
|
||||
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||
cache: 'pip'
|
||||
# - uses: actions/setup-python@v2
|
||||
# with:
|
||||
# python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
# architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||
# cache: 'pip'
|
||||
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate
|
||||
python -m pip install wheel
|
||||
python -m pip install -r requirements.txt
|
||||
# - name: Install Python Dependencies
|
||||
# run: |
|
||||
# python -m venv .venv
|
||||
# source .venv/bin/activate
|
||||
# python -m pip install wheel
|
||||
# python -m pip install -r requirements.txt
|
||||
|
||||
- name: Merge Detections into single File
|
||||
run: |
|
||||
source .venv/bin/activate
|
||||
cd bin/docker_detection_tester
|
||||
python summarize_json.py --files results_*/summary.json --output_filename summary_test_results.json
|
||||
# - name: Merge Detections into single File
|
||||
# run: |
|
||||
# source .venv/bin/activate
|
||||
# cd bin/docker_detection_tester
|
||||
# python summarize_json.py --files results_*/summary.json --output_filename summary_test_results.json
|
||||
|
||||
|
||||
- name: Upload Summary Test Results JSON
|
||||
uses: actions/upload-artifact@v2
|
||||
if: always()
|
||||
with:
|
||||
name: SummaryTestResults
|
||||
path: |
|
||||
bin/docker_detection_tester/summary_test_results.json
|
||||
# - name: Upload Summary Test Results JSON
|
||||
# uses: actions/upload-artifact@v2
|
||||
# if: always()
|
||||
# with:
|
||||
# name: SummaryTestResults
|
||||
# path: |
|
||||
# bin/docker_detection_tester/summary_test_results.json
|
||||
|
||||
- name: Upload Failures Manifest on Failure
|
||||
uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: DetectionFailureManifest
|
||||
path: |
|
||||
bin/docker_detection_tester/detection_failure_manifest.json
|
||||
# - name: Upload Failures Manifest on Failure
|
||||
# uses: actions/upload-artifact@v2
|
||||
# if: failure()
|
||||
# with:
|
||||
# name: DetectionFailureManifest
|
||||
# path: |
|
||||
# bin/docker_detection_tester/detection_failure_manifest.json
|
||||
|
||||
|
||||
#Always clean these up, they make the output messy
|
||||
- name: Clean up intermediate Files
|
||||
uses: geekyeggo/delete-artifact@v1
|
||||
if: always()
|
||||
with:
|
||||
name: |
|
||||
config_tests_0.json.results
|
||||
config_tests_1.json.results
|
||||
config_tests_2.json.results
|
||||
config_tests_3.json.results
|
||||
config_tests_4.json.results
|
||||
config_tests_5.json.results
|
||||
config_tests_6.json.results
|
||||
config_tests_7.json.results
|
||||
config_tests_8.json.results
|
||||
config_tests_9.json.results
|
||||
# #Always clean these up, they make the output messy
|
||||
# - name: Clean up intermediate Files
|
||||
# uses: geekyeggo/delete-artifact@v1
|
||||
# if: always()
|
||||
# with:
|
||||
# name: |
|
||||
# config_tests_0.json.results
|
||||
# config_tests_1.json.results
|
||||
# config_tests_2.json.results
|
||||
# config_tests_3.json.results
|
||||
# config_tests_4.json.results
|
||||
# config_tests_5.json.results
|
||||
# config_tests_6.json.results
|
||||
# config_tests_7.json.results
|
||||
# config_tests_8.json.results
|
||||
# config_tests_9.json.results
|
||||
|
||||
- name: Log in to S3 for Artifact Uploads
|
||||
if: ${{ github.event_name == 'schedule' }}
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
# - name: Log in to S3 for Artifact Uploads
|
||||
# if: ${{ github.event_name == 'schedule' }}
|
||||
# uses: aws-actions/configure-aws-credentials@v1
|
||||
# with:
|
||||
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
|
||||
aws-region: us-west-2
|
||||
# aws-region: us-west-2
|
||||
|
||||
- name: Upload S3 Badge and Summary Artifacts for Nightly Scheduled Run
|
||||
if: ${{ github.event_name == 'schedule' }}
|
||||
run: |
|
||||
cd bin/docker_detection_tester
|
||||
python generate_detection_coverage_badge.py --input_summary_file summary_test_results.json --output_badge_file detection_coverage.svg --badge_string "Pass Rate"
|
||||
# - name: Upload S3 Badge and Summary Artifacts for Nightly Scheduled Run
|
||||
# if: ${{ github.event_name == 'schedule' }}
|
||||
# run: |
|
||||
# cd bin/docker_detection_tester
|
||||
# python generate_detection_coverage_badge.py --input_summary_file summary_test_results.json --output_badge_file detection_coverage.svg --badge_string "Pass Rate"
|
||||
|
||||
|
||||
#Upload artifact (summary test results)
|
||||
aws s3 cp summary_test_results.json s3://security-content/reporting/summary_test_results.json
|
||||
# #Upload artifact (summary test results)
|
||||
# aws s3 cp summary_test_results.json s3://security-content/reporting/summary_test_results.json
|
||||
|
||||
#Since these reside in a public bucket, no need to explicitly mark as public
|
||||
# make the file public since it is not by default
|
||||
#aws s3api put-object-acl --bucket security-content --key reporting/summary_test_results.json --acl public-read
|
||||
# #Since these reside in a public bucket, no need to explicitly mark as public
|
||||
# # make the file public since it is not by default
|
||||
# #aws s3api put-object-acl --bucket security-content --key reporting/summary_test_results.json --acl public-read
|
||||
|
||||
|
||||
#Upload artifact (test results coverage badge)
|
||||
aws s3 cp detection_coverage.svg s3://security-content/reporting/detection_coverage.svg
|
||||
# #Upload artifact (test results coverage badge)
|
||||
# aws s3 cp detection_coverage.svg s3://security-content/reporting/detection_coverage.svg
|
||||
|
||||
#Since these reside in a public bucket, no need to explicitly mark as public
|
||||
# make the file public since it is not by default
|
||||
#aws s3api put-object-acl --bucket security-content --key reporting/detection_coverage.svg --acl public-read
|
||||
# #Since these reside in a public bucket, no need to explicitly mark as public
|
||||
# # make the file public since it is not by default
|
||||
# #aws s3api put-object-acl --bucket security-content --key reporting/detection_coverage.svg --acl public-read
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
name: validate-and-build
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
types: [opened, reopened]
|
||||
jobs:
|
||||
|
||||
validate-and-build:
|
||||
#Note that the CircleCI job used a Container. The way to do this with Github Actions
|
||||
#is to first start up a Virtual Machine, then we can by following:
|
||||
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idcontainer
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out the repository code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy
|
||||
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||
|
||||
- name: Install System Packages
|
||||
run: |
|
||||
sudo apt update -qq
|
||||
sudo apt install jq -qq
|
||||
|
||||
|
||||
- name: Install Python Dependencies and ContentCTL
|
||||
run: |
|
||||
pip3 install poetry
|
||||
git submodule update --init contentctl
|
||||
cd contentctl
|
||||
git checkout main
|
||||
poetry install
|
||||
|
||||
- name: content_ctl validate
|
||||
run: |
|
||||
cd contentctl
|
||||
poetry run contentctl -p ../ validate
|
||||
|
||||
- name: contentctl generate
|
||||
run: |
|
||||
cd contentctl
|
||||
poetry run contentctl -p ../ build
|
||||
cd ..
|
||||
mkdir artifacts
|
||||
mv dist/DA-ESS-ContentUpdate-latest.tar.gz artifacts/
|
||||
|
||||
- name: store_artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: content-latest
|
||||
path: |
|
||||
artifacts/DA-ESS-ContentUpdate-latest.tar.gz
|
||||
+10
-1
@@ -1,20 +1,29 @@
|
||||
default:
|
||||
image: docker-hub.repo.splunkdev.net/python:3.9
|
||||
|
||||
variables:
|
||||
SKIP_DOWNSTREAM_TESTING:
|
||||
value: "False"
|
||||
description: "If true, downstream testing will be suppressed (useful for debugging or forcing a release in an emergency)."
|
||||
|
||||
stages:
|
||||
- validate
|
||||
- generate
|
||||
- app_inspect
|
||||
- test
|
||||
- release
|
||||
|
||||
include:
|
||||
- local: "pipeline/.validate.yml"
|
||||
- local: "pipeline/.generate.yml"
|
||||
- local: "pipeline/.test.yml"
|
||||
- local: "pipeline/.app_inspect.yml"
|
||||
- local: "pipeline/.release.yml"
|
||||
- local: "pipeline/.post.yml"
|
||||
|
||||
workflow:
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
||||
- if: $CI_COMMIT_TAG
|
||||
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
- if: $CI_COMMIT_BRANCH =~ /^release_v[0-9]+\.[0-9]+\.[0-9]+$/
|
||||
|
||||
+1
-1
Submodule contentctl updated: 48c1c275e3...5fd8164fa0
@@ -1,3 +1,8 @@
|
||||
#### DEPRECATED
|
||||
|
||||
### This code is deprecated : use the submodule contentctl and these functionalities are available with that application
|
||||
###
|
||||
|
||||
import sys
|
||||
import argparse
|
||||
import os
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@ build:
|
||||
name: DA-ESS-ContentUpdate
|
||||
path_root: dist
|
||||
prefix: ESCU
|
||||
build: 004150
|
||||
version: 4.15.0
|
||||
build: 004160
|
||||
version: 4.16.0
|
||||
label: ES Content Updates
|
||||
author_name: Splunk Threat Research Team
|
||||
author_email: research@splunk.com
|
||||
|
||||
+184
-13
@@ -1,9 +1,10 @@
|
||||
version_control_config: {}
|
||||
version_control_config:
|
||||
target_branch: develop
|
||||
infrastructure_config:
|
||||
infrastructure_type: container
|
||||
full_image_path: registry.hub.docker.com/splunk/splunk:latest
|
||||
post_test_behavior: always_pause
|
||||
mode: all
|
||||
post_test_behavior: pause_on_failure
|
||||
mode: changes
|
||||
detections_list: null
|
||||
splunkbase_username: null
|
||||
splunkbase_password: null
|
||||
@@ -18,23 +19,33 @@ apps:
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 742
|
||||
- uid: 9999
|
||||
appid: Splunk_TA_windows
|
||||
title: Splunk Add-on for Microsoft Windows
|
||||
description: null
|
||||
release: 8.5.0
|
||||
release: 8.5.0_patched
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-microsoft-windows_850_PATCHED.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 742
|
||||
appid: SPLUNK_ADD_ON_FOR_MICROSOFT_WINDOWS
|
||||
title: Splunk Add-on for Microsoft Windows
|
||||
description: null
|
||||
release: 8.8.0
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-microsoft-windows_880.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 5709
|
||||
appid: Splunk_TA_microsoft_sysmon
|
||||
title: Splunk Add-on for Sysmon
|
||||
description: null
|
||||
release: 3.0.0
|
||||
release: 3.1.0
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-sysmon_300.tgz
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-sysmon_310.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
@@ -42,14 +53,174 @@ apps:
|
||||
appid: Splunk_TA_nix
|
||||
title: Splunk Add-on for Unix and Linux
|
||||
description: null
|
||||
release: 8.7.0
|
||||
release: 9.0.0
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-unix-and-linux_860.tgz
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-unix-and-linux_900.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 5579
|
||||
appid: Splunk_TA_CrowdStrike_FDR
|
||||
title: Splunk Add-on for CrowdStrike FDR
|
||||
description: null
|
||||
release: 1.4.0
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-crowdstrike-fdr_140.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 3185
|
||||
appid: SPLUNK_TA_FOR_IIS
|
||||
title: Splunk Add-on for Microsoft IIS
|
||||
description: null
|
||||
release: 1.2.0
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-microsoft-iis_120.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 4242
|
||||
appid: SPLUNK_TA_FOR_SURICATA
|
||||
title: TA for Suricata
|
||||
description: null
|
||||
release: 2.3.4
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/ta-for-suricata_234.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 5466
|
||||
appid: SPLUNK_TA_FOR_ZEEK
|
||||
title: TA for Zeek
|
||||
description: null
|
||||
release: 1.0.5
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/ta-for-zeek_105.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 3258
|
||||
appid: SPLUNK_ADD_ON_FOR_NGINX
|
||||
title: Splunk Add-on for NGINX
|
||||
description: null
|
||||
release: 3.2.1
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-nginx_321.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 5238
|
||||
appid: SPLUNK_ADD_ON_FOR_STREAM_FORWARDERS
|
||||
title: Splunk Add-on for Stream Forwarders
|
||||
description: null
|
||||
release: 8.1.1
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-stream-forwarders_811.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 5234
|
||||
appid: SPLUNK_ADD_ON_FOR_STREAM_WIRE_DATA
|
||||
title: Splunk Add-on for Stream Wire Data
|
||||
description: null
|
||||
release: 8.1.1
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-stream-wire-data_811.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 2757
|
||||
appid: PALO_ALTO_NETWORKS_ADD_ON_FOR_SPLUNK
|
||||
title: Palo Alto Networks Add-on for Splunk
|
||||
description: null
|
||||
release: 8.1.0
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/palo-alto-networks-add-on-for-splunk_810.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 3865
|
||||
appid: TA-Zscaler_CIM
|
||||
title: Zscaler Technical Add-On for Splunk
|
||||
description: null
|
||||
release: 4.0.3
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/zscaler-technical-add-on-for-splunk_403.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 3719
|
||||
appid: SPLUNK_ADD_ON_FOR_AMAZON_KINESIS_FIREHOSE
|
||||
title: Splunk Add-on for Amazon Kinesis Firehose
|
||||
description: null
|
||||
release: 1.3.2
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-amazon-kinesis-firehose_132.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 1876
|
||||
appid: Splunk_TA_aws
|
||||
title: Splunk Add-on for AWS
|
||||
description: null
|
||||
release: 7.2.0
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-amazon-web-services-aws_720.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 3088
|
||||
appid: SPLUNK_ADD_ON_FOR_GOOGLE_CLOUD_PLATFORM
|
||||
title: Splunk Add-on for Google Cloud Platform
|
||||
description: null
|
||||
release: 4.3.0
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-google-cloud-platform_430.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 5556
|
||||
appid: SPLUNK_ADD_ON_FOR_GOOGLE_WORKSPACE
|
||||
title: Splunk Add-on for Google Workspace
|
||||
description: null
|
||||
release: 2.6.0
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-google-workspace_260.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 3110
|
||||
appid: SPLUNK_TA_MICROSOFT_CLOUD_SERVICES
|
||||
title: Splunk Add-on for Microsoft Cloud Services
|
||||
description: null
|
||||
release: 5.2.1
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-microsoft-cloud-services_521.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 4055
|
||||
appid: SPLUNK_ADD_ON_FOR_MICROSOFT_OFFICE_365
|
||||
title: Splunk Add-on for Microsoft Office 365
|
||||
description: null
|
||||
release: 4.3.0
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-add-on-for-microsoft-office-365_430.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 2890
|
||||
appid: SPLUNK_MACHINE_LEARNING_TOOLKIT
|
||||
title: Splunk Machine Learning Toolkit
|
||||
description: null
|
||||
release: 5.4.1
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-machine-learning-toolkit_541.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
- uid: 2734
|
||||
appid: utbox
|
||||
appid: URL_TOOLBOX
|
||||
title: URL Toolbox
|
||||
description: null
|
||||
release: 1.9.2
|
||||
@@ -62,9 +233,9 @@ apps:
|
||||
appid: Splunk_SA_CIM
|
||||
title: Splunk Common Information Model (CIM)
|
||||
description: null
|
||||
release: 5.0.2
|
||||
release: 5.2.0
|
||||
local_path: null
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-common-information-model-cim_501.tgz
|
||||
http_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/Latest/splunk-common-information-model-cim_520.tgz
|
||||
splunkbase_path: null
|
||||
environment_path: ENVIRONMENT_PATH_NOT_SET
|
||||
force_local: false
|
||||
force_local: false
|
||||
@@ -0,0 +1,56 @@
|
||||
name: Splunk App for Lookup File Editing RCE via User XSLT
|
||||
id: a053e6a6-2146-483a-9798-2d43652f3299
|
||||
version: 1
|
||||
date: '2023-11-16'
|
||||
author: Rod Soto, Splunk
|
||||
status: experimental
|
||||
type: Hunting
|
||||
data_source: []
|
||||
description: This search provides information to investigate possible remote code execution exploitation via
|
||||
user-supplied Extensible Stylesheet Language Transformations (XSLT), affecting Splunk versions 9.1.x.
|
||||
Exploitation of this vulnerability by attackers requires that the Splunk App for Lookup File Editing
|
||||
is, or was, installed.
|
||||
search: '| rest splunk_server=local /services/data/lookup-table-files/
|
||||
| fields title author disabled eai:acl.app eai:acl.owner eai:acl.sharing eai:appName eai:data
|
||||
| `splunk_app_for_lookup_file_editing_rce_via_user_xslt_filter`'
|
||||
how_to_implement: Because there is no way to detect the payload, this search only provides the ability to monitor
|
||||
the creation of lookups which are the base of this exploit. An operator must then investigate suspicious lookups.
|
||||
This search requires ability to perform REST queries. Note that if the Splunk App for Lookup File Editing is not,
|
||||
or was not, installed in the Splunk environment then it is not necessary to run the search as the enviornment
|
||||
was not vulnerable.
|
||||
known_false_positives: This search will provide information for investigation and hunting of lookup creation via
|
||||
user-supplied XSLT which may be indications of possible exploitation. There will be false positives as it is
|
||||
not possible to detect the payload executed via this exploit.
|
||||
references:
|
||||
- https://advisory.splunk.com/advisories
|
||||
cve:
|
||||
- CVE-2023-46214
|
||||
tags:
|
||||
analytic_story:
|
||||
- Splunk Vulnerabilities
|
||||
asset_type: endpoint
|
||||
confidence: 2
|
||||
impact: 50
|
||||
message: Please review $eai:acl.app$ for possible malicious lookups
|
||||
mitre_attack_id:
|
||||
- T1210
|
||||
observable:
|
||||
- name: eai:acl.app
|
||||
type: Other
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 1
|
||||
required_fields:
|
||||
- title
|
||||
- author
|
||||
- disabled
|
||||
- ea:acl.app
|
||||
- eai:acl.owner
|
||||
- eai:acl.sharing
|
||||
- eai:appName
|
||||
- eai:data
|
||||
security_domain: endpoint
|
||||
@@ -0,0 +1,56 @@
|
||||
name: Splunk XSS in Highlighted JSON Events
|
||||
id: 1030bc63-0b37-4ac9-9ae0-9361c955a3cc
|
||||
version: 1
|
||||
date: '2023-11-16'
|
||||
author: Rod Soto, Splunk
|
||||
status: production
|
||||
type: Hunting
|
||||
data_source: []
|
||||
description: This detection provides information about possible exploitation against affected versions of Splunk Enterprise 9.1.2.
|
||||
The ability to view JSON logs in the web GUI may be abused by crafting a specific request, causing the execution of javascript
|
||||
in script tags. This vulnerability can be used to execute javascript to access the API at the permission level of the
|
||||
logged-in user. If user is admin it can be used to create an admin user, giving an attacker broad access to the Splunk Environment.
|
||||
search: '`splunkd_ui` "/en-US/splunkd/__raw/servicesNS/nobody/search/authentication/users" status=201
|
||||
| stats count min(_time) as firstTime max(_time) as lastTime by clientip, uri_path, method
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)`
|
||||
| `splunk_xss_in_highlighted_json_events_filter`'
|
||||
how_to_implement: This search only applies to web-GUI-enabled Splunk instances and operator must have access to internal indexes.
|
||||
known_false_positives: This is a hunting search and will produce false positives as it is not possible to view contents of a request
|
||||
payload. It shows the artifact resulting from a potential exploitation payload (the creation of a user with admin privileges).
|
||||
references:
|
||||
- https://advisory.splunk.com/advisories
|
||||
cve:
|
||||
- CVE-2023-46213
|
||||
tags:
|
||||
analytic_story:
|
||||
- Splunk Vulnerabilities
|
||||
asset_type: endpoint
|
||||
confidence: 50
|
||||
impact: 30
|
||||
message: Possible XSS exploitation from $clientip$
|
||||
mitre_attack_id:
|
||||
- T1189
|
||||
observable:
|
||||
- name: clientip
|
||||
type: IP Address
|
||||
role:
|
||||
- Attacker
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 15
|
||||
required_fields:
|
||||
- clientip
|
||||
- uri_path
|
||||
- method
|
||||
- status
|
||||
security_domain: endpoint
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1189/splunk/splunk_xss_in_highlighted_json_events_splunkd_ui_access.log
|
||||
source: splunkd_ui_access.log
|
||||
sourcetype: splunkd_ui_access
|
||||
custom_index: _internal
|
||||
@@ -1,25 +1,16 @@
|
||||
name: AWS ECR Container Scanning Findings High
|
||||
id: 62721bd2-1d82-4623-b6e6-aac170014423
|
||||
version: 1
|
||||
date: '2022-06-21'
|
||||
id: 30a0e9f8-f1dd-4f9d-8fc2-c622461d781c
|
||||
version: 2
|
||||
date: '2023-11-09'
|
||||
author: Patrick Bareiss, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
description: This search looks for AWS CloudTrail events from AWS Elastic Container
|
||||
Service (ECR). You need to activate image scanning in order to get the event DescribeImageScanFindings
|
||||
description: This search looks for AWS CloudTrail events from AWS Elastic Container Service (ECR). You need to activate image scanning in order to get the event DescribeImageScanFindings
|
||||
with the results.
|
||||
data_source: []
|
||||
search: '`cloudtrail` eventSource=ecr.amazonaws.com eventName=DescribeImageScanFindings
|
||||
| spath path=responseElements.imageScanFindings.findings{} output=findings | mvexpand
|
||||
findings | spath input=findings| search severity=HIGH | rename name as finding_name,
|
||||
description as finding_description, requestParameters.imageId.imageDigest as imageDigest,
|
||||
requestParameters.repositoryName as image | eval finding = finding_name.", ".finding_description
|
||||
| eval phase="release" | eval severity="high" | stats min(_time) as firstTime max(_time)
|
||||
as lastTime by awsRegion, eventName, eventSource, imageDigest, image, userName,
|
||||
src_ip, finding, phase, severity | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
|
||||
| `aws_ecr_container_scanning_findings_high_filter`'
|
||||
how_to_implement: You must install splunk AWS add on and Splunk App for AWS. This
|
||||
search works with AWS CloudTrail logs.
|
||||
search: >-
|
||||
`cloudtrail` eventSource=ecr.amazonaws.com eventName=DescribeImageScanFindings | spath path=responseElements.imageScanFindings.findings{} output=findings | mvexpand findings | spath input=findings | search severity=HIGH | rename name as finding_name, description as finding_description, requestParameters.imageId.imageDigest as imageDigest, requestParameters.repositoryName as repository, userIdentity.principalId as user | eval finding = finding_name.", ".finding_description | eval phase="release" | eval severity="high" | stats min(_time) as firstTime max(_time) as lastTime by awsRegion, eventName, eventSource, imageDigest, repository, user, src_ip, finding, phase, severity | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `aws_ecr_container_scanning_findings_high_filter`
|
||||
how_to_implement: You must install splunk AWS add on and Splunk App for AWS. This search works with AWS CloudTrail logs.
|
||||
known_false_positives: unknown
|
||||
references:
|
||||
- https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning.html
|
||||
@@ -29,7 +20,7 @@ tags:
|
||||
asset_type: AWS Account
|
||||
confidence: 100
|
||||
impact: 70
|
||||
message: Vulnerabilities with severity high found in image $image$
|
||||
message: Vulnerabilities with severity high found in repository $repository$
|
||||
mitre_attack_id:
|
||||
- T1204.003
|
||||
- T1204
|
||||
@@ -38,6 +29,10 @@ tags:
|
||||
type: User
|
||||
role:
|
||||
- Attacker
|
||||
- name: repository
|
||||
type: Other
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
|
||||
+11
-15
@@ -1,23 +1,15 @@
|
||||
name: AWS ECR Container Scanning Findings Low Informational Unknown
|
||||
id: cbc95e44-7c22-443f-88fd-0424478f5589
|
||||
version: 1
|
||||
date: '2022-08-25'
|
||||
version: 2
|
||||
date: '2023-11-09'
|
||||
author: Patrick Bareiss, Eric McGinnis Splunk
|
||||
status: production
|
||||
type: Hunting
|
||||
type: Anomaly
|
||||
description: This search looks for AWS CloudTrail events from AWS Elastic Container
|
||||
Service (ECR). You need to activate image scanning in order to get the event DescribeImageScanFindings
|
||||
with the results.
|
||||
data_source: []
|
||||
search: '`cloudtrail` eventSource=ecr.amazonaws.com eventName=DescribeImageScanFindings
|
||||
| spath path=responseElements.imageScanFindings.findings{} output=findings | mvexpand
|
||||
findings | spath input=findings| search severity IN ("LOW", "INFORMATIONAL", "UNKNOWN")
|
||||
| rename name as finding_name, description as finding_description, requestParameters.imageId.imageDigest
|
||||
as imageDigest, requestParameters.repositoryName as repositoryName | eval finding
|
||||
= finding_name.", ".finding_description | eval phase="release" | eval severity="low"
|
||||
| stats min(_time) as firstTime max(_time) as lastTime by awsRegion, eventName,
|
||||
eventSource, imageDigest, repositoryName, userName, src_ip, finding, phase, severity
|
||||
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `aws_ecr_container_scanning_findings_low_informational_unknown_filter`'
|
||||
search: '`cloudtrail` eventSource=ecr.amazonaws.com eventName=DescribeImageScanFindings | spath path=responseElements.imageScanFindings.findings{} output=findings | mvexpand findings | spath input=findings| search severity IN ("LOW", "INFORMATIONAL", "UNKNOWN") | rename name as finding_name, description as finding_description, requestParameters.imageId.imageDigest as imageDigest, requestParameters.repositoryName as repository, userIdentity.principalId as user | eval finding = finding_name.", ".finding_description | eval phase="release" | eval severity="low" | stats min(_time) as firstTime max(_time) as lastTime by awsRegion, eventName, eventSource, imageDigest, repository, user, src_ip, finding, phase, severity | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `aws_ecr_container_scanning_findings_low_informational_unknown_filter`'
|
||||
how_to_implement: You must install splunk AWS add on and Splunk App for AWS. This
|
||||
search works with AWS CloudTrail logs.
|
||||
known_false_positives: unknown
|
||||
@@ -27,9 +19,9 @@ tags:
|
||||
analytic_story:
|
||||
- Dev Sec Ops
|
||||
asset_type: AWS Account
|
||||
confidence: 70
|
||||
confidence: 50
|
||||
impact: 10
|
||||
message: Vulnerabilities with severity high found in repository $repositoryName$
|
||||
message: Vulnerabilities with severity $severity$ found in repository $repository$
|
||||
mitre_attack_id:
|
||||
- T1204.003
|
||||
- T1204
|
||||
@@ -38,6 +30,10 @@ tags:
|
||||
type: User
|
||||
role:
|
||||
- Attacker
|
||||
- name: repository
|
||||
type: Other
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
@@ -52,7 +48,7 @@ tags:
|
||||
- user
|
||||
- userName
|
||||
- src_ip
|
||||
risk_score: 7
|
||||
risk_score: 5
|
||||
security_domain: network
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: AWS ECR Container Scanning Findings Medium
|
||||
id: 0b80e2c8-c746-4ddb-89eb-9efd892220cf
|
||||
version: 1
|
||||
date: '2021-08-17'
|
||||
version: 2
|
||||
date: '2023-11-09'
|
||||
author: Patrick Bareiss, Splunk
|
||||
status: production
|
||||
type: Anomaly
|
||||
@@ -9,17 +9,8 @@ description: This search looks for AWS CloudTrail events from AWS Elastic Contai
|
||||
Service (ECR). You need to activate image scanning in order to get the event DescribeImageScanFindings
|
||||
with the results.
|
||||
data_source: []
|
||||
search: '`cloudtrail` eventSource=ecr.amazonaws.com eventName=DescribeImageScanFindings
|
||||
| spath path=responseElements.imageScanFindings.findings{} output=findings | mvexpand
|
||||
findings | spath input=findings| search severity=MEDIUM | rename name as finding_name,
|
||||
description as finding_description, requestParameters.imageId.imageDigest as imageDigest,
|
||||
requestParameters.repositoryName as image | eval finding = finding_name.", ".finding_description
|
||||
| eval phase="release" | eval severity="medium" | stats min(_time) as firstTime
|
||||
max(_time) as lastTime by awsRegion, eventName, eventSource, imageDigest, image,
|
||||
userName, src_ip, finding, phase, severity | `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)` | `aws_ecr_container_scanning_findings_medium_filter`'
|
||||
how_to_implement: You must install splunk AWS add on and Splunk App for AWS. This
|
||||
search works with AWS CloudTrail logs.
|
||||
search: '`cloudtrail` eventSource=ecr.amazonaws.com eventName=DescribeImageScanFindings | spath path=responseElements.imageScanFindings.findings{} output=findings | mvexpand findings | spath input=findings| search severity=MEDIUM | rename name as finding_name, description as finding_description, requestParameters.imageId.imageDigest as imageDigest, requestParameters.repositoryName as repository, userIdentity.principalId as user| eval finding = finding_name.", ".finding_description | eval phase="release" | eval severity="medium" | stats min(_time) as firstTime max(_time) as lastTime by awsRegion, eventName, eventSource, imageDigest, repository, user, src_ip, finding, phase, severity | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `aws_ecr_container_scanning_findings_medium_filter`'
|
||||
how_to_implement: You must install splunk AWS add on and Splunk App for AWS. This search works with AWS CloudTrail logs.
|
||||
known_false_positives: unknown
|
||||
references:
|
||||
- https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning.html
|
||||
@@ -29,7 +20,7 @@ tags:
|
||||
asset_type: AWS Account
|
||||
confidence: 70
|
||||
impact: 30
|
||||
message: Vulnerabilities with severity high found in image $image$
|
||||
message: Vulnerabilities with severity $severity$ found in repository $repository$
|
||||
mitre_attack_id:
|
||||
- T1204.003
|
||||
- T1204
|
||||
@@ -38,6 +29,10 @@ tags:
|
||||
type: User
|
||||
role:
|
||||
- Attacker
|
||||
- name: repository
|
||||
type: Other
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: AWS ECR Container Upload Outside Business Hours
|
||||
id: d4c4d4eb-3994-41ca-a25e-a82d64e125bb
|
||||
version: 1
|
||||
date: '2021-08-19'
|
||||
version: 2
|
||||
date: '2023-11-09'
|
||||
author: Patrick Bareiss, Splunk
|
||||
status: production
|
||||
type: Anomaly
|
||||
@@ -9,12 +9,7 @@ description: This search looks for AWS CloudTrail events from AWS Elastic Contai
|
||||
Service (ECR). A upload of a new container is normally done during business hours.
|
||||
When done outside business hours, we want to take a look into it.
|
||||
data_source: []
|
||||
search: '`cloudtrail` eventSource=ecr.amazonaws.com eventName=PutImage date_hour>=20
|
||||
OR date_hour<8 OR date_wday=saturday OR date_wday=sunday | rename requestParameters.*
|
||||
as * | rename repositoryName AS image | eval phase="release" | eval severity="medium"
|
||||
| stats min(_time) as firstTime max(_time) as lastTime by awsRegion, eventName,
|
||||
eventSource, user, userName, src_ip, imageTag, registryId, image, phase, severity
|
||||
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `aws_ecr_container_upload_outside_business_hours_filter`'
|
||||
search: '`cloudtrail` eventSource=ecr.amazonaws.com eventName=PutImage date_hour>=20 OR date_hour<8 OR date_wday=saturday OR date_wday=sunday | rename requestParameters.* as * | rename repositoryName AS repository | eval phase="release" | eval severity="medium" | stats min(_time) as firstTime max(_time) as lastTime by awsRegion, eventName, eventSource, user, userName, src_ip, imageTag, registryId, repository, phase, severity | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `aws_ecr_container_upload_outside_business_hours_filter`'
|
||||
how_to_implement: You must install splunk AWS add on and Splunk App for AWS. This
|
||||
search works with AWS CloudTrail logs.
|
||||
known_false_positives: When your development is spreaded in different time zones,
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
name: Azure AD Block User Consent For Risky Apps Disabled
|
||||
id: 875de3d7-09bc-4916-8c0a-0929f4ced3d8
|
||||
version: 1
|
||||
date: '2023-10-26'
|
||||
author: Mauricio Velazco, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source: []
|
||||
description: This analytic detects when the risk-based step-up consent security setting in Azure AD is disabled. This setting, when enabled, prevents regular users from granting consent to potentially malicious OAuth applications, requiring an administrative step-up for consent instead. Disabling this feature could expose the organization to OAuth phishing threats.The detection operates by monitoring Azure Active Directory logs for events where the "Update authorization policy" operation is performed. It specifically looks for changes to the "AllowUserConsentForRiskyApps" setting, identifying instances where this setting is switched to "true," effectively disabling the risk-based step-up consent. Monitoring for changes to critical security settings like the "risk-based step-up consent" is vital for maintaining the integrity of an organization's security posture. Disabling this feature can make the environment more susceptible to OAuth phishing attacks, where attackers trick users into granting permissions to malicious applications. Identifying when this setting is disabled can help blue teams to quickly respond, investigate, and potentially uncover targeted phishing campaigns against their users. If an attacker successfully disables the "risk-based step-up consent" and subsequently launches an OAuth phishing campaign, they could gain unauthorized access to user data and other sensitive information within the M365 environment. This could lead to data breaches, unauthorized access to emails, and potentially further compromise within the organization
|
||||
search: >-
|
||||
`azure_monitor_aad` operationName="Update authorization policy"
|
||||
| rename properties.* as *
|
||||
| eval index_number = if(mvfind('targetResources{}.modifiedProperties{}.displayName', "AllowUserConsentForRiskyApps") >= 0, mvfind('targetResources{}.modifiedProperties{}.displayName', "AllowUserConsentForRiskyApps"), -1)
|
||||
| search index_number >= 0
|
||||
| eval AllowUserConsentForRiskyApps = mvindex('targetResources{}.modifiedProperties{}.newValue',index_number)
|
||||
| search AllowUserConsentForRiskyApps = "[true]"
|
||||
| stats count min(_time) as firstTime max(_time) as lastTime by user, src_ip, operationName, AllowUserConsentForRiskyApps
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)`
|
||||
| `azure_ad_block_user_consent_for_risky_apps_disabled_filter`
|
||||
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the AuditLog log category.
|
||||
known_false_positives: Legitimate changes to the 'risk-based step-up consent' setting by administrators, perhaps as part of a policy update or security assessment, may trigger this alert, necessitating verification of the change's intent and authorization
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1562/
|
||||
- https://goodworkaround.com/2020/10/19/a-look-behind-the-azure-ad-permission-classifications-preview/
|
||||
- https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/configure-risk-based-step-up-consent
|
||||
- https://learn.microsoft.com/en-us/defender-cloud-apps/investigate-risky-oauth
|
||||
tags:
|
||||
analytic_story:
|
||||
- Azure Active Directory Account Takeover
|
||||
asset_type: Azure AD
|
||||
confidence: 50
|
||||
impact: 60
|
||||
message: User $user$ disabled the BlockUserConsentForRiskyApps Azure AD setting.
|
||||
mitre_attack_id:
|
||||
- T1562
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Attacker
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 30
|
||||
required_fields:
|
||||
- _time
|
||||
- operationName
|
||||
- properties.targetResources{}.modifiedProperties{}.displayName
|
||||
- properties.targetResources{}.modifiedProperties{}.newValue
|
||||
- user
|
||||
- src_ip
|
||||
security_domain: identity
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562/azuread_disable_blockconsent_for_riskapps/azuread_disable_blockconsent_for_riskapps.log
|
||||
source: Azure Ad
|
||||
sourcetype: azure:monitor:aad
|
||||
@@ -0,0 +1,74 @@
|
||||
name: Azure AD Device Code Authentication
|
||||
id: d68d8732-6f7e-4ee5-a6eb-737f2b990b91
|
||||
version: 1
|
||||
date: '2023-08-03'
|
||||
author: Mauricio Velazco, Gowthamaraj Rajendran, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source: []
|
||||
description: The following analytic identifies the execution of the Azure Device Code Phishing attack,
|
||||
which can lead to Azure Account Take-Over (ATO). The detection leverages Azure AD logs specifically
|
||||
focusing on authentication requests to identify the attack. This technique involves creating malicious
|
||||
infrastructure, bypassing Multi-Factor Authentication (MFA), and bypassing Conditional Access Policies (CAPs).
|
||||
The attack aims to compromise users by sending them phishing emails from attacker-controlled domains and trick
|
||||
the victims into performing OAuth 2.0 device authentication. A successful execution of this attack can result
|
||||
in adversaries gaining unauthorized access to Azure AD, Exchange mailboxes, and the target's Outlook Web Application (OWA).
|
||||
This attack technique was detailed by security researchers including Bobby Cooke, Stephan Borosh, and others.
|
||||
It's crucial for organizations to be aware of this threat, as it can lead to unauthorized access and potential data breaches.
|
||||
search: '`azure_monitor_aad` category=SignInLogs "properties.authenticationProtocol"=deviceCode
|
||||
| rename properties.* as *
|
||||
| stats count min(_time) as firstTime max(_time) as lastTime by user src_ip, appDisplayName, userAgent
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)`
|
||||
| `azure_ad_device_code_authentication_filter`'
|
||||
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the SignInLogs log category.
|
||||
known_false_positives: In most organizations, device code authentication will be used to access common Microsoft service but it may be legitimate for others. Filter as needed.
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1528
|
||||
- https://github.com/rvrsh3ll/TokenTactics
|
||||
- https://embracethered.com/blog/posts/2022/device-code-phishing/
|
||||
- https://0xboku.com/2021/07/12/ArtOfDeviceCodePhish.html
|
||||
- https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code
|
||||
tags:
|
||||
analytic_story:
|
||||
- Azure Active Directory Account Takeover
|
||||
asset_type: Azure AD
|
||||
confidence: 50
|
||||
impact: 70
|
||||
message: Device code requested for $user$ from $src_ip$
|
||||
mitre_attack_id:
|
||||
- T1528
|
||||
- T1566
|
||||
- T1566.002
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Victim
|
||||
- name: src_ip
|
||||
type: IP Address
|
||||
role:
|
||||
- Attacker
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 35
|
||||
required_fields:
|
||||
- _time
|
||||
- category
|
||||
- user
|
||||
- properties.authenticationProtocol
|
||||
- properties.ipAddress
|
||||
- properties.status.additionalDetails
|
||||
- properties.appDisplayName
|
||||
- properties.userAgent
|
||||
security_domain: identity
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1528/device_code_authentication/azure-audit.log
|
||||
source: Azure AD
|
||||
sourcetype: azure:monitor:aad
|
||||
@@ -0,0 +1,60 @@
|
||||
name: Azure AD Multi-Source Failed Authentications Spike
|
||||
id: 116e11a9-63ea-41eb-a66a-6a13bdc7d2c7
|
||||
version: 1
|
||||
date: '2023-11-08'
|
||||
author: Mauricio Velazco, Splunk
|
||||
status: production
|
||||
type: Hunting
|
||||
data_source: []
|
||||
description: This analytic detects potential distributed password spraying attacks within an Azure AD environment. It identifies a notable increase in failed authentication attempts across a variety of unique user-and-IP address combinations, originating from multiple source IP addresses and countries, and employing different user agents. Such patterns suggest an adversary's attempt to bypass security controls by using a range of IP addresses to test commonly used passwords against numerous user accounts. The detection scrutinizes SignInLogs from Azure AD logs, particularly focusing on events with error code 50126, which signals a failed authentication due to incorrect credentials. By collating data over a five-minute interval, the analytic computes the distinct counts of user-and-IP combinations, unique users, source IPs, and countries. It then applies a set of thresholds to these metrics to pinpoint unusual activities that could indicate a coordinated attack effort. The thresholds set within the analytic (such as unique IPs, unique users, etc.) are initial guidelines and should be customized based on the organization's user behavior and risk profile. Recognizing this behavior is vital for security operations centers (SOCs) as distributed password spraying represents a more complex form of traditional password spraying. Attackers distribute the source of their attempts to evade detection mechanisms that typically monitor for single-source IP anomalies. Prompt detection of such distributed activities is essential to thwart unauthorized access attempts, prevent account compromises, and mitigate the risk of further malicious activities within the organization's network. A true positive alert from this analytic suggests an active distributed password spraying attack against the organization's Azure AD tenant. A successful attack could result in unauthorized access, particularly to accounts with elevated privileges, leading to data breaches, privilege escalation, persistent threats, and lateral movement within the organization's infrastructure.
|
||||
search: ' `azure_monitor_aad` category=SignInLogs properties.status.errorCode=50126 properties.authenticationDetails{}.succeeded=false
|
||||
| rename properties.* as *
|
||||
| bucket span=5m _time
|
||||
| eval uniqueIPUserCombo = src_ip . "-" . user
|
||||
| stats dc(uniqueIPUserCombo) as uniqueIpUserCombinations, dc(user) as uniqueUsers, dc(src_ip) as uniqueIPs, dc(location.countryOrRegion) as uniqueCountries values(user) as users, values(src_ip) as ips, values(user_agent) as user_agents, values(location.countryOrRegion) as countries by _time
|
||||
| where uniqueIpUserCombinations > 20 AND uniqueUsers > 20 AND uniqueIPs > 20
|
||||
| `azure_ad_multi_source_failed_authentications_spike_filter`'
|
||||
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the SignInLogs log category.
|
||||
The thresholds set within the analytic (such as unique IPs, unique users, etc.) are initial guidelines and should be customized based on the organization's user behavior and risk profile. Security teams are encouraged to adjust these thresholds to optimize the balance between detecting genuine threats and minimizing false positives, ensuring the detection is tailored to their specific environment.
|
||||
known_false_positives: This detection may yield false positives in scenarios where legitimate bulk sign-in activities occur, such as during company-wide system updates or when users are accessing resources from varying locations in a short time frame, such as in the case of VPNs or cloud services that rotate IP addresses. Filter as needed.
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1110/003/
|
||||
- https://docs.microsoft.com/en-us/security/compass/incident-response-playbook-password-spray
|
||||
- https://www.cisa.gov/uscert/ncas/alerts/aa21-008a
|
||||
- https://docs.microsoft.com/azure/active-directory/reports-monitoring/reference-sign-ins-error-codes
|
||||
tags:
|
||||
analytic_story:
|
||||
- Azure Active Directory Account Takeover
|
||||
asset_type: Azure AD
|
||||
atomic_guid: []
|
||||
confidence: 60
|
||||
impact: 70
|
||||
message: An anomalous multi source authentication spike ocurred at $_time$
|
||||
mitre_attack_id:
|
||||
- T1586
|
||||
- T1586.003
|
||||
- T1110
|
||||
- T1110.003
|
||||
- T1110.004
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 42
|
||||
required_fields:
|
||||
- _time
|
||||
- category
|
||||
- properties.authenticationDetails{}.succeeded
|
||||
- properties.location.countryOrRegion
|
||||
- user_agent
|
||||
- src_ip
|
||||
- user
|
||||
security_domain: identity
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/azure_ad_distributed_spray/azure_ad_distributed_spray.log
|
||||
source: Azure AD
|
||||
sourcetype: azure:monitor:aad
|
||||
@@ -0,0 +1,59 @@
|
||||
name: Azure AD Multiple AppIDs and UserAgents Authentication Spike
|
||||
id: 5d8bb1f0-f65a-4b4e-af2e-fcdb88276314
|
||||
version: 1
|
||||
date: '2023-10-25'
|
||||
author: Mauricio Velazco, Splunk
|
||||
status: production
|
||||
type: Anomaly
|
||||
data_source: []
|
||||
description: This analytic is crafted to identify unusual and potentially malicious authentication activity within an Azure AD environment. It triggers when a single user account is involved in more than 8 authentication attempts, using 3 or more unique application IDs and more than 5 unique user agents within a short timeframe. This pattern is atypical for regular user behavior and may indicate an adversary's attempt to probe the environment, testing for multi-factor authentication requirements across different applications and platforms. The detection is based on analysis of Azure AD audit logs, specifically focusing on authentication events. It employs statistical thresholds to highlight instances where the volume of authentication attempts and the diversity of application IDs and user agents associated with a single user account exceed normal parameters. Identifying this behavior is crucial as it provides an early indication of potential account compromise. Adversaries, once in possession of user credentials, often conduct reconnaissance to understand the security controls in place, including multi-factor authentication configurations. Tools like Invoke-MFASweep are commonly used for this purpose, automating the process of testing different user agents and application IDs to bypass MFA. By detecting these initial probing attempts, security teams can swiftly respond, potentially stopping an attack in its early stages and preventing further unauthorized access. This proactive stance is vital for maintaining the integrity of the organization's security posture. If validated as a true positive, this detection points to a compromised account, signaling that an attacker is actively attempting to navigate security controls to maintain access and potentially escalate privileges. This could lead to further exploitation, lateral movement within the network, and eventual data exfiltration. Recognizing and responding to this early stage of an attack is vital for preventing substantial harm and safeguarding sensitive organizational data and systems.
|
||||
search: ' `azure_monitor_aad` category=SignInLogs operationName="Sign-in activity" (properties.authenticationRequirement="multiFactorAuthentication" AND properties.status.additionalDetails="MFA required in Azure AD") OR (properties.authenticationRequirement=singleFactorAuthentication AND "properties.authenticationDetails{}.succeeded"=true)
|
||||
| bucket span=5m _time
|
||||
| rename properties.* as *
|
||||
| stats dc(_raw) as failed_attempts dc(appId) as unique_app_ids dc(userAgent) as unique_user_agents values(appDisplayName) values(deviceDetail.operatingSystem) by _time user src_ip
|
||||
| where failed_attempts > 5 and unique_app_ids > 2 and unique_user_agents > 5
|
||||
| `azure_ad_multiple_appids_and_useragents_authentication_spike_filter`'
|
||||
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the SignInLogs log category.
|
||||
known_false_positives: Rapid authentication from the same user using more than 5 different user agents and 3 application IDs is highly unlikely under normal circumstances. However, there are potential scenarios that could lead to false positives.
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1078/
|
||||
- https://www.blackhillsinfosec.com/exploiting-mfa-inconsistencies-on-microsoft-services/
|
||||
- https://github.com/dafthack/MFASweep
|
||||
- https://www.youtube.com/watch?v=SK1zgqaAZ2E
|
||||
tags:
|
||||
analytic_story:
|
||||
- Azure Active Directory Account Takeover
|
||||
asset_type: Azure AD Tenant
|
||||
confidence: 80
|
||||
impact: 60
|
||||
message: $user$ authenticated in a short periof of time with more than 5 different user agents across 3 or more unique application ids.
|
||||
mitre_attack_id:
|
||||
- T1078
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 48
|
||||
required_fields:
|
||||
- _time
|
||||
- category
|
||||
- operationName
|
||||
- properties.authenticationRequirement
|
||||
- properties.status.additionalDetails
|
||||
- properties.authenticationDetails{}.succeeded
|
||||
- properties.userAgent
|
||||
- properties.appDisplayName
|
||||
security_domain: identity
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1078/azure_ad_multiple_appids_and_useragents_auth/azure_ad_multiple_appids_and_useragents_auth.log
|
||||
source: Azure AD
|
||||
sourcetype: azure:monitor:aad
|
||||
@@ -0,0 +1,65 @@
|
||||
name: Azure AD Multiple Denied MFA Requests For User
|
||||
id: d0895c20-de71-4fd2-b56c-3fcdb888eba1
|
||||
version: 1
|
||||
date: '2023-10-31'
|
||||
author: Mauricio Velazco, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source: []
|
||||
description: This analytic targets the detection of an unusually high number of denied Multi-Factor Authentication (MFA) requests for a single user within a 10-minute window, specifically identifying instances where more than nine MFA prompts were declined by the user. Utilizing Azure Active Directory (Azure AD) sign-in logs, particularly focusing on "Sign-in activity" events, it filters for scenarios where the MFA request was denied due to the user declining the authentication, as indicated by error code 500121 and additional details stating "MFA denied; user declined the authentication." The data is then aggregated into 10-minute intervals, counting distinct raw events and capturing the earliest and latest times of occurrence for each user. This behavior is significant for a Security Operations Center (SOC) as it could be an early indicator of a targeted attack or an account compromise attempt, with an attacker having obtained the user's credentials and the user actively declining the MFA prompts, preventing unauthorized access. A true positive detection would imply that an attacker is on the verge of gaining full access to the user's account, posing a threat that could lead to data exfiltration, lateral movement, or further malicious activities within the organization, necessitating immediate investigation and response to safeguard the organization's assets.
|
||||
search: '`azure_monitor_aad` category=SignInLogs operationName="Sign-in activity"
|
||||
| rename properties.* as *
|
||||
| search status.errorCode=500121 status.additionalDetails="MFA denied; user declined the authentication"
|
||||
| bucket span=10m _time
|
||||
| stats dc(_raw) AS mfa_prompts earliest(_time) as firstTime latest(_time) as lastTime by user, status.additionalDetails, appDisplayName, userAgent, _time
|
||||
| where mfa_prompts > 9
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)`
|
||||
| `azure_ad_multiple_denied_mfa_requests_for_user_filter`'
|
||||
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the Signin log category.
|
||||
known_false_positives: Multiple denifed MFA requests in a short period of span may also be a sign of authentication errors. Investigate and filter as needed.
|
||||
references:
|
||||
- https://www.mandiant.com/resources/blog/russian-targeting-gov-business
|
||||
- https://arstechnica.com/information-technology/2022/03/lapsus-and-solar-winds-hackers-both-use-the-same-old-trick-to-bypass-mfa/
|
||||
- https://therecord.media/russian-hackers-bypass-2fa-by-annoying-victims-with-repeated-push-notifications/
|
||||
- https://attack.mitre.org/techniques/T1621/
|
||||
- https://attack.mitre.org/techniques/T1078/004/
|
||||
- https://www.cisa.gov/sites/default/files/publications/fact-sheet-implement-number-matching-in-mfa-applications-508c.pdf
|
||||
tags:
|
||||
analytic_story:
|
||||
- Azure Active Directory Account Takeover
|
||||
asset_type: Azure Active Directory
|
||||
confidence: 90
|
||||
impact: 60
|
||||
atomic_guid: []
|
||||
message: User $user$ denied more than 9 MFA requests in a timespan of 10 minutes.
|
||||
mitre_attack_id:
|
||||
- T1621
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 54
|
||||
required_fields:
|
||||
- _time
|
||||
- category
|
||||
- category
|
||||
- properties.status.errorCode
|
||||
- properties.status.additionalDetails
|
||||
- user
|
||||
- properties.appDisplayName
|
||||
- properties.userAgent
|
||||
security_domain: identity
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1621/azure_ad_multiple_denied_mfa_requests/azure_ad_multiple_denied_mfa_requests.log
|
||||
source: Azure AD
|
||||
sourcetype: azure:monitor:aad
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Azure AD Multiple Failed MFA Requests For User
|
||||
id: 264ea131-ab1f-41b8-90e0-33ad1a1888ea
|
||||
version: 1
|
||||
version: 2
|
||||
date: '2022-08-25'
|
||||
author: Mauricio Velazco, Gowthamaraj Rajendran, Splunk
|
||||
status: production
|
||||
@@ -8,24 +8,26 @@ type: TTP
|
||||
description: The following analytic identifies multiple failed multi-factor authentication
|
||||
requests for a single user within an Azure AD tenant. Error Code 500121 represents
|
||||
a failed attempt to authenticate using a second factor. Specifically, the analytic
|
||||
triggers when more than 10 MFA user prompts fail within 10 minutes. Azure AD tenants
|
||||
can be very different depending on the organization, Security teams should test
|
||||
triggers when more than 10 MFA user prompts fail within 10 minutes. The reasons for these failure could be several,
|
||||
like the user not responding in time or receiving multiple duplicate MFA requests.
|
||||
Azure AD tenants can be very different depending on the organization, Security teams should test
|
||||
this detection and customize these arbitrary thresholds. The detected behavior may
|
||||
represent an adversary who has obtained legitimate credentials for a user and continuously
|
||||
repeats login attempts in order to bombard users with MFA push notifications, SMS
|
||||
messages, and phone calls potentially resulting in the user finally accepting the
|
||||
authentication request. Threat actors like the Lapsus team and APT29 have leveraged
|
||||
this technique to bypass multi-factor authentication controls as reported by Mandiant
|
||||
and others.
|
||||
and others.
|
||||
data_source: []
|
||||
search: ' `azuread` category=SignInLogs properties.status.errorCode=500121
|
||||
| rename properties.* as * | bucket span=10m _time | stats dc(_raw) AS mfa_prompts
|
||||
values(ipAddress) as ipAddress by userPrincipalName, status.additionalDetails, appDisplayName,
|
||||
userAgent, _time | where mfa_prompts > 10 | `azure_ad_multiple_failed_mfa_requests_for_user_filter`'
|
||||
search: ' `azure_monitor_aad` category=SignInLogs operationName="Sign-in activity" properties.status.errorCode=500121 properties.status.additionalDetails!="MFA denied; user declined the authentication"
|
||||
| rename properties.* as *
|
||||
| bucket span=10m _time
|
||||
| stats dc(_raw) AS mfa_prompts earliest(_time) as firstTime latest(_time) as lastTime by user, status.additionalDetails, appDisplayName, userAgent, _time
|
||||
| where mfa_prompts > 9
|
||||
| `azure_ad_multiple_failed_mfa_requests_for_user_filter`'
|
||||
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details).
|
||||
You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
Specifically, this analytic leverages the SignInLogs log category.
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the Signin log category.
|
||||
known_false_positives: Multiple Failed MFA requests may also be a sign of authentication
|
||||
or application issues. Filter as needed.
|
||||
references:
|
||||
@@ -34,13 +36,14 @@ references:
|
||||
- https://therecord.media/russian-hackers-bypass-2fa-by-annoying-victims-with-repeated-push-notifications/
|
||||
- https://attack.mitre.org/techniques/T1621/
|
||||
- https://attack.mitre.org/techniques/T1078/004/
|
||||
- https://www.cisa.gov/sites/default/files/publications/fact-sheet-implement-number-matching-in-mfa-applications-508c.pdf
|
||||
tags:
|
||||
analytic_story:
|
||||
- Azure Active Directory Account Takeover
|
||||
asset_type: Azure Active Directory
|
||||
confidence: 90
|
||||
impact: 60
|
||||
message: Multiple Failed MFA requests for user $userPrincipalName$
|
||||
message: User $user$ failed to complete MFA authentication more than 9 times in a timespan of 10 minutes.
|
||||
mitre_attack_id:
|
||||
- T1586
|
||||
- T1586.003
|
||||
@@ -48,7 +51,7 @@ tags:
|
||||
- T1078
|
||||
- T1078.004
|
||||
observable:
|
||||
- name: userPrincipalName
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Victim
|
||||
@@ -61,14 +64,14 @@ tags:
|
||||
- properties.status.errorCode
|
||||
- category
|
||||
- properties.authenticationDetails
|
||||
- properties.userPrincipalName
|
||||
- properties.ipAddress
|
||||
- user
|
||||
risk_score: 54
|
||||
security_domain: identity
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1621/multiple_failed_mfa_requests/azure-audit.log
|
||||
source: mscs:azure:eventhub
|
||||
sourcetype: mscs:azure:eventhub
|
||||
source: Azure AD
|
||||
sourcetype: azure:monitor:aad
|
||||
update_timestamp: true
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
name: Azure AD New MFA Method Registered
|
||||
id: 0488e814-eb81-42c3-9f1f-b2244973e3a3
|
||||
version: 1
|
||||
date: '2023-10-31'
|
||||
author: Mauricio Velazco, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source: []
|
||||
description: This analytic detects the registration of a new Multi-Factor Authentication (MFA) method associated with a user account within Azure Active Directory by monitoring Azure AD audit logs and configurations. While adding a new MFA method can be a routine and legitimate action, it can also be indicative of an attacker's attempt to maintain persistence on a compromised account. By registering a new MFA method, attackers can potentially bypass existing security measures, allowing them to authenticate using stolen credentials without raising alarms. Monitoring for such changes is crucial, especially if the addition is not preceded by a user request or if it deviates from typical user behavior. If an attacker successfully registers a new MFA method on a compromised account, they can solidify their access, making it harder for legitimate users to regain control. The attacker can then operate with the privileges of the compromised account, potentially accessing sensitive data, making unauthorized changes, or even escalating their privileges further. Immediate action would be required to verify the legitimacy of the MFA change and, if malicious, to remediate and secure the affected account.
|
||||
search: >-
|
||||
`azure_monitor_aad` operationName="Update user"
|
||||
| rename properties.* as *
|
||||
| eval propertyName = mvindex('targetResources{}.modifiedProperties{}.displayName', 0)
|
||||
| search propertyName = StrongAuthenticationMethod
|
||||
| eval oldvalue = mvindex('targetResources{}.modifiedProperties{}.oldValue',0)
|
||||
| eval newvalue = mvindex('targetResources{}.modifiedProperties{}.newValue',0)
|
||||
| rex field=newvalue max_match=0 "(?i)(?<new_method_type>\"MethodType\")"
|
||||
| rex field=oldvalue max_match=0 "(?i)(?<old_method_type>\"MethodType\")"
|
||||
| eval count_new_method_type = coalesce(mvcount(new_method_type), 0)
|
||||
| eval count_old_method_type = coalesce(mvcount(old_method_type), 0)
|
||||
| stats earliest(_time) as firstTime latest(_time) as lastTime values(propertyName) by user newvalue oldvalue
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)`
|
||||
| `azure_ad_new_mfa_method_registered_filter`
|
||||
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the AuditLog log category.
|
||||
known_false_positives: Users may register MFA methods legitimally, investigate and filter as needed.
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1098/005/
|
||||
- https://www.microsoft.com/en-us/security/blog/2023/06/08/detecting-and-mitigating-a-multi-stage-aitm-phishing-and-bec-campaign/
|
||||
- https://www.csoonline.com/article/573451/sophisticated-bec-scammers-bypass-microsoft-365-multi-factor-authentication.html
|
||||
tags:
|
||||
analytic_story:
|
||||
- Azure Active Directory Persistence
|
||||
asset_type: Azure AD
|
||||
confidence: 50
|
||||
impact: 60
|
||||
message: A new MFA method was registered for user $user$
|
||||
mitre_attack_id:
|
||||
- T1098
|
||||
- T1098.005
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 30
|
||||
required_fields:
|
||||
- _time
|
||||
- operationName
|
||||
- properties.targetResources{}.modifiedProperties{}.displayName
|
||||
- properties.targetResources{}.modifiedProperties{}.oldValue
|
||||
- properties.targetResources{}.modifiedProperties{}.newValue
|
||||
- user
|
||||
security_domain: identity
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.005/azure_ad_register_new_mfa_method/azure_ad_register_new_mfa_method.log
|
||||
source: Azure AD
|
||||
sourcetype: azure:monitor:aad
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
name: Azure AD OAuth Application Consent Granted By User
|
||||
id: 10ec9031-015b-4617-b453-c0c1ab729007
|
||||
version: 1
|
||||
date: '2023-10-27'
|
||||
author: Mauricio Velazco, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source: []
|
||||
description: This analytic detects when a user in an Azure AD environment grants consent to an OAuth application, capturing any consent granted regardless of the specific permissions requested. Utilizing Azure AD audit logs, it focuses on events related to OAuth application consents, alerting security teams to instances where users actively grant consent to applications. This monitoring is crucial as it highlights potential risks associated with third-party applications gaining access to organizational data, a tactic often exploited by malicious actors to gain unauthorized access. A true positive from this analytic necessitates immediate investigation to validate the application's legitimacy, review the granted permissions, and assess potential risks, helping to prevent unauthorized access and protect sensitive data and resources. While false positives may occur with legitimate application integrations, ensuring alignment with organizational policies and security best practices is paramount.
|
||||
search: >-
|
||||
`azure_monitor_aad` operationName="Consent to application" properties.result=success
|
||||
| rename properties.* as *
|
||||
| eval permissions_index = if(mvfind('targetResources{}.modifiedProperties{}.displayName', "ConsentAction.Permissions") >= 0, mvfind('targetResources{}.modifiedProperties{}.displayName', "ConsentAction.Permissions"), -1)
|
||||
| eval permissions = mvindex('targetResources{}.modifiedProperties{}.newValue',permissions_index)
|
||||
| rex field=permissions "Scope: (?<Scope>[^,]+)"
|
||||
| stats count min(_time) as firstTime max(_time) as lastTime by operationName, user, Scope
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)`
|
||||
| `azure_ad_oauth_application_consent_granted_by_user_filter`
|
||||
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the AuditLog log category.
|
||||
known_false_positives: False positives may occur if users are granting consents as part of legitimate application integrations or setups. It is crucial to review the application and the permissions it requests to ensure they align with organizational policies and security best practices.
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1528/
|
||||
- https://www.microsoft.com/en-us/security/blog/2022/09/22/malicious-oauth-applications-used-to-compromise-email-servers-and-spread-spam/
|
||||
- https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/protect-against-consent-phishing
|
||||
- https://learn.microsoft.com/en-us/defender-cloud-apps/investigate-risky-oauth
|
||||
- https://www.alteredsecurity.com/post/introduction-to-365-stealer
|
||||
- https://github.com/AlteredSecurity/365-Stealer
|
||||
tags:
|
||||
analytic_story:
|
||||
- Azure Active Directory Account Takeover
|
||||
asset_type: Azure AD
|
||||
confidence: 60
|
||||
impact: 60
|
||||
message: User $user$ consented an OAuth application.
|
||||
mitre_attack_id:
|
||||
- T1528
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 36
|
||||
required_fields:
|
||||
- _time
|
||||
- operationName
|
||||
- properties.targetResources{}.modifiedProperties{}.displayName
|
||||
- properties.targetResources{}.modifiedProperties{}.newValue
|
||||
- user
|
||||
security_domain: identity
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1528/azure_ad_user_consent_granted/azure_ad_user_consent_granted.log
|
||||
source: Azure AD
|
||||
sourcetype: azure:monitor:aad
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
name: Azure AD Tenant Wide Admin Consent Granted
|
||||
id: dc02c0ee-6ac0-4c7f-87ba-8ce43a4e4418
|
||||
version: 2
|
||||
date: '2023-09-14'
|
||||
author: Mauricio Velazco, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source: []
|
||||
description: The following analytic identifies instances where admin consent is granted to an application within an Azure AD tenant. It leverages Azure AD audit logs, specifically events related to the admin consent action within the ApplicationManagement category. The admin consent action allows applications to access data across the entire tenant, potentially encompassing a vast amount of organizational data. Given its broad scope and the sensitivity of some permissions that can only be granted via admin consent, it's crucial to monitor this action. Unauthorized or inadvertent granting of admin consent can lead to significant security risks, including data breaches, unauthorized data access, and potential compliance violations. If an attacker successfully tricks an administrator into granting admin consent to a malicious or compromised application, they can gain extensive and persistent access to organizational data. This can lead to data exfiltration, espionage, further malicious activities within the tenant, and potential breaches of compliance regulations
|
||||
search: >-
|
||||
`azure_monitor_aad` operationName="Consent to application"
|
||||
| eval new_field=mvindex('properties.targetResources{}.modifiedProperties{}.newValue', 4)
|
||||
| rename properties.* as *
|
||||
| rex field=new_field "ConsentType: (?<ConsentType>[^\,]+)"
|
||||
| stats count min(_time) as firstTime max(_time) as lastTime by operationName, user, targetResources{}.displayName, targetResources{}.id, ConsentType
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)`
|
||||
| `azure_ad_tenant_wide_admin_consent_granted_filter`
|
||||
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the Auditlogs log category.
|
||||
known_false_positives: Legitimate applications may be granted tenant wide consent, filter as needed.
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1098/003/
|
||||
- https://www.mandiant.com/resources/blog/remediation-and-hardening-strategies-for-microsoft-365-to-defend-against-unc2452
|
||||
- https://learn.microsoft.com/en-us/security/operations/incident-response-playbook-app-consent
|
||||
- https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/grant-admin-consent?pivots=portal
|
||||
- https://microsoft.github.io/Azure-Threat-Research-Matrix/Persistence/AZT501/AZT501-2/
|
||||
tags:
|
||||
analytic_story:
|
||||
- Azure Active Directory Persistence
|
||||
asset_type: Azure AD
|
||||
confidence: 50
|
||||
impact: 90
|
||||
message: Administrator $user$ consented an OAuth application for the tenant.
|
||||
mitre_attack_id:
|
||||
- T1098
|
||||
- T1098.003
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Attacker
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 45
|
||||
required_fields:
|
||||
- _time
|
||||
- operationName
|
||||
- user
|
||||
- properties.targetResources{}.modifiedProperties{}.newValue
|
||||
- properties.targetResources{}.displayName
|
||||
- properties.targetResources{}.id
|
||||
security_domain: identity
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.003/azure_ad_admin_consent/azure_ad_admin_consent.log
|
||||
source: Azure AD
|
||||
sourcetype: azure:monitor:aad
|
||||
@@ -0,0 +1,66 @@
|
||||
name: Azure AD User Consent Blocked for Risky Application
|
||||
id: 06b8ec9a-d3b5-4882-8f16-04b4d10f5eab
|
||||
version: 1
|
||||
date: '2023-10-27'
|
||||
author: Mauricio Velazco, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source: []
|
||||
description: The following analytic identifies instances where Azure AD has blocked a user's attempt to grant consent to an application deemed risky or potentially malicious. This suggests that the application has exhibited behaviors or characteristics that are commonly associated with malicious intent or poses a security risk. This detection leverages the Azure AD audit logs, specifically focusing on events related to user consent actions and system-driven blocks. By filtering for blocked consent actions associated with applications, the analytic highlights instances where Azure's built-in security measures have intervened. Applications that are flagged and blocked by Azure typically exhibit suspicious characteristics or behaviors. Monitoring for these blocked consent attempts helps security teams identify potential threats early on and can provide insights into users who might be targeted or susceptible to such risky applications. It's an essential layer of defense in ensuring that malicious or risky applications don't gain access to organizational data. If the detection is a true positive, it indicates that the built-in security measures of O365 successfully prevented a potentially harmful application from gaining access. However, the attempt itself suggests that either a user might be targeted or that there's a presence of malicious applications trying to infiltrate the organization. Immediate investigation is required to understand the context of the block and to take further preventive measures.
|
||||
search: >-
|
||||
`azure_monitor_aad` operationName="Consent to application" properties.result=failure
|
||||
| rename properties.* as *
|
||||
| eval reason_index = if(mvfind('targetResources{}.modifiedProperties{}.displayName', "ConsentAction.Reason") >= 0, mvfind('targetResources{}.modifiedProperties{}.displayName', "ConsentAction.Reason"), -1)
|
||||
| eval permissions_index = if(mvfind('targetResources{}.modifiedProperties{}.displayName', "ConsentAction.Permissions") >= 0, mvfind('targetResources{}.modifiedProperties{}.displayName', "ConsentAction.Permissions"), -1)
|
||||
| search reason_index >= 0
|
||||
| eval reason = mvindex('targetResources{}.modifiedProperties{}.newValue',reason_index)
|
||||
| eval permissions = mvindex('targetResources{}.modifiedProperties{}.newValue',permissions_index)
|
||||
| search reason = "\"Risky application detected\""
|
||||
| rex field=permissions "Scope: (?<Scope>[^,]+)"
|
||||
| stats count min(_time) as firstTime max(_time) as lastTime by operationName, user, reason, Scope
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)`
|
||||
| `azure_ad_user_consent_blocked_for_risky_application_filter`
|
||||
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the AuditLog log category.
|
||||
known_false_positives: UPDATE_KNOWN_FALSE_POSITIVES
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1528/
|
||||
- https://www.microsoft.com/en-us/security/blog/2022/09/22/malicious-oauth-applications-used-to-compromise-email-servers-and-spread-spam/
|
||||
- https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/protect-against-consent-phishing
|
||||
- https://learn.microsoft.com/en-us/defender-cloud-apps/investigate-risky-oauth
|
||||
- https://www.alteredsecurity.com/post/introduction-to-365-stealer
|
||||
- https://github.com/AlteredSecurity/365-Stealer
|
||||
tags:
|
||||
analytic_story:
|
||||
- Azure Active Directory Account Takeover
|
||||
asset_type: Azure AD tenant
|
||||
confidence: 100
|
||||
impact: 30
|
||||
message: Azure AD has blocked $user$ attempt to grant to consent to an application deemed risky.
|
||||
mitre_attack_id:
|
||||
- T1528
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 30
|
||||
required_fields:
|
||||
- _time
|
||||
- operationName
|
||||
- properties.result
|
||||
- properties.targetResources{}.modifiedProperties{}.displayName
|
||||
- properties.targetResources{}.modifiedProperties{}.newValue
|
||||
security_domain: identity
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1528/azure_ad_user_consent_blocked/azure_ad_user_consent_blocked.log
|
||||
source: Azure AD
|
||||
sourcetype: azure:monitor:aad
|
||||
@@ -0,0 +1,59 @@
|
||||
name: Azure AD User Consent Denied for OAuth Application
|
||||
id: bb093c30-d860-4858-a56e-cd0895d5b49c
|
||||
version: 1
|
||||
date: '2023-10-27'
|
||||
author: Mauricio Velazco, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source: []
|
||||
description: The following analytic identifies instances where a user has actively denied consent to an OAuth application seeking permissions within the Azure AD environment. This suggests that the user either recognized something suspicious about the application or chose not to grant it the requested permissions for other reasons. This detection leverages the Azure AD's audit logs, specifically focusing on events related to user consent actions. By filtering for denied consent actions associated with OAuth applications, the analytic captures instances where users have actively rejected permission requests. While user-denied consents can be routine, they can also be indicative of users spotting potentially suspicious or unfamiliar applications. By monitoring these denied consent attempts, security teams can gain insights into applications that might be perceived as risky or untrusted by users. It can also serve as a feedback loop for security awareness training, indicating that users are being cautious about granting permissions. If the detection is a true positive, it indicates that a user has actively prevented an OAuth application from gaining the permissions it requested. While this is a proactive security measure on the user's part, it's essential for security teams to review the context of the denial. Understanding why certain applications are being denied can help in refining application whitelisting policies and ensuring that no malicious applications are attempting to gain access.
|
||||
search: ' `azure_monitor_aad` operationName="Sign-in activity" properties.status.errorCode=65004
|
||||
| rename properties.* as *
|
||||
| stats count min(_time) as firstTime max(_time) as lastTime by operationName, user, appDisplayName, status.failureReason
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)`
|
||||
| `azure_ad_user_consent_denied_for_oauth_application_filter`'
|
||||
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft
|
||||
Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub.
|
||||
This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the SignInLogs log category.
|
||||
known_false_positives: Users may deny consent for legitimate applications by mistake, filter as needed.
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1528/
|
||||
- https://www.microsoft.com/en-us/security/blog/2022/09/22/malicious-oauth-applications-used-to-compromise-email-servers-and-spread-spam/
|
||||
- https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/protect-against-consent-phishing
|
||||
- https://learn.microsoft.com/en-us/defender-cloud-apps/investigate-risky-oauth
|
||||
- https://www.alteredsecurity.com/post/introduction-to-365-stealer
|
||||
- https://github.com/AlteredSecurity/365-Stealer
|
||||
tags:
|
||||
analytic_story:
|
||||
- Azure Active Directory Account Takeover
|
||||
asset_type: Azure AD
|
||||
confidence: 60
|
||||
impact: 60
|
||||
message: User $user$ denied consent for an OAuth application.
|
||||
mitre_attack_id:
|
||||
- T1528
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 36
|
||||
required_fields:
|
||||
- _time
|
||||
- operationName
|
||||
- properties.status.errorCode
|
||||
- user
|
||||
- properties.appDisplayName
|
||||
- status.failureReason
|
||||
security_domain: identity
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1528/azure_ad_user_consent_declined/azure_ad_user_consent_declined.log
|
||||
source: Azure AD
|
||||
sourcetype: azure:monitor:aad
|
||||
@@ -0,0 +1,43 @@
|
||||
name: Risk Rule for Dev Sec Ops by Repository
|
||||
id: 161bc0ca-4651-4c13-9c27-27770660cf67
|
||||
version: 1
|
||||
date: '2023-10-27'
|
||||
author: Bhavin Patel
|
||||
status: production
|
||||
type: Correlation
|
||||
description: |-
|
||||
The following analytic detects by correlating repository and risk score to identify patterns and trends in the data based on the level of risk associated. The analytic adds any null values and calculates the sum of the risk scores for each detection. Then, the analytic captures the source and user information for each detection and sorts the results in ascending order based on the risk score. Finally, the analytic filters the detections with a risk score below 80 and focuses only on high-risk detections.This detection is important because it provides valuable insights into the distribution of high-risk activities across different repositories. It also identifies the most vulnerable repositories that are frequently targeted by potential threats. Additionally, it proactively detects and responds to potential threats, thereby minimizing the impact of attacks and safeguarding critical assets. Finally, it provides a comprehensive view of the risk landscape and helps to make informed decisions to protect the organization's data and infrastructure. False positives might occur so it is important to identify the impact of the attack and prioritize response and mitigation efforts.
|
||||
data_source: []
|
||||
search: '| tstats `security_content_summariesonly` min(_time) as firstTime max(_time) as lastTime sum(All_Risk.calculated_risk_score) as sum_risk_score, values(All_Risk.annotations.mitre_attack.mitre_tactic) as annotations.mitre_attack.mitre_tactic, values(All_Risk.annotations.mitre_attack.mitre_technique_id) as annotations.mitre_attack.mitre_technique_id, dc(All_Risk.annotations.mitre_attack.mitre_technique_id) as mitre_technique_id_count values(source) as source, dc(source) as source_count from datamodel=Risk.All_Risk where All_Risk.analyticstories="Dev Sec Ops" All_Risk.risk_object_type = "other" by All_Risk.risk_object All_Risk.risk_object_type All_Risk.annotations.mitre_attack.mitre_tactic | `drop_dm_object_name(All_Risk)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | where source_count > 3 and sum_risk_score > 100 | `risk_rule_for_dev_sec_ops_by_repository_filter`'
|
||||
how_to_implement: Ensure that all relevant detections in the Dev Sec Ops analytic stories are enabled and are configured to create risk events in Enterprise Security.
|
||||
known_false_positives: Unknown
|
||||
references: []
|
||||
tags:
|
||||
analytic_story:
|
||||
- Dev Sec Ops
|
||||
asset_type: Amazon Elastic Container Registry
|
||||
confidence: 100
|
||||
impact: 70
|
||||
message: Correlation triggered for repository $risk_object$
|
||||
mitre_attack_id:
|
||||
- T1204.003
|
||||
- T1204
|
||||
observable:
|
||||
- name: risk_object
|
||||
type: Other
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
required_fields:
|
||||
- _time
|
||||
risk_score: 70
|
||||
security_domain: cloud
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://raw.githubusercontent.com/splunk/attack_data/master/datasets/attack_techniques/T1204.003/risk_dataset/aws_ecr_risk_dataset.log
|
||||
source: aws_ecr_risk_dataset.log
|
||||
sourcetype: stash
|
||||
@@ -44,6 +44,7 @@ tags:
|
||||
- HAFNIUM Group
|
||||
- Data Destruction
|
||||
- IcedID
|
||||
- SysAid On-Prem Software CVE-2023-47246 Vulnerability
|
||||
asset_type: Endpoint
|
||||
confidence: 70
|
||||
impact: 80
|
||||
|
||||
@@ -50,6 +50,7 @@ tags:
|
||||
- Citrix ShareFile RCE CVE-2023-24489
|
||||
- Flax Typhoon
|
||||
- WS FTP Server Critical Vulnerabilities
|
||||
- SysAid On-Prem Software CVE-2023-47246 Vulnerability
|
||||
asset_type: Endpoint
|
||||
confidence: 80
|
||||
impact: 100
|
||||
|
||||
@@ -37,6 +37,7 @@ tags:
|
||||
analytic_story:
|
||||
- Spring4Shell CVE-2022-22965
|
||||
- Atlassian Confluence Server and Data Center CVE-2022-26134
|
||||
- SysAid On-Prem Software CVE-2023-47246 Vulnerability
|
||||
asset_type: Endpoint
|
||||
confidence: 70
|
||||
cve:
|
||||
|
||||
@@ -3,7 +3,6 @@ id: 40e3b299-19a5-4460-96e9-e1467f714f8e
|
||||
version: 1
|
||||
date: '2023-03-22'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: Anomaly
|
||||
status: production
|
||||
data_source:
|
||||
@@ -51,4 +50,4 @@ tests:
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/4104-psremoting-windows-powershell.log
|
||||
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
|
||||
sourcetype: xmlwineventlog
|
||||
sourcetype: xmlwineventlog
|
||||
|
||||
@@ -3,14 +3,11 @@ id: 651ee958-a433-471c-b264-39725b788b83
|
||||
version: 1
|
||||
date: '2023-03-22'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: Anomaly
|
||||
status: production
|
||||
data_source:
|
||||
- Powershell 4104
|
||||
description: This analytic identifies the use of the New-CIMSession cmdlet being created along with the Invoke-CIMMethod cmdlet being used within PowerShell. This particular behavior is similar to the usage of the Invoke-WMIMethod cmdlet, which is known for executing WMI commands on targets using NTLMv2 pass-the-hash authentication. The New-CIMSession cmdlet allows users to create a new CIM session object for a specified computer system, which can then be used to execute CIM operations remotely. Similarly, the Invoke-CIMMethod cmdlet is used to invoke a specified method on one or more CIM objects. Therefore, the combination of New-CIMSession and Invoke-CIMMethod cmdlets in PowerShell can potentially indicate malicious behavior, and this analytic can help detect such activity.
|
||||
data_source:
|
||||
- Powershell 4104
|
||||
search: '`powershell` EventCode=4104 ScriptBlockText IN ("*invoke-CIMMethod*", "*New-CimSession*")
|
||||
| stats count min(_time) as firstTime max(_time) as lastTime by Computer EventCode ScriptBlockText
|
||||
| `security_content_ctime(firstTime)`
|
||||
@@ -52,4 +49,4 @@ tests:
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/atomic_red_team/4104-cimmethod-windows-powershell.log
|
||||
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
|
||||
sourcetype: xmlwineventlog
|
||||
sourcetype: xmlwineventlog
|
||||
|
||||
@@ -3,7 +3,6 @@ id: 0734bd21-2769-4972-a5f1-78bb1e011224
|
||||
version: 1
|
||||
date: '2023-03-22'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
status: production
|
||||
data_source:
|
||||
@@ -50,4 +49,4 @@ tests:
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/atomic_red_team/invokewmiexec_windows-powershell.log
|
||||
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
|
||||
sourcetype: xmlwineventlog
|
||||
sourcetype: xmlwineventlog
|
||||
|
||||
@@ -3,7 +3,6 @@ id: 04207f8a-e08d-4ee6-be26-1e0c4488b04a
|
||||
version: 1
|
||||
date: '2023-03-24'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: Anomaly
|
||||
status: production
|
||||
data_source:
|
||||
@@ -52,4 +51,4 @@ tests:
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/start_stop_service_windows-powershell.log
|
||||
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
|
||||
sourcetype: xmlwineventlog
|
||||
sourcetype: xmlwineventlog
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
name: Windows AutoIt3 Execution
|
||||
id: 0ecb40d9-492b-4a57-9f87-515dd742794c
|
||||
version: 1
|
||||
date: '2023-10-31'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source:
|
||||
- Sysmon Event ID 1
|
||||
description: The following analytic is designed to detect any execution of AutoIt3, a scripting language designed for automating the Windows GUI and general scripting. This includes instances where AutoIt3 has been renamed or otherwise altered in an attempt to evade detection. The analytic works by searching for process names or original file names that match 'autoit3.exe', which is the default executable for AutoIt scripts. This detection is important as AutoIt3 is often used by attackers to automate malicious activities, such as the execution of malware or other unwanted software. False positives may occur with legitimate uses of AutoIt3.
|
||||
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
|
||||
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN ("autoit3.exe", "autoit*.exe") OR Processes.original_file_name IN ("autoit3.exe", "autoit*.exe")
|
||||
by Processes.dest Processes.user Processes.parent_process_name Processes.process_name Processes.original_file_name Processes.process Processes.process_id Processes.parent_process_id
|
||||
| `drop_dm_object_name(Processes)`
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)` | `windows_autoit3_execution_filter`'
|
||||
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
|
||||
known_false_positives: False positives may be present if the application is legitimately used, filter by user or endpoint as needed.
|
||||
references:
|
||||
- https://github.com/PaloAltoNetworks/Unit42-timely-threat-intel/blob/main/2023-10-25-IOCs-from-DarkGate-activity.txt
|
||||
tags:
|
||||
analytic_story:
|
||||
- DarkGate Malware
|
||||
asset_type: Endpoint
|
||||
atomic_guid: []
|
||||
confidence: 100
|
||||
impact: 50
|
||||
message: Execution of AutoIt3 detected. The source process is $parent_process_name$ and the destination process is $process_name$ on $dest$ by
|
||||
mitre_attack_id:
|
||||
- T1059
|
||||
observable:
|
||||
- name: parent_process_name
|
||||
type: Process
|
||||
role:
|
||||
- Parent Process
|
||||
- name: process_name
|
||||
type: Process
|
||||
role:
|
||||
- Child Process
|
||||
- name: dest
|
||||
type: Hostname
|
||||
role:
|
||||
- Victim
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Other
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 50
|
||||
required_fields:
|
||||
- Processes.dest
|
||||
- Processes.user
|
||||
- Processes.parent_process_name
|
||||
- Processes.process_name
|
||||
- Processes.original_file_name
|
||||
- Processes.process
|
||||
- Processes.process_id
|
||||
- Processes.parent_process_id
|
||||
security_domain: endpoint
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059/autoit/sysmon.log
|
||||
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
|
||||
sourcetype: xmlwineventlog
|
||||
@@ -0,0 +1,49 @@
|
||||
name: Windows CAB File on Disk
|
||||
id: 622f08d0-69ef-42c2-8139-66088bc25acd
|
||||
version: 1
|
||||
date: '2023-11-08'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: Anomaly
|
||||
data_source:
|
||||
- Sysmon Event ID 11
|
||||
description: The following analytic identifies .cab files being written to disk. Utilize this analytic as a way to hunt for suspect .cab files being written to non-standard paths and tune as needed. Cab files were recently being utilized to deliver .url files embedded. The .url files were then used to deliver malicious payloads. The search specifically looks for instances where the file name is '*.cab' and the action is 'write'. During the triage process, it is recommended to review the file path for additional artifacts that may provide further insights into the event.
|
||||
search: '| tstats `security_content_summariesonly` count values(Filesystem.file_path)
|
||||
as file_path min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Filesystem where (Filesystem.file_name=*.cab) by Filesystem.dest Filesystem.action Filesystem.process_id Filesystem.file_name
|
||||
| `drop_dm_object_name("Filesystem")` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_cab_file_on_disk_filter`'
|
||||
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
|
||||
known_false_positives: False positives will only be present if a process legitimately writes a .cab file to disk. Modify the analytic as needed by file path. Filter as needed.
|
||||
references:
|
||||
- https://github.com/PaloAltoNetworks/Unit42-timely-threat-intel/blob/main/2023-10-25-IOCs-from-DarkGate-activity.txt
|
||||
tags:
|
||||
analytic_story:
|
||||
- DarkGate Malware
|
||||
asset_type: Endpoint
|
||||
atomic_guid: []
|
||||
confidence: 10
|
||||
impact: 50
|
||||
message: A .cab file was written to disk on endpoint $dest$.
|
||||
mitre_attack_id:
|
||||
- T1566.001
|
||||
observable:
|
||||
- name: dest
|
||||
type: Hostname
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 5
|
||||
required_fields:
|
||||
- Filesystem.dest
|
||||
- Filesystem.action
|
||||
- Filesystem.process_id
|
||||
- Filesystem.file_name
|
||||
security_domain: endpoint
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059/autoit/cab_files.log
|
||||
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
|
||||
sourcetype: xmlwineventlog
|
||||
@@ -0,0 +1,60 @@
|
||||
name: Windows ConHost with Headless Argument
|
||||
id: d5039508-998d-4cfc-8b5e-9dcd679d9a62
|
||||
version: 1
|
||||
date: '2023-11-01'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source:
|
||||
- Windows Security 4688
|
||||
description: 'The following analytic detects the unusual use of the Windows Console Host process (conhost.exe) with the undocumented --headless parameter to spawn a new process. This behavior is highly unusual and indicative of suspicious activity, as the --headless parameter is not commonly used in legitimate operations. The analytic identifies this behavior by looking for instances where conhost.exe is invoked with the --headless argument. This behavior is worth identifying for a Security Operations Center (SOC) as it could indicate an attacker''s attempt to execute commands or scripts in a stealthy manner, potentially to establish persistence, perform lateral movement, or carry out other malicious activities. If a true positive is identified, it suggests that an attacker has gained a foothold in the environment and is attempting to further their attack, which could lead to serious consequences such as data exfiltration, system compromise, or deployment of ransomware. Potential false positives could arise from legitimate administrative activity, hence it is important to validate the context of the detected behavior during triage.'
|
||||
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
|
||||
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=conhost.exe
|
||||
Processes.process="*--headless *" by Processes.dest Processes.user Processes.parent_process
|
||||
Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
|
||||
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_conhost_with_headless_argument_filter`'
|
||||
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
|
||||
known_false_positives: False positives may be present if the application is legitimately used, filter by user or endpoint as needed.
|
||||
references:
|
||||
- https://x.com/embee_research/status/1559410767564181504?s=20
|
||||
- https://x.com/GroupIB_TI/status/1719675754886131959?s=20
|
||||
tags:
|
||||
analytic_story:
|
||||
- Spearphishing Attachments
|
||||
asset_type: endpoint
|
||||
atomic_guid: []
|
||||
confidence: 70
|
||||
impact: 100
|
||||
message: Windows ConHost with Headless Argument detected on $dest$ by $user$.
|
||||
mitre_attack_id:
|
||||
- T1564.003
|
||||
- T1564.006
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Victim
|
||||
- name: dest
|
||||
type: Hostname
|
||||
role:
|
||||
- Victim
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 70
|
||||
required_fields:
|
||||
- Processes.dest
|
||||
- Processes.user
|
||||
- Processes.parent_process
|
||||
- Processes.process_name
|
||||
- Processes.process
|
||||
- Processes.process_id
|
||||
- Processes.parent_process_id
|
||||
security_domain: endpoint
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1564.003/headless/4688_conhost_headless.log
|
||||
source: XmlWinEventLog:Security
|
||||
sourcetype: XmlWinEventLog
|
||||
@@ -3,7 +3,6 @@ id: 12c80db8-ef62-4456-92df-b23e1b3219f6
|
||||
version: 1
|
||||
date: '2023-03-27'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: Anomaly
|
||||
status: production
|
||||
data_source:
|
||||
@@ -56,4 +55,4 @@ tests:
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/enableat_windows-sysmon.log
|
||||
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
|
||||
sourcetype: xmlwineventlog
|
||||
sourcetype: xmlwineventlog
|
||||
|
||||
@@ -39,6 +39,7 @@ references:
|
||||
tags:
|
||||
analytic_story:
|
||||
- Log4Shell CVE-2021-44228
|
||||
- SysAid On-Prem Software CVE-2023-47246 Vulnerability
|
||||
asset_type: Endpoint
|
||||
confidence: 50
|
||||
cve:
|
||||
|
||||
@@ -36,8 +36,8 @@ tags:
|
||||
asset_type: Endpoint
|
||||
confidence: 80
|
||||
impact: 80
|
||||
message: a registry $Registry.registry_path$ was modified or created to modify defaulticon
|
||||
settings of the $dest$
|
||||
message: A suspicious registry modification to change the default icon association
|
||||
of windows to ransomware was detected on endpoint $dest$ by user $user$.
|
||||
mitre_attack_id:
|
||||
- T1112
|
||||
observable:
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
name: Windows MSIExec Spawn WinDBG
|
||||
id: 9a18f7c2-1fe3-47b8-9467-8b3976770a30
|
||||
version: 1
|
||||
date: '2023-10-31'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source:
|
||||
- Sysmon Event ID 1
|
||||
description: This analytic identifies the unusual behavior of MSIExec spawning WinDBG. It is designed to detect potential malicious activities. The search specifically looks for instances where the parent process name is 'msiexec.exe' and the process name is 'windbg.exe'. During the triage process, it is recommended to review the file path for additional artifacts that may provide further insights into the event.
|
||||
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
|
||||
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=msiexec.exe Processes.process_name=windbg.exe by Processes.dest Processes.user Processes.parent_process_name Processes.parent_process_path Processes.parent_process Processes.process_name Processes.process_path
|
||||
Processes.process Processes.process_id Processes.parent_process_id
|
||||
| `drop_dm_object_name(Processes)`
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)`| `windows_msiexec_spawn_windbg_filter`'
|
||||
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
|
||||
known_false_positives: False positives will only be present if the MSIExec process legitimately spawns WinDBG. Filter as needed.
|
||||
references:
|
||||
- https://github.com/PaloAltoNetworks/Unit42-timely-threat-intel/blob/main/2023-10-25-IOCs-from-DarkGate-activity.txt
|
||||
tags:
|
||||
analytic_story:
|
||||
- DarkGate Malware
|
||||
asset_type: Endpoint
|
||||
atomic_guid: []
|
||||
confidence: 100
|
||||
impact: 100
|
||||
message: An instance of $parent_process_name$ spawning $process_name$ was identified
|
||||
on endpoint $dest$ by user $user$.
|
||||
mitre_attack_id:
|
||||
- T1218.007
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Victim
|
||||
- name: dest
|
||||
type: Hostname
|
||||
role:
|
||||
- Victim
|
||||
- name: parent_process_name
|
||||
type: Process Name
|
||||
role:
|
||||
- Parent Process
|
||||
- name: process_name
|
||||
type: Process
|
||||
role:
|
||||
- Child Process
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 100
|
||||
required_fields:
|
||||
- Processes.dest
|
||||
- Processes.user
|
||||
- Processes.parent_process_name
|
||||
- Processes.parent_process_path
|
||||
- Processes.parent_process
|
||||
- Processes.process_name
|
||||
- Processes.process_path
|
||||
- Processes.process
|
||||
- Processes.process_id
|
||||
- Processes.parent_process_id
|
||||
security_domain: endpoint
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.007/atomic_red_team/windbg_msiexec.log
|
||||
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
|
||||
sourcetype: xmlwineventlog
|
||||
@@ -3,7 +3,6 @@ id: d8c972eb-ed84-431a-8869-ca4bd83257d1
|
||||
version: 1
|
||||
date: '2023-03-27'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: Anomaly
|
||||
status: production
|
||||
data_source:
|
||||
@@ -48,4 +47,4 @@ tests:
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/get_ciminstance_windows-powershell.log
|
||||
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
|
||||
sourcetype: xmlwineventlog
|
||||
sourcetype: xmlwineventlog
|
||||
|
||||
@@ -3,7 +3,6 @@ id: 0be4b5d6-c449-4084-b945-2392b519c33b
|
||||
version: 1
|
||||
date: '2023-03-20'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: Anomaly
|
||||
status: production
|
||||
data_source:
|
||||
@@ -51,4 +50,4 @@ tests:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1543.003/atomic_red_team/remcom_windows-system.log
|
||||
source: XmlWinEventLog:System
|
||||
sourcetype: XmlWinEventLog
|
||||
update_timestamp: true
|
||||
update_timestamp: true
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
name: Windows WinDBG Spawning AutoIt3
|
||||
id: 7aec015b-cd69-46c3-85ed-dac152056aa4
|
||||
version: 1
|
||||
date: '2023-10-31'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
type: TTP
|
||||
data_source:
|
||||
- Sysmon Event ID 1
|
||||
description: The following analytic identifies instances of the WinDBG process spawning AutoIt3. This behavior may indicate malicious activity as AutoIt3 is often used by threat actors for scripting malicious automation. The search specifically looks for instances where the parent process name is 'windbg.exe' and the process name is 'autoit3.exe' or 'autoit*.exe'. During the triage process, it is recommended to review the file path for additional artifacts that may provide further insights into the event.
|
||||
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=windbg.exe AND (Processes.process_name IN ("autoit3.exe", "autoit*.exe") OR Processes.original_file_name IN ("autoit3.exe", "autoit*.exe")) by Processes.dest, Processes.user, Processes.parent_process_name, Processes.process_name, Processes.original_file_name, Processes.process, Processes.process_id, Processes.parent_process_id
|
||||
| `drop_dm_object_name(Processes)`
|
||||
| `security_content_ctime(firstTime)`
|
||||
| `security_content_ctime(lastTime)`
|
||||
| eval matches_extension=if(match(process, "\\.(au3|a3x|exe|aut|aup)$"), "Yes", "No")
|
||||
| search matches_extension="Yes" | `windows_windbg_spawning_autoit3_filter`'
|
||||
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
|
||||
known_false_positives: False positives will only be present if the WinDBG process legitimately spawns AutoIt3. Filter as needed.
|
||||
references:
|
||||
- https://github.com/PaloAltoNetworks/Unit42-timely-threat-intel/blob/main/2023-10-25-IOCs-from-DarkGate-activity.txt
|
||||
tags:
|
||||
analytic_story:
|
||||
- DarkGate Malware
|
||||
asset_type: Endpoint
|
||||
atomic_guid: []
|
||||
confidence: 100
|
||||
impact: 100
|
||||
message: An instance of $parent_process_name$ spawning $process_name$ was identified
|
||||
on endpoint $dest$ by user $user$.
|
||||
mitre_attack_id:
|
||||
- T1059
|
||||
observable:
|
||||
- name: user
|
||||
type: User
|
||||
role:
|
||||
- Victim
|
||||
- name: dest
|
||||
type: Hostname
|
||||
role:
|
||||
- Victim
|
||||
- name: parent_process_name
|
||||
type: Process Name
|
||||
role:
|
||||
- Parent Process
|
||||
- name: process_name
|
||||
type: Process
|
||||
role:
|
||||
- Child Process
|
||||
product:
|
||||
- Splunk Enterprise
|
||||
- Splunk Enterprise Security
|
||||
- Splunk Cloud
|
||||
risk_score: 100
|
||||
required_fields:
|
||||
- Processes.dest
|
||||
- Processes.user
|
||||
- Processes.parent_process_name
|
||||
- Processes.process_name
|
||||
- Processes.original_file_name
|
||||
- Processes.process
|
||||
- Processes.process_id
|
||||
- Processes.parent_process_id
|
||||
security_domain: endpoint
|
||||
tests:
|
||||
- name: True Positive Test
|
||||
attack_data:
|
||||
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059/autoit/windbg_autoit.log
|
||||
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
|
||||
sourcetype: xmlwineventlog
|
||||
@@ -33,6 +33,7 @@ tags:
|
||||
analytic_story:
|
||||
- Spring4Shell CVE-2022-22965
|
||||
- Atlassian Confluence Server and Data Center CVE-2022-26134
|
||||
- SysAid On-Prem Software CVE-2023-47246 Vulnerability
|
||||
asset_type: Endpoint
|
||||
confidence: 70
|
||||
cve:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Attempted Credential Dump From Registry via Reg exe
|
||||
id: 14038953-e5f2-4daf-acff-5452062baf03
|
||||
version: 3
|
||||
version: 4
|
||||
date: '2021-11-29'
|
||||
author: Jose Hernandez, Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Delete A Net User
|
||||
id: 8776d79c-d26e-11eb-9a56-acde48001122
|
||||
version: 4
|
||||
version: 5
|
||||
date: '2022-03-17'
|
||||
author: Teoderick Contreras, Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: Deleting Shadow Copies
|
||||
id: fd40c537-53d0-4c28-9b7e-77cfd28a49c8
|
||||
date: '2023-10-03'
|
||||
version: 1
|
||||
version: 2
|
||||
author: Bhavin Patel, Splunk
|
||||
status: validation
|
||||
type: TTP
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Deny Permission using Cacls Utility
|
||||
id: b76eae28-cd25-11eb-9c92-acde48001122
|
||||
version: 3
|
||||
version: 4
|
||||
date: '2021-11-29'
|
||||
author: Teoderick Contreras, Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Detect Prohibited Applications Spawning cmd exe
|
||||
id: c10a18cb-fd80-4ffa-a844-25026e0a0c94
|
||||
version: 4
|
||||
version: 5
|
||||
date: '2022-03-01'
|
||||
author: Ignacio Bermudez Corrales, Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Detect Prohibited Applications Spawning cmd exe browsers
|
||||
id: c10a18cb-fd70-4ffa-a844-25026e0a0c94
|
||||
version: 1
|
||||
version: 2
|
||||
date: '2023-10-26'
|
||||
author: Lou Stella, Splunk
|
||||
status: validation
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Detect Prohibited Applications Spawning cmd exe office
|
||||
id: c10a18cb-fd70-4ffa-a844-25026e0b0c94
|
||||
version: 1
|
||||
version: 2
|
||||
date: '2023-10-26'
|
||||
author: Lou Stella, Splunk
|
||||
status: validation
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
name: Detect Prohibited Applications Spawning cmd exe powershell
|
||||
id: c10a18cb-fd70-4ffa-a844-25126e0b0d94
|
||||
version: 1
|
||||
version: 2
|
||||
date: '2023-10-26'
|
||||
author: Lou Stella, Splunk
|
||||
status: validation
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Disable Net User Account
|
||||
id: ba858b08-d26c-11eb-af9b-acde48001122
|
||||
version: 3
|
||||
version: 4
|
||||
date: '2021-11-30'
|
||||
author: Teoderick Contreras, Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Grant Permission Using Cacls Utility
|
||||
id: c6da561a-cd29-11eb-ae65-acde48001122
|
||||
version: 3
|
||||
version: 4
|
||||
date: '2021-11-30'
|
||||
author: Teoderick Contreras, Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Modify ACLs Permission Of Files Or Folders
|
||||
id: 9ae9a48a-cdbe-11eb-875a-acde48001122
|
||||
version: 3
|
||||
version: 4
|
||||
date: '2022-03-17'
|
||||
author: Teoderick Contreras, Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Office Product Spawning Windows Script Host
|
||||
id: 3ea3851a-8736-41a0-bc09-7e4485b48fa6
|
||||
version: 1
|
||||
version: 2
|
||||
date: '2022-10-12'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Services lolbas Execution Process Spawn
|
||||
id: 0d85fde3-0de9-4eec-b386-6a8ba70f3935
|
||||
version: 1
|
||||
version: 2
|
||||
date: '2023-10-02'
|
||||
author: Bhavin Patel, Splunk
|
||||
status: validation
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: System Process Running from Unexpected Location
|
||||
id: 28179107-099a-464a-94d3-08301e6c055f
|
||||
version: 4
|
||||
version: 5
|
||||
date: '2022-03-24'
|
||||
author: Jose Hernadnez, Ignacio Bermudez Corrales, Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Windows LOLBin Binary in Non Standard Path
|
||||
id: 25689101-012a-324a-94d3-08301e6c065a
|
||||
version: 4
|
||||
version: 5
|
||||
date: '2022-08-31'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Windows MSHTA Child Process
|
||||
id: f63f7e9c-9526-11ec-9fc7-acde48001122
|
||||
version: 2
|
||||
version: 3
|
||||
date: '2022-02-23'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Windows OS Credential Dumping with Procdump
|
||||
id: e102e297-dbe6-4a19-b319-5c08f4c19a06
|
||||
version: 1
|
||||
version: 2
|
||||
date: '2022-08-31'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
name: Windows Powershell Connect to Internet With Hidden Window
|
||||
id: 477e068e-8b6d-11ec-b6c1-81af21670352
|
||||
version: 2
|
||||
version: 3
|
||||
date: '2022-02-11'
|
||||
author: Jose Hernandez, David Dorsey, Michael Haag Splunk
|
||||
status: production
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Windows Powershell DownloadFile
|
||||
id: 46440222-81d5-44b1-a376-19dcd70d1b08
|
||||
version: 1
|
||||
version: 2
|
||||
date: '2022-02-11'
|
||||
author: Jose Hernandez, Michael Haag, Splunk
|
||||
status: production
|
||||
|
||||
@@ -4,7 +4,7 @@ version: 1
|
||||
date: '2023-05-18'
|
||||
author: Michael Haag, Splunk
|
||||
status: experimental
|
||||
type: anomaly
|
||||
type: Anomaly
|
||||
description: The following analytic identifies the PowerShell Cmdlet export-pfxcertificate
|
||||
utilizing Script Block Logging. This particular behavior is related to an adversary
|
||||
attempting to steal certificates local to the Windows endpoint within the Certificate
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Windows PowerShell Start-BitsTransfer
|
||||
id: 0bafd086-8f61-11ec-996e-acde48001122
|
||||
version: 1
|
||||
version: 2
|
||||
date: '2022-02-16'
|
||||
author: Michael Haag, Splunk
|
||||
status: production
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
"id": {
|
||||
"group": null,
|
||||
"name": "DA-ESS-ContentUpdate",
|
||||
"version": "4.15.0"
|
||||
"version": "4.16.0"
|
||||
},
|
||||
"author": [
|
||||
{
|
||||
|
||||
+234
-29
@@ -1,6 +1,6 @@
|
||||
#############
|
||||
# Automatically generated by generator.py in splunk/security_content
|
||||
# On Date: 2023-11-01T20:44:08 UTC
|
||||
# On Date: 2023-11-16T22:15:55 UTC
|
||||
# Author: Splunk Threat Research Team - Splunk
|
||||
# Contact: research@splunk.com
|
||||
#############
|
||||
@@ -305,6 +305,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitr
|
||||
known_false_positives = This search may reveal non malicious URLs with environment variables used in organizations.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Splunk App for Lookup File Editing RCE via User XSLT - Rule]
|
||||
type = detection
|
||||
asset_type = endpoint
|
||||
confidence = medium
|
||||
explanation = This search provides information to investigate possible remote code execution exploitation via user-supplied Extensible Stylesheet Language Transformations (XSLT), affecting Splunk versions 9.1.x. Exploitation of this vulnerability by attackers requires that the Splunk App for Lookup File Editing is, or was, installed.
|
||||
how_to_implement = Because there is no way to detect the payload, this search only provides the ability to monitor the creation of lookups which are the base of this exploit. An operator must then investigate suspicious lookups. This search requires ability to perform REST queries. Note that if the Splunk App for Lookup File Editing is not, or was not, installed in the Splunk environment then it is not necessary to run the search as the enviornment was not vulnerable.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitre_attack": ["T1210"], "nist": ["DE.AE"]}
|
||||
known_false_positives = This search will provide information for investigation and hunting of lookup creation via user-supplied XSLT which may be indications of possible exploitation. There will be false positives as it is not possible to detect the payload executed via this exploit.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Splunk Code Injection via custom dashboard leading to RCE - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
@@ -655,6 +665,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation", "Deliv
|
||||
known_false_positives = Automation executing authentication attempts against your Splunk infrastructure with outdated credentials may cause false positives.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Splunk XSS in Highlighted JSON Events - Rule]
|
||||
type = detection
|
||||
asset_type = endpoint
|
||||
confidence = medium
|
||||
explanation = This detection provides information about possible exploitation against affected versions of Splunk Enterprise 9.1.2. The ability to view JSON logs in the web GUI may be abused by crafting a specific request, causing the execution of javascript in script tags. This vulnerability can be used to execute javascript to access the API at the permission level of the logged-in user. If user is admin it can be used to create an admin user, giving an attacker broad access to the Splunk Environment.
|
||||
how_to_implement = This search only applies to web-GUI-enabled Splunk instances and operator must have access to internal indexes.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Delivery"], "mitre_attack": ["T1189"], "nist": ["DE.AE"]}
|
||||
known_false_positives = This is a hunting search and will produce false positives as it is not possible to view contents of a request payload. It shows the artifact resulting from a potential exploitation payload (the creation of a user with admin privileges).
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Splunk XSS in Monitoring Console - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
@@ -1498,6 +1518,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Weaponization", "Expl
|
||||
known_false_positives = Legitimate users may miss to reply the MFA challenge within the time window or deny it by mistake.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD Block User Consent For Risky Apps Disabled - Rule]
|
||||
type = detection
|
||||
asset_type = Azure AD
|
||||
confidence = medium
|
||||
explanation = This analytic detects when the risk-based step-up consent security setting in Azure AD is disabled. This setting, when enabled, prevents regular users from granting consent to potentially malicious OAuth applications, requiring an administrative step-up for consent instead. Disabling this feature could expose the organization to OAuth phishing threats.The detection operates by monitoring Azure Active Directory logs for events where the "Update authorization policy" operation is performed. It specifically looks for changes to the "AllowUserConsentForRiskyApps" setting, identifying instances where this setting is switched to "true," effectively disabling the risk-based step-up consent. Monitoring for changes to critical security settings like the "risk-based step-up consent" is vital for maintaining the integrity of an organization's security posture. Disabling this feature can make the environment more susceptible to OAuth phishing attacks, where attackers trick users into granting permissions to malicious applications. Identifying when this setting is disabled can help blue teams to quickly respond, investigate, and potentially uncover targeted phishing campaigns against their users. If an attacker successfully disables the "risk-based step-up consent" and subsequently launches an OAuth phishing campaign, they could gain unauthorized access to user data and other sensitive information within the M365 environment. This could lead to data breaches, unauthorized access to emails, and potentially further compromise within the organization
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the AuditLog log category.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitre_attack": ["T1562"], "nist": ["DE.CM"]}
|
||||
known_false_positives = Legitimate changes to the 'risk-based step-up consent' setting by administrators, perhaps as part of a policy update or security assessment, may trigger this alert, necessitating verification of the change's intent and authorization
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD Concurrent Sessions From Different Ips - Rule]
|
||||
type = detection
|
||||
asset_type = Azure AD
|
||||
@@ -1508,6 +1538,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitr
|
||||
known_false_positives = A user with concurrent sessions from different Ips may also represent the legitimate use of more than one device. Filter as needed and/or customize the threshold to fit your environment.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD Device Code Authentication - Rule]
|
||||
type = detection
|
||||
asset_type = Azure AD
|
||||
confidence = medium
|
||||
explanation = The following analytic identifies the execution of the Azure Device Code Phishing attack, which can lead to Azure Account Take-Over (ATO). The detection leverages Azure AD logs specifically focusing on authentication requests to identify the attack. This technique involves creating malicious infrastructure, bypassing Multi-Factor Authentication (MFA), and bypassing Conditional Access Policies (CAPs). The attack aims to compromise users by sending them phishing emails from attacker-controlled domains and trick the victims into performing OAuth 2.0 device authentication. A successful execution of this attack can result in adversaries gaining unauthorized access to Azure AD, Exchange mailboxes, and the target's Outlook Web Application (OWA). This attack technique was detailed by security researchers including Bobby Cooke, Stephan Borosh, and others. It's crucial for organizations to be aware of this threat, as it can lead to unauthorized access and potential data breaches.
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the SignInLogs log category.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation", "Delivery"], "mitre_attack": ["T1528", "T1566", "T1566.002"], "nist": ["DE.CM"]}
|
||||
known_false_positives = In most organizations, device code authentication will be used to access common Microsoft service but it may be legitimate for others. Filter as needed.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD External Guest User Invited - Rule]
|
||||
type = detection
|
||||
asset_type = Azure Active Directory
|
||||
@@ -1558,12 +1598,42 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Weaponization", "Expl
|
||||
known_false_positives = Legitimate use case may require for users to disable MFA. Filter as needed.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD Multi-Source Failed Authentications Spike - Rule]
|
||||
type = detection
|
||||
asset_type = Azure AD
|
||||
confidence = medium
|
||||
explanation = This analytic detects potential distributed password spraying attacks within an Azure AD environment. It identifies a notable increase in failed authentication attempts across a variety of unique user-and-IP address combinations, originating from multiple source IP addresses and countries, and employing different user agents. Such patterns suggest an adversary's attempt to bypass security controls by using a range of IP addresses to test commonly used passwords against numerous user accounts. The detection scrutinizes SignInLogs from Azure AD logs, particularly focusing on events with error code 50126, which signals a failed authentication due to incorrect credentials. By collating data over a five-minute interval, the analytic computes the distinct counts of user-and-IP combinations, unique users, source IPs, and countries. It then applies a set of thresholds to these metrics to pinpoint unusual activities that could indicate a coordinated attack effort. The thresholds set within the analytic (such as unique IPs, unique users, etc.) are initial guidelines and should be customized based on the organization's user behavior and risk profile. Recognizing this behavior is vital for security operations centers (SOCs) as distributed password spraying represents a more complex form of traditional password spraying. Attackers distribute the source of their attempts to evade detection mechanisms that typically monitor for single-source IP anomalies. Prompt detection of such distributed activities is essential to thwart unauthorized access attempts, prevent account compromises, and mitigate the risk of further malicious activities within the organization's network. A true positive alert from this analytic suggests an active distributed password spraying attack against the organization's Azure AD tenant. A successful attack could result in unauthorized access, particularly to accounts with elevated privileges, leading to data breaches, privilege escalation, persistent threats, and lateral movement within the organization's infrastructure.
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the SignInLogs log category. The thresholds set within the analytic (such as unique IPs, unique users, etc.) are initial guidelines and should be customized based on the organization's user behavior and risk profile. Security teams are encouraged to adjust these thresholds to optimize the balance between detecting genuine threats and minimizing false positives, ensuring the detection is tailored to their specific environment.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Weaponization", "Exploitation"], "mitre_attack": ["T1586", "T1586.003", "T1110", "T1110.003", "T1110.004"], "nist": ["DE.AE"]}
|
||||
known_false_positives = This detection may yield false positives in scenarios where legitimate bulk sign-in activities occur, such as during company-wide system updates or when users are accessing resources from varying locations in a short time frame, such as in the case of VPNs or cloud services that rotate IP addresses. Filter as needed.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD Multiple AppIDs and UserAgents Authentication Spike - Rule]
|
||||
type = detection
|
||||
asset_type = Azure AD Tenant
|
||||
confidence = medium
|
||||
explanation = This analytic is crafted to identify unusual and potentially malicious authentication activity within an Azure AD environment. It triggers when a single user account is involved in more than 8 authentication attempts, using 3 or more unique application IDs and more than 5 unique user agents within a short timeframe. This pattern is atypical for regular user behavior and may indicate an adversary's attempt to probe the environment, testing for multi-factor authentication requirements across different applications and platforms. The detection is based on analysis of Azure AD audit logs, specifically focusing on authentication events. It employs statistical thresholds to highlight instances where the volume of authentication attempts and the diversity of application IDs and user agents associated with a single user account exceed normal parameters. Identifying this behavior is crucial as it provides an early indication of potential account compromise. Adversaries, once in possession of user credentials, often conduct reconnaissance to understand the security controls in place, including multi-factor authentication configurations. Tools like Invoke-MFASweep are commonly used for this purpose, automating the process of testing different user agents and application IDs to bypass MFA. By detecting these initial probing attempts, security teams can swiftly respond, potentially stopping an attack in its early stages and preventing further unauthorized access. This proactive stance is vital for maintaining the integrity of the organization's security posture. If validated as a true positive, this detection points to a compromised account, signaling that an attacker is actively attempting to navigate security controls to maintain access and potentially escalate privileges. This could lead to further exploitation, lateral movement within the network, and eventual data exfiltration. Recognizing and responding to this early stage of an attack is vital for preventing substantial harm and safeguarding sensitive organizational data and systems.
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the SignInLogs log category.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation", "Delivery", "Installation"], "mitre_attack": ["T1078"], "nist": ["DE.AE"]}
|
||||
known_false_positives = Rapid authentication from the same user using more than 5 different user agents and 3 application IDs is highly unlikely under normal circumstances. However, there are potential scenarios that could lead to false positives.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD Multiple Denied MFA Requests For User - Rule]
|
||||
type = detection
|
||||
asset_type = Azure Active Directory
|
||||
confidence = medium
|
||||
explanation = This analytic targets the detection of an unusually high number of denied Multi-Factor Authentication (MFA) requests for a single user within a 10-minute window, specifically identifying instances where more than nine MFA prompts were declined by the user. Utilizing Azure Active Directory (Azure AD) sign-in logs, particularly focusing on "Sign-in activity" events, it filters for scenarios where the MFA request was denied due to the user declining the authentication, as indicated by error code 500121 and additional details stating "MFA denied; user declined the authentication." The data is then aggregated into 10-minute intervals, counting distinct raw events and capturing the earliest and latest times of occurrence for each user. This behavior is significant for a Security Operations Center (SOC) as it could be an early indicator of a targeted attack or an account compromise attempt, with an attacker having obtained the user's credentials and the user actively declining the MFA prompts, preventing unauthorized access. A true positive detection would imply that an attacker is on the verge of gaining full access to the user's account, posing a threat that could lead to data exfiltration, lateral movement, or further malicious activities within the organization, necessitating immediate investigation and response to safeguard the organization's assets.
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the Signin log category.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitre_attack": ["T1621"], "nist": ["DE.CM"]}
|
||||
known_false_positives = Multiple denifed MFA requests in a short period of span may also be a sign of authentication errors. Investigate and filter as needed.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD Multiple Failed MFA Requests For User - Rule]
|
||||
type = detection
|
||||
asset_type = Azure Active Directory
|
||||
confidence = medium
|
||||
explanation = The following analytic identifies multiple failed multi-factor authentication requests for a single user within an Azure AD tenant. Error Code 500121 represents a failed attempt to authenticate using a second factor. Specifically, the analytic triggers when more than 10 MFA user prompts fail within 10 minutes. Azure AD tenants can be very different depending on the organization, Security teams should test this detection and customize these arbitrary thresholds. The detected behavior may represent an adversary who has obtained legitimate credentials for a user and continuously repeats login attempts in order to bombard users with MFA push notifications, SMS messages, and phone calls potentially resulting in the user finally accepting the authentication request. Threat actors like the Lapsus team and APT29 have leveraged this technique to bypass multi-factor authentication controls as reported by Mandiant and others.
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. Specifically, this analytic leverages the SignInLogs log category.
|
||||
explanation = The following analytic identifies multiple failed multi-factor authentication requests for a single user within an Azure AD tenant. Error Code 500121 represents a failed attempt to authenticate using a second factor. Specifically, the analytic triggers when more than 10 MFA user prompts fail within 10 minutes. The reasons for these failure could be several, like the user not responding in time or receiving multiple duplicate MFA requests. Azure AD tenants can be very different depending on the organization, Security teams should test this detection and customize these arbitrary thresholds. The detected behavior may represent an adversary who has obtained legitimate credentials for a user and continuously repeats login attempts in order to bombard users with MFA push notifications, SMS messages, and phone calls potentially resulting in the user finally accepting the authentication request. Threat actors like the Lapsus team and APT29 have leveraged this technique to bypass multi-factor authentication controls as reported by Mandiant and others.
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the Signin log category.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Weaponization", "Exploitation", "Delivery", "Installation"], "mitre_attack": ["T1586", "T1586.003", "T1621", "T1078", "T1078.004"], "nist": ["DE.CM"]}
|
||||
known_false_positives = Multiple Failed MFA requests may also be a sign of authentication or application issues. Filter as needed.
|
||||
providing_technologies = null
|
||||
@@ -1599,6 +1669,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitr
|
||||
known_false_positives = In most organizations, domain federation settings will be updated infrequently. Filter as needed.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD New MFA Method Registered - Rule]
|
||||
type = detection
|
||||
asset_type = Azure AD
|
||||
confidence = medium
|
||||
explanation = This analytic detects the registration of a new Multi-Factor Authentication (MFA) method associated with a user account within Azure Active Directory by monitoring Azure AD audit logs and configurations. While adding a new MFA method can be a routine and legitimate action, it can also be indicative of an attacker's attempt to maintain persistence on a compromised account. By registering a new MFA method, attackers can potentially bypass existing security measures, allowing them to authenticate using stolen credentials without raising alarms. Monitoring for such changes is crucial, especially if the addition is not preceded by a user request or if it deviates from typical user behavior. If an attacker successfully registers a new MFA method on a compromised account, they can solidify their access, making it harder for legitimate users to regain control. The attacker can then operate with the privileges of the compromised account, potentially accessing sensitive data, making unauthorized changes, or even escalating their privileges further. Immediate action would be required to verify the legitimacy of the MFA change and, if malicious, to remediate and secure the affected account.
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the AuditLog log category.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Installation", "Exploitation"], "mitre_attack": ["T1098", "T1098.005"], "nist": ["DE.CM"]}
|
||||
known_false_positives = Users may register MFA methods legitimally, investigate and filter as needed.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD New MFA Method Registered For User - Rule]
|
||||
type = detection
|
||||
asset_type = Azure Active Directory
|
||||
@@ -1609,6 +1689,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation", "Insta
|
||||
known_false_positives = Newly onboarded users who are registering an MFA method for the first time will also trigger this detection.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD OAuth Application Consent Granted By User - Rule]
|
||||
type = detection
|
||||
asset_type = Azure AD
|
||||
confidence = medium
|
||||
explanation = This analytic detects when a user in an Azure AD environment grants consent to an OAuth application, capturing any consent granted regardless of the specific permissions requested. Utilizing Azure AD audit logs, it focuses on events related to OAuth application consents, alerting security teams to instances where users actively grant consent to applications. This monitoring is crucial as it highlights potential risks associated with third-party applications gaining access to organizational data, a tactic often exploited by malicious actors to gain unauthorized access. A true positive from this analytic necessitates immediate investigation to validate the application's legitimacy, review the granted permissions, and assess potential risks, helping to prevent unauthorized access and protect sensitive data and resources. While false positives may occur with legitimate application integrations, ensuring alignment with organizational policies and security best practices is paramount.
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the AuditLog log category.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitre_attack": ["T1528"], "nist": ["DE.CM"]}
|
||||
known_false_positives = False positives may occur if users are granting consents as part of legitimate application integrations or setups. It is crucial to review the application and the permissions it requests to ensure they align with organizational policies and security best practices.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD PIM Role Assigned - Rule]
|
||||
type = detection
|
||||
asset_type = Azure Active Directory
|
||||
@@ -1719,6 +1809,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Weaponization", "Expl
|
||||
known_false_positives = Although not recommended, certain users may be required without multi-factor authentication. Filter as needed
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD Tenant Wide Admin Consent Granted - Rule]
|
||||
type = detection
|
||||
asset_type = Azure AD
|
||||
confidence = medium
|
||||
explanation = The following analytic identifies instances where admin consent is granted to an application within an Azure AD tenant. It leverages Azure AD audit logs, specifically events related to the admin consent action within the ApplicationManagement category. The admin consent action allows applications to access data across the entire tenant, potentially encompassing a vast amount of organizational data. Given its broad scope and the sensitivity of some permissions that can only be granted via admin consent, it's crucial to monitor this action. Unauthorized or inadvertent granting of admin consent can lead to significant security risks, including data breaches, unauthorized data access, and potential compliance violations. If an attacker successfully tricks an administrator into granting admin consent to a malicious or compromised application, they can gain extensive and persistent access to organizational data. This can lead to data exfiltration, espionage, further malicious activities within the tenant, and potential breaches of compliance regulations
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the Auditlogs log category.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Installation", "Exploitation"], "mitre_attack": ["T1098", "T1098.003"], "nist": ["DE.CM"]}
|
||||
known_false_positives = Legitimate applications may be granted tenant wide consent, filter as needed.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD Unusual Number of Failed Authentications From Ip - Rule]
|
||||
type = detection
|
||||
asset_type = Azure Active Directory
|
||||
@@ -1731,6 +1831,26 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Weaponization", "Expl
|
||||
known_false_positives = A source Ip failing to authenticate with multiple users is not a common for legitimate behavior.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD User Consent Blocked for Risky Application - Rule]
|
||||
type = detection
|
||||
asset_type = Azure AD tenant
|
||||
confidence = medium
|
||||
explanation = The following analytic identifies instances where Azure AD has blocked a user's attempt to grant consent to an application deemed risky or potentially malicious. This suggests that the application has exhibited behaviors or characteristics that are commonly associated with malicious intent or poses a security risk. This detection leverages the Azure AD audit logs, specifically focusing on events related to user consent actions and system-driven blocks. By filtering for blocked consent actions associated with applications, the analytic highlights instances where Azure's built-in security measures have intervened. Applications that are flagged and blocked by Azure typically exhibit suspicious characteristics or behaviors. Monitoring for these blocked consent attempts helps security teams identify potential threats early on and can provide insights into users who might be targeted or susceptible to such risky applications. It's an essential layer of defense in ensuring that malicious or risky applications don't gain access to organizational data. If the detection is a true positive, it indicates that the built-in security measures of O365 successfully prevented a potentially harmful application from gaining access. However, the attempt itself suggests that either a user might be targeted or that there's a presence of malicious applications trying to infiltrate the organization. Immediate investigation is required to understand the context of the block and to take further preventive measures.
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the AuditLog log category.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitre_attack": ["T1528"], "nist": ["DE.CM"]}
|
||||
known_false_positives = UPDATE_KNOWN_FALSE_POSITIVES
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD User Consent Denied for OAuth Application - Rule]
|
||||
type = detection
|
||||
asset_type = Azure AD
|
||||
confidence = medium
|
||||
explanation = The following analytic identifies instances where a user has actively denied consent to an OAuth application seeking permissions within the Azure AD environment. This suggests that the user either recognized something suspicious about the application or chose not to grant it the requested permissions for other reasons. This detection leverages the Azure AD's audit logs, specifically focusing on events related to user consent actions. By filtering for denied consent actions associated with OAuth applications, the analytic captures instances where users have actively rejected permission requests. While user-denied consents can be routine, they can also be indicative of users spotting potentially suspicious or unfamiliar applications. By monitoring these denied consent attempts, security teams can gain insights into applications that might be perceived as risky or untrusted by users. It can also serve as a feedback loop for security awareness training, indicating that users are being cautious about granting permissions. If the detection is a true positive, it indicates that a user has actively prevented an OAuth application from gaining the permissions it requested. While this is a proactive security measure on the user's part, it's essential for security teams to review the context of the denial. Understanding why certain applications are being denied can help in refining application whitelisting policies and ensuring that no malicious applications are attempting to gain access.
|
||||
how_to_implement = You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase (https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the SignInLogs log category.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitre_attack": ["T1528"], "nist": ["DE.CM"]}
|
||||
known_false_positives = Users may deny consent for legitimate applications by mistake, filter as needed.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Azure AD User Enabled And Password Reset - Rule]
|
||||
type = detection
|
||||
asset_type = Azure Active Directory
|
||||
@@ -1905,26 +2025,6 @@ known_false_positives = This is a strictly behavioral search, so we define "fals
|
||||
This search will fire any time a new IP address is seen in the **GeoIP** database for any kind of provisioning activity. If you typically do all provisioning from tools inside of your country, there should be few false positives. If you are located in countries where the free version of **MaxMind GeoIP** that ships by default with Splunk has weak resolution (particularly small countries in less economically powerful regions), this may be much less valuable to you.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Correlation by Repository and Risk - Rule]
|
||||
type = detection
|
||||
asset_type = AWS Account
|
||||
confidence = medium
|
||||
explanation = The following analytic detects by correlating repository and risk score to identify patterns and trends in the data based on the level of risk associated. The analytic adds any null values and calculates the sum of the risk scores for each detection. Then, the analytic captures the source and user information for each detection and sorts the results in ascending order based on the risk score. Finally, the analytic filters the detections with a risk score below 80 and focuses only on high-risk detections.This detection is important because it provides valuable insights into the distribution of high-risk activities across different repositories. It also identifies the most vulnerable repositories that are frequently targeted by potential threats. Additionally, it proactively detects and responds to potential threats, thereby minimizing the impact of attacks and safeguarding critical assets. Finally, it provides a comprehensive view of the risk landscape and helps to make informed decisions to protect the organization's data and infrastructure. False positives might occur so it is important to identify the impact of the attack and prioritize response and mitigation efforts.
|
||||
how_to_implement = For Dev Sec Ops POC
|
||||
annotations = {"cis20": ["CIS 13"], "kill_chain_phases": ["Installation"], "mitre_attack": ["T1204.003", "T1204"], "nist": ["DE.AE"]}
|
||||
known_false_positives = unknown
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Correlation by User and Risk - Rule]
|
||||
type = detection
|
||||
asset_type = AWS Account
|
||||
confidence = medium
|
||||
explanation = The following analytic detects the correlation between the user and risk score and identifies users with a high risk score that pose a significant security risk such as unauthorized access attempts, suspicious behavior, or potential insider threats. Next, the analytic calculates the sum of the risk scores and groups the results by user, the corresponding signals, and the repository. The results are sorted in descending order based on the risk score and filtered to include records with a risk score greater than 80. Finally, the results are passed through a correlation filter specific to the user and risk. This detection is important because it identifies users who have a high risk score and helps to prioritize investigations and allocate resources. False positives might occur but the impact of such an attack can vary depending on the specific scenario such as data exfiltration, system compromise, or the disruption of critical services. Please investigate this notable event.
|
||||
how_to_implement = For Dev Sec Ops POC
|
||||
annotations = {"cis20": ["CIS 13"], "kill_chain_phases": ["Installation"], "mitre_attack": ["T1204.003", "T1204"], "nist": ["DE.AE"]}
|
||||
known_false_positives = unknown
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Detect AWS Console Login by New User - Rule]
|
||||
type = detection
|
||||
asset_type = AWS Instance
|
||||
@@ -2425,6 +2525,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitr
|
||||
known_false_positives = unknown
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Risk Rule for Dev Sec Ops by Repository - Rule]
|
||||
type = detection
|
||||
asset_type = Amazon Elastic Container Registry
|
||||
confidence = medium
|
||||
explanation = The following analytic detects by correlating repository and risk score to identify patterns and trends in the data based on the level of risk associated. The analytic adds any null values and calculates the sum of the risk scores for each detection. Then, the analytic captures the source and user information for each detection and sorts the results in ascending order based on the risk score. Finally, the analytic filters the detections with a risk score below 80 and focuses only on high-risk detections.This detection is important because it provides valuable insights into the distribution of high-risk activities across different repositories. It also identifies the most vulnerable repositories that are frequently targeted by potential threats. Additionally, it proactively detects and responds to potential threats, thereby minimizing the impact of attacks and safeguarding critical assets. Finally, it provides a comprehensive view of the risk landscape and helps to make informed decisions to protect the organization's data and infrastructure. False positives might occur so it is important to identify the impact of the attack and prioritize response and mitigation efforts.
|
||||
how_to_implement = Ensure that all relevant detections in the Dev Sec Ops analytic stories are enabled and are configured to create risk events in Enterprise Security.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Installation"], "mitre_attack": ["T1204.003", "T1204"], "nist": ["DE.AE"]}
|
||||
known_false_positives = Unknown
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Abnormally High AWS Instances Launched by User - Rule]
|
||||
type = detection
|
||||
asset_type = AWS Instance
|
||||
@@ -2541,6 +2651,26 @@ annotations = {"cis20": ["CIS 13"], "nist": ["DE.AE"]}
|
||||
known_false_positives = It's possible that a user has legitimately deleted a network ACL.
|
||||
providing_technologies = ["Amazon Web Services - Cloudtrail"]
|
||||
|
||||
[savedsearch://ESCU - Correlation by Repository and Risk - Rule]
|
||||
type = detection
|
||||
asset_type = AWS Account
|
||||
confidence = medium
|
||||
explanation = The following analytic detects by correlating repository and risk score to identify patterns and trends in the data based on the level of risk associated. The analytic adds any null values and calculates the sum of the risk scores for each detection. Then, the analytic captures the source and user information for each detection and sorts the results in ascending order based on the risk score. Finally, the analytic filters the detections with a risk score below 80 and focuses only on high-risk detections.This detection is important because it provides valuable insights into the distribution of high-risk activities across different repositories. It also identifies the most vulnerable repositories that are frequently targeted by potential threats. Additionally, it proactively detects and responds to potential threats, thereby minimizing the impact of attacks and safeguarding critical assets. Finally, it provides a comprehensive view of the risk landscape and helps to make informed decisions to protect the organization's data and infrastructure. False positives might occur so it is important to identify the impact of the attack and prioritize response and mitigation efforts.
|
||||
how_to_implement = For Dev Sec Ops POC
|
||||
annotations = {"cis20": ["CIS 13"], "kill_chain_phases": ["Installation"], "mitre_attack": ["T1204.003", "T1204"], "nist": ["DE.AE"]}
|
||||
known_false_positives = unknown
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Correlation by User and Risk - Rule]
|
||||
type = detection
|
||||
asset_type = AWS Account
|
||||
confidence = medium
|
||||
explanation = The following analytic detects the correlation between the user and risk score and identifies users with a high risk score that pose a significant security risk such as unauthorized access attempts, suspicious behavior, or potential insider threats. Next, the analytic calculates the sum of the risk scores and groups the results by user, the corresponding signals, and the repository. The results are sorted in descending order based on the risk score and filtered to include records with a risk score greater than 80. Finally, the results are passed through a correlation filter specific to the user and risk. This detection is important because it identifies users who have a high risk score and helps to prioritize investigations and allocate resources. False positives might occur but the impact of such an attack can vary depending on the specific scenario such as data exfiltration, system compromise, or the disruption of critical services. Please investigate this notable event.
|
||||
how_to_implement = For Dev Sec Ops POC
|
||||
annotations = {"cis20": ["CIS 13"], "kill_chain_phases": ["Installation"], "mitre_attack": ["T1204.003", "T1204"], "nist": ["DE.AE"]}
|
||||
known_false_positives = unknown
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Detect Activity Related to Pass the Hash Attacks - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
@@ -9934,6 +10064,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Command And Control"]
|
||||
known_false_positives = False positives may be present. Filter based on pipe name or process.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Windows AutoIt3 Execution - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
confidence = medium
|
||||
explanation = The following analytic is designed to detect any execution of AutoIt3, a scripting language designed for automating the Windows GUI and general scripting. This includes instances where AutoIt3 has been renamed or otherwise altered in an attempt to evade detection. The analytic works by searching for process names or original file names that match 'autoit3.exe', which is the default executable for AutoIt scripts. This detection is important as AutoIt3 is often used by attackers to automate malicious activities, such as the execution of malware or other unwanted software. False positives may occur with legitimate uses of AutoIt3.
|
||||
how_to_implement = The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Installation"], "mitre_attack": ["T1059"], "nist": ["DE.CM"]}
|
||||
known_false_positives = False positives may be present if the application is legitimately used, filter by user or endpoint as needed.
|
||||
providing_technologies = ["Sysmon", "Microsoft Windows", "Carbon Black Response", "CrowdStrike Falcon", "Symantec Endpoint Protection"]
|
||||
|
||||
[savedsearch://ESCU - Windows Autostart Execution LSASS Driver Registry Modification - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
@@ -9984,6 +10124,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitr
|
||||
known_false_positives = False positives may be present on recent Windows Operating Systems. Filtering may be required based on process_name. In addition, look for non-standard, unsigned, module loads into LSASS. If query is too noisy, modify by adding Endpoint.processes process_name to query to identify the process making the modification.
|
||||
providing_technologies = ["Sysmon", "Microsoft Windows", "Carbon Black Response", "CrowdStrike Falcon", "Symantec Endpoint Protection"]
|
||||
|
||||
[savedsearch://ESCU - Windows CAB File on Disk - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
confidence = medium
|
||||
explanation = The following analytic identifies .cab files being written to disk. Utilize this analytic as a way to hunt for suspect .cab files being written to non-standard paths and tune as needed. Cab files were recently being utilized to deliver .url files embedded. The .url files were then used to deliver malicious payloads. The search specifically looks for instances where the file name is '*.cab' and the action is 'write'. During the triage process, it is recommended to review the file path for additional artifacts that may provide further insights into the event.
|
||||
how_to_implement = The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Delivery"], "mitre_attack": ["T1566.001"], "nist": ["DE.AE"]}
|
||||
known_false_positives = False positives will only be present if a process legitimately writes a .cab file to disk. Modify the analytic as needed by file path. Filter as needed.
|
||||
providing_technologies = ["Sysmon", "Microsoft Windows", "Carbon Black Response", "CrowdStrike Falcon", "Symantec Endpoint Protection"]
|
||||
|
||||
[savedsearch://ESCU - Windows Cached Domain Credentials Reg Query - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
@@ -10104,6 +10254,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitr
|
||||
known_false_positives = It is possible third party applications may add these SPNs to Computer Accounts, filtering may be needed.
|
||||
providing_technologies = ["Microsoft Windows"]
|
||||
|
||||
[savedsearch://ESCU - Windows ConHost with Headless Argument - Rule]
|
||||
type = detection
|
||||
asset_type = endpoint
|
||||
confidence = medium
|
||||
explanation = The following analytic detects the unusual use of the Windows Console Host process (conhost.exe) with the undocumented --headless parameter to spawn a new process. This behavior is highly unusual and indicative of suspicious activity, as the --headless parameter is not commonly used in legitimate operations. The analytic identifies this behavior by looking for instances where conhost.exe is invoked with the --headless argument. This behavior is worth identifying for a Security Operations Center (SOC) as it could indicate an attacker's attempt to execute commands or scripts in a stealthy manner, potentially to establish persistence, perform lateral movement, or carry out other malicious activities. If a true positive is identified, it suggests that an attacker has gained a foothold in the environment and is attempting to further their attack, which could lead to serious consequences such as data exfiltration, system compromise, or deployment of ransomware. Potential false positives could arise from legitimate administrative activity, hence it is important to validate the context of the detected behavior during triage.
|
||||
how_to_implement = The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitre_attack": ["T1564.003", "T1564.006"], "nist": ["DE.CM"]}
|
||||
known_false_positives = False positives may be present if the application is legitimately used, filter by user or endpoint as needed.
|
||||
providing_technologies = ["Sysmon", "Microsoft Windows", "Carbon Black Response", "CrowdStrike Falcon", "Symantec Endpoint Protection"]
|
||||
|
||||
[savedsearch://ESCU - Windows Create Local Account - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
@@ -11548,6 +11708,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitr
|
||||
known_false_positives = False positives will be present with MSIExec spawning Cmd or PowerShell. Filtering will be needed. In addition, add other known discovery processes to enhance query.
|
||||
providing_technologies = ["Sysmon", "Microsoft Windows", "Carbon Black Response", "CrowdStrike Falcon", "Symantec Endpoint Protection"]
|
||||
|
||||
[savedsearch://ESCU - Windows MSIExec Spawn WinDBG - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
confidence = medium
|
||||
explanation = This analytic identifies the unusual behavior of MSIExec spawning WinDBG. It is designed to detect potential malicious activities. The search specifically looks for instances where the parent process name is 'msiexec.exe' and the process name is 'windbg.exe'. During the triage process, it is recommended to review the file path for additional artifacts that may provide further insights into the event.
|
||||
how_to_implement = The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Exploitation"], "mitre_attack": ["T1218.007"], "nist": ["DE.CM"]}
|
||||
known_false_positives = False positives will only be present if the MSIExec process legitimately spawns WinDBG. Filter as needed.
|
||||
providing_technologies = ["Sysmon", "Microsoft Windows", "Carbon Black Response", "CrowdStrike Falcon", "Symantec Endpoint Protection"]
|
||||
|
||||
[savedsearch://ESCU - Windows MSIExec Unregister DLLRegisterServer - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
@@ -13104,6 +13274,16 @@ annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Installation", "Explo
|
||||
known_false_positives = False positives will be present. Drill down into the driver further by version number and cross reference by signer. Review the reference material in the lookup. In addition, modify the query to look within specific paths, which will remove a lot of "normal" drivers.
|
||||
providing_technologies = null
|
||||
|
||||
[savedsearch://ESCU - Windows WinDBG Spawning AutoIt3 - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
confidence = medium
|
||||
explanation = The following analytic identifies instances of the WinDBG process spawning AutoIt3. This behavior may indicate malicious activity as AutoIt3 is often used by threat actors for scripting malicious automation. The search specifically looks for instances where the parent process name is 'windbg.exe' and the process name is 'autoit3.exe' or 'autoit*.exe'. During the triage process, it is recommended to review the file path for additional artifacts that may provide further insights into the event.
|
||||
how_to_implement = The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
|
||||
annotations = {"cis20": ["CIS 10"], "kill_chain_phases": ["Installation"], "mitre_attack": ["T1059"], "nist": ["DE.CM"]}
|
||||
known_false_positives = False positives will only be present if the WinDBG process legitimately spawns AutoIt3. Filter as needed.
|
||||
providing_technologies = ["Sysmon", "Microsoft Windows", "Carbon Black Response", "CrowdStrike Falcon", "Symantec Endpoint Protection"]
|
||||
|
||||
[savedsearch://ESCU - Windows WinLogon with Public Network Connection - Rule]
|
||||
type = detection
|
||||
asset_type = Endpoint
|
||||
@@ -14555,7 +14735,7 @@ version = 2
|
||||
references = ["https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-whatis", "https://azure.microsoft.com/en-us/services/active-directory/#overview", "https://attack.mitre.org/techniques/T1586/", "https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-compare-azure-ad-to-ad", "https://www.imperva.com/learn/application-security/account-takeover-ato/", "https://www.varonis.com/blog/azure-active-directory", "https://www.barracuda.com/glossary/account-takeover"]
|
||||
maintainers = [{"company": "Splunk", "email": "-", "name": "Mauricio Velazco"}]
|
||||
spec_version = 3
|
||||
searches = ["ESCU - Azure Active Directory High Risk Sign-in - Rule", "ESCU - Azure AD Authentication Failed During MFA Challenge - Rule", "ESCU - Azure AD Concurrent Sessions From Different Ips - Rule", "ESCU - Azure AD High Number Of Failed Authentications For User - Rule", "ESCU - Azure AD High Number Of Failed Authentications From Ip - Rule", "ESCU - Azure AD Multi-Factor Authentication Disabled - Rule", "ESCU - Azure AD Multiple Failed MFA Requests For User - Rule", "ESCU - Azure AD Multiple Users Failing To Authenticate From Ip - Rule", "ESCU - Azure AD New MFA Method Registered For User - Rule", "ESCU - Azure AD Successful Authentication From Different Ips - Rule", "ESCU - Azure AD Successful PowerShell Authentication - Rule", "ESCU - Azure AD Successful Single-Factor Authentication - Rule", "ESCU - Azure AD Unusual Number of Failed Authentications From Ip - Rule"]
|
||||
searches = ["ESCU - Azure Active Directory High Risk Sign-in - Rule", "ESCU - Azure AD Authentication Failed During MFA Challenge - Rule", "ESCU - Azure AD Block User Consent For Risky Apps Disabled - Rule", "ESCU - Azure AD Concurrent Sessions From Different Ips - Rule", "ESCU - Azure AD Device Code Authentication - Rule", "ESCU - Azure AD High Number Of Failed Authentications For User - Rule", "ESCU - Azure AD High Number Of Failed Authentications From Ip - Rule", "ESCU - Azure AD Multi-Factor Authentication Disabled - Rule", "ESCU - Azure AD Multi-Source Failed Authentications Spike - Rule", "ESCU - Azure AD Multiple AppIDs and UserAgents Authentication Spike - Rule", "ESCU - Azure AD Multiple Denied MFA Requests For User - Rule", "ESCU - Azure AD Multiple Failed MFA Requests For User - Rule", "ESCU - Azure AD Multiple Users Failing To Authenticate From Ip - Rule", "ESCU - Azure AD New MFA Method Registered For User - Rule", "ESCU - Azure AD OAuth Application Consent Granted By User - Rule", "ESCU - Azure AD Successful Authentication From Different Ips - Rule", "ESCU - Azure AD Successful PowerShell Authentication - Rule", "ESCU - Azure AD Successful Single-Factor Authentication - Rule", "ESCU - Azure AD Unusual Number of Failed Authentications From Ip - Rule", "ESCU - Azure AD User Consent Blocked for Risky Application - Rule", "ESCU - Azure AD User Consent Denied for OAuth Application - Rule"]
|
||||
description = Monitor for activities and techniques associated with Account Takover attacks against Azure Active Directory tenants.
|
||||
narrative = Azure Active Directory (Azure AD) is Microsofts enterprise cloud-based identity and access management (IAM) service. Azure AD is the backbone of most of Azure services like Office 365. It can sync with on-premise Active Directory environments and provide authentication to other cloud-based systems via the OAuth protocol. According to Microsoft, Azure AD manages more than 1.2 billion identities and processes over 8 billion authentications per day. Account Takeover (ATO) is an attack whereby cybercriminals gain unauthorized access to online accounts by using different techniques like brute force, social engineering, phishing & spear phishing, credential stuffing, etc. By posing as the real user, cyber-criminals can change account details, send out phishing emails, steal financial information or sensitive data, or use any stolen information to access further accounts within the organization. This analytic storic groups detections that can help security operations teams identify the potential compromise of Azure Active Directory accounts.
|
||||
|
||||
@@ -14566,7 +14746,7 @@ version = 1
|
||||
references = ["https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-whatis", "https://azure.microsoft.com/en-us/services/active-directory/#overview", "https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-compare-azure-ad-to-ad", "https://attack.mitre.org/tactics/TA0003/", "https://microsoft.github.io/Azure-Threat-Research-Matrix/Persistence/Persistence/"]
|
||||
maintainers = [{"company": "Splunk", "email": "-", "name": "Mauricio Velazco"}]
|
||||
spec_version = 3
|
||||
searches = ["ESCU - Azure AD External Guest User Invited - Rule", "ESCU - Azure AD Global Administrator Role Assigned - Rule", "ESCU - Azure AD New Custom Domain Added - Rule", "ESCU - Azure AD New Federated Domain Added - Rule", "ESCU - Azure AD PIM Role Assigned - Rule", "ESCU - Azure AD PIM Role Assignment Activated - Rule", "ESCU - Azure AD Privileged Role Assigned - Rule", "ESCU - Azure AD Service Principal Created - Rule", "ESCU - Azure AD Service Principal New Client Credentials - Rule", "ESCU - Azure AD Service Principal Owner Added - Rule", "ESCU - Azure AD User Enabled And Password Reset - Rule", "ESCU - Azure AD User ImmutableId Attribute Updated - Rule", "ESCU - Azure Automation Account Created - Rule", "ESCU - Azure Automation Runbook Created - Rule", "ESCU - Azure Runbook Webhook Created - Rule"]
|
||||
searches = ["ESCU - Azure AD External Guest User Invited - Rule", "ESCU - Azure AD Global Administrator Role Assigned - Rule", "ESCU - Azure AD New Custom Domain Added - Rule", "ESCU - Azure AD New Federated Domain Added - Rule", "ESCU - Azure AD New MFA Method Registered - Rule", "ESCU - Azure AD PIM Role Assigned - Rule", "ESCU - Azure AD PIM Role Assignment Activated - Rule", "ESCU - Azure AD Privileged Role Assigned - Rule", "ESCU - Azure AD Service Principal Created - Rule", "ESCU - Azure AD Service Principal New Client Credentials - Rule", "ESCU - Azure AD Service Principal Owner Added - Rule", "ESCU - Azure AD Tenant Wide Admin Consent Granted - Rule", "ESCU - Azure AD User Enabled And Password Reset - Rule", "ESCU - Azure AD User ImmutableId Attribute Updated - Rule", "ESCU - Azure Automation Account Created - Rule", "ESCU - Azure Automation Runbook Created - Rule", "ESCU - Azure Runbook Webhook Created - Rule"]
|
||||
description = Monitor for activities and techniques associated with the execution of Persistence techniques against Azure Active Directory tenants.
|
||||
narrative = Azure Active Directory (Azure AD) is Microsofts enterprise cloud-based identity and access management (IAM) service. Azure AD is the backbone of most of Azure services like Office 365. It can sync with on-premise Active Directory environments and provide authentication to other cloud-based systems via the OAuth protocol. According to Microsoft, Azure AD manages more than 1.2 billion identities and processes over 8 billion authentications per day.\ Persistence consists of techniques that adversaries use to keep access to systems across restarts, changed credentials, and other interruptions that could cut off their access. This analytic storic groups detections that can help security operations teams identify the potential execution of Persistence techniques targeting Azure Active Directory tenants.
|
||||
|
||||
@@ -14960,6 +15140,20 @@ searches = ["ESCU - Any Powershell DownloadFile - Rule", "ESCU - CMD Carry Out S
|
||||
description = Leverage searches that allow you to detect and investigate unusual activities that might relate to the DcRat malware including ddos, spawning more process, botnet c2 communication, defense evasion and etc. The DcRat malware is known commercial backdoor that was first released in 2018. This tool was sold in underground forum and known to be one of the cheapest commercial RATs. DcRat is modular and bespoke plugin framework make it a very flexible option, helpful for a range of nefearious uses.
|
||||
narrative = Adversaries may use this technique to maximize the impact on the target organization in operations where network wide availability interruption is the goal.
|
||||
|
||||
[analytic_story://DarkGate Malware]
|
||||
category = Adversary Tactics
|
||||
last_updated = 2023-10-31
|
||||
version = 1
|
||||
references = ["https://github.security.telekom.com/2023/08/darkgate-loader.html", "https://redcanary.com/blog/intelligence-insights-october-2023"]
|
||||
maintainers = [{"company": "Splunk", "email": "-", "name": "Michael Haag"}]
|
||||
spec_version = 3
|
||||
searches = ["ESCU - Windows AutoIt3 Execution - Rule", "ESCU - Windows CAB File on Disk - Rule", "ESCU - Windows MSIExec Spawn WinDBG - Rule", "ESCU - Windows WinDBG Spawning AutoIt3 - Rule"]
|
||||
description = Telekom Security CTI has uncovered a new phishing-driven malware campaign distributing DarkGate malware. This campaign utilizes stolen email threads to trick users into downloading malicious payloads via hyperlinks. An initial false link to Emotet stirred the security community, but deeper analysis confirmed its true identity as DarkGate, with characteristics like AutoIt scripts and a known command-and-control protocol. This report by Fabian Marquardt details the intricate infection mechanisms, including MSI and VBS file deliveries, sophisticated evasion techniques, and a robust configuration extraction method surpassing current standards. The single developer behind DarkGate, active on cybercrime forums, has shifted the malware's use from private to a rent-out model, implying an expected rise in its deployment. Researchers have also developed a decryption technique for the DarkGate malware, which aids in static analysis and detection, though it requires careful validation to avoid false positives.
|
||||
narrative = Telekom Security CTi has recently put a spotlight on the proliferation of DarkGate malware via a sophisticated malspam campaign, initially mistaken for the notorious Emotet malware. The campaign smartly manipulates stolen email conversations, embedding hyperlinks that, once clicked, activate a malware download. Fabian Marquardt's analysis traces the infection's footprint, revealing a dual delivery mechanism through MSI and VBS files. These files, cloaked in legitimate wrappers or obscured with junk code, ultimately download the malware via embedded scripts. \
|
||||
Marquardt delves into the AutoIt script-based infection, uncovering the calculated use of compiled scripts and base64-encoded data to disguise the execution of malicious shellcode. The subsequent stages of infection exhibit the malware's capability to evade detection, leveraging memory allocation techniques to bypass security measures. Marquardt also explores the loader's function, which decrypts further malicious payloads by interacting with the script's encoded components. \
|
||||
The analytical narrative captures a cross-section of the cybersecurity landscape, reflecting the shift in DarkGate's operational strategy from exclusive use by the developer to a broader dissemination through a Malware-as-a-Service (MaaS) model. This transition suggests an anticipated escalation in DarkGate-related attacks. \
|
||||
Significantly, the report contributes to cybersecurity defenses by outlining a more effective method for extracting malware configurations, providing the community with the means to anticipate and mitigate the evolving threats posed by this pernicious malware. With the insights gained, researchers and security professionals are better equipped to adapt their strategies, constructing more robust defenses against the sophisticated tactics employed by DarkGate and similar malware strains.
|
||||
|
||||
[analytic_story://Data Destruction]
|
||||
category = Malware
|
||||
last_updated = 2023-04-06
|
||||
@@ -15178,7 +15372,7 @@ version = 1
|
||||
references = ["https://www.redhat.com/en/topics/devops/what-is-devsecops"]
|
||||
maintainers = [{"company": "Splunk", "email": "-", "name": "Patrick Bareiss"}]
|
||||
spec_version = 3
|
||||
searches = ["ESCU - AWS ECR Container Scanning Findings High - Rule", "ESCU - AWS ECR Container Scanning Findings Low Informational Unknown - Rule", "ESCU - AWS ECR Container Scanning Findings Medium - Rule", "ESCU - AWS ECR Container Upload Outside Business Hours - Rule", "ESCU - AWS ECR Container Upload Unknown User - Rule", "ESCU - Circle CI Disable Security Job - Rule", "ESCU - Circle CI Disable Security Step - Rule", "ESCU - Correlation by Repository and Risk - Rule", "ESCU - Correlation by User and Risk - Rule", "ESCU - GitHub Actions Disable Security Workflow - Rule", "ESCU - Github Commit Changes In Master - Rule", "ESCU - Github Commit In Develop - Rule", "ESCU - GitHub Dependabot Alert - Rule", "ESCU - GitHub Pull Request from Unknown User - Rule", "ESCU - Gsuite Drive Share In External Email - Rule", "ESCU - GSuite Email Suspicious Attachment - Rule", "ESCU - Gsuite Email Suspicious Subject With Attachment - Rule", "ESCU - Gsuite Email With Known Abuse Web Service Link - Rule", "ESCU - Gsuite Outbound Email With Attachment To External Domain - Rule", "ESCU - Gsuite Suspicious Shared File Name - Rule", "ESCU - Kubernetes Nginx Ingress LFI - Rule", "ESCU - Kubernetes Nginx Ingress RFI - Rule", "ESCU - Kubernetes Scanner Image Pulling - Rule"]
|
||||
searches = ["ESCU - AWS ECR Container Scanning Findings High - Rule", "ESCU - AWS ECR Container Scanning Findings Low Informational Unknown - Rule", "ESCU - AWS ECR Container Scanning Findings Medium - Rule", "ESCU - AWS ECR Container Upload Outside Business Hours - Rule", "ESCU - AWS ECR Container Upload Unknown User - Rule", "ESCU - Circle CI Disable Security Job - Rule", "ESCU - Circle CI Disable Security Step - Rule", "ESCU - GitHub Actions Disable Security Workflow - Rule", "ESCU - Github Commit Changes In Master - Rule", "ESCU - Github Commit In Develop - Rule", "ESCU - GitHub Dependabot Alert - Rule", "ESCU - GitHub Pull Request from Unknown User - Rule", "ESCU - Gsuite Drive Share In External Email - Rule", "ESCU - GSuite Email Suspicious Attachment - Rule", "ESCU - Gsuite Email Suspicious Subject With Attachment - Rule", "ESCU - Gsuite Email With Known Abuse Web Service Link - Rule", "ESCU - Gsuite Outbound Email With Attachment To External Domain - Rule", "ESCU - Gsuite Suspicious Shared File Name - Rule", "ESCU - Kubernetes Nginx Ingress LFI - Rule", "ESCU - Kubernetes Nginx Ingress RFI - Rule", "ESCU - Kubernetes Scanner Image Pulling - Rule", "ESCU - Risk Rule for Dev Sec Ops by Repository - Rule", "ESCU - Correlation by Repository and Risk - Rule", "ESCU - Correlation by User and Risk - Rule"]
|
||||
description = This story is focused around detecting attacks on a DevSecOps lifeccycle which consists of the phases plan, code, build, test, release, deploy, operate and monitor.
|
||||
narrative = DevSecOps is a collaborative framework, which thinks about application and infrastructure security from the start. This means that security tools are part of the continuous integration and continuous deployment pipeline. In this analytics story, we focused on detections around the tools used in this framework such as GitHub as a version control system, GDrive for the documentation, CircleCI as the CI/CD pipeline, Kubernetes as the container execution engine and multiple security tools such as Semgrep and Kube-Hunter.
|
||||
|
||||
@@ -16299,7 +16493,7 @@ version = 1
|
||||
references = ["https://www.fireeye.com/blog/threat-research/2019/04/spear-phishing-campaign-targets-ukraine-government.html"]
|
||||
maintainers = [{"company": "Splunk", "email": "-", "name": "Splunk Research Team"}]
|
||||
spec_version = 3
|
||||
searches = ["ESCU - Gdrive suspicious file sharing - Rule", "ESCU - Gsuite suspicious calendar invite - Rule", "ESCU - Detect Outlook exe writing a zip file - Rule", "ESCU - Detect RTLO In File Name - Rule", "ESCU - Detect RTLO In Process - Rule", "ESCU - Excel Spawning PowerShell - Rule", "ESCU - Excel Spawning Windows Script Host - Rule", "ESCU - MSHTML Module Load in Office Product - Rule", "ESCU - Office Application Spawn rundll32 process - Rule", "ESCU - Office Document Creating Schedule Task - Rule", "ESCU - Office Document Executing Macro Code - Rule", "ESCU - Office Document Spawned Child Process To Download - Rule", "ESCU - Office Product Spawning BITSAdmin - Rule", "ESCU - Office Product Spawning CertUtil - Rule", "ESCU - Office Product Spawning MSHTA - Rule", "ESCU - Office Product Spawning Rundll32 with no DLL - Rule", "ESCU - Office Product Spawning Windows Script Host - Rule", "ESCU - Office Product Spawning Wmic - Rule", "ESCU - Office Product Writing cab or inf - Rule", "ESCU - Office Spawning Control - Rule", "ESCU - Process Creating LNK file in Suspicious Location - Rule", "ESCU - Windows ISO LNK File Creation - Rule", "ESCU - Windows Office Product Spawning MSDT - Rule", "ESCU - Windows Phishing PDF File Executes URL Link - Rule", "ESCU - Windows Spearphishing Attachment Connect To None MS Office Domain - Rule", "ESCU - Windows Spearphishing Attachment Onenote Spawn Mshta - Rule", "ESCU - Winword Spawning Cmd - Rule", "ESCU - Winword Spawning PowerShell - Rule", "ESCU - Winword Spawning Windows Script Host - Rule"]
|
||||
searches = ["ESCU - Gdrive suspicious file sharing - Rule", "ESCU - Gsuite suspicious calendar invite - Rule", "ESCU - Detect Outlook exe writing a zip file - Rule", "ESCU - Detect RTLO In File Name - Rule", "ESCU - Detect RTLO In Process - Rule", "ESCU - Excel Spawning PowerShell - Rule", "ESCU - Excel Spawning Windows Script Host - Rule", "ESCU - MSHTML Module Load in Office Product - Rule", "ESCU - Office Application Spawn rundll32 process - Rule", "ESCU - Office Document Creating Schedule Task - Rule", "ESCU - Office Document Executing Macro Code - Rule", "ESCU - Office Document Spawned Child Process To Download - Rule", "ESCU - Office Product Spawning BITSAdmin - Rule", "ESCU - Office Product Spawning CertUtil - Rule", "ESCU - Office Product Spawning MSHTA - Rule", "ESCU - Office Product Spawning Rundll32 with no DLL - Rule", "ESCU - Office Product Spawning Windows Script Host - Rule", "ESCU - Office Product Spawning Wmic - Rule", "ESCU - Office Product Writing cab or inf - Rule", "ESCU - Office Spawning Control - Rule", "ESCU - Process Creating LNK file in Suspicious Location - Rule", "ESCU - Windows ConHost with Headless Argument - Rule", "ESCU - Windows ISO LNK File Creation - Rule", "ESCU - Windows Office Product Spawning MSDT - Rule", "ESCU - Windows Phishing PDF File Executes URL Link - Rule", "ESCU - Windows Spearphishing Attachment Connect To None MS Office Domain - Rule", "ESCU - Windows Spearphishing Attachment Onenote Spawn Mshta - Rule", "ESCU - Winword Spawning Cmd - Rule", "ESCU - Winword Spawning PowerShell - Rule", "ESCU - Winword Spawning Windows Script Host - Rule"]
|
||||
description = Detect signs of malicious payloads that may indicate that your environment has been breached via a phishing attack.
|
||||
narrative = Despite its simplicity, phishing remains the most pervasive and dangerous cyberthreat. In fact, research shows that as many as [91% of all successful attacks](https://digitalguardian.com/blog/91-percent-cyber-attacks-start-phishing-email-heres-how-protect-against-phishing) are initiated via a phishing email. \
|
||||
As most people know, these emails use fraudulent domains, [email scraping](https://www.cyberscoop.com/emotet-trojan-phishing-scraping-templates-cofense-geodo/), familiar contact names inserted as senders, and other tactics to lure targets into clicking a malicious link, opening an attachment with a [nefarious payload](https://www.cyberscoop.com/emotet-trojan-phishing-scraping-templates-cofense-geodo/), or entering sensitive personal information that perpetrators may intercept. This attack technique requires a relatively low level of skill and allows adversaries to easily cast a wide net. Worse, because its success relies on the gullibility of humans, it's impossible to completely "automate" it out of your environment. However, you can use ES and ESCU to detect and investigate potentially malicious payloads injected into your environment subsequent to a phishing attack. \
|
||||
@@ -16312,12 +16506,12 @@ This Analytic Story focuses on detecting signs that a malicious payload has been
|
||||
|
||||
[analytic_story://Splunk Vulnerabilities]
|
||||
category = Best Practices
|
||||
last_updated = 2022-03-28
|
||||
last_updated = 2023-11-16
|
||||
version = 1
|
||||
references = ["https://www.splunk.com/en_us/product-security/announcements.html"]
|
||||
maintainers = [{"company": "Splunk", "email": "-", "name": "Lou Stella"}]
|
||||
spec_version = 3
|
||||
searches = ["ESCU - Detect Risky SPL using Pretrained ML Model - Rule", "ESCU - Path traversal SPL injection - Rule", "ESCU - Splunk Absolute Path Traversal Using runshellscript - Rule", "ESCU - Splunk Account Discovery Drilldown Dashboard Disclosure - Rule", "ESCU - Splunk Code Injection via custom dashboard leading to RCE - Rule", "ESCU - Splunk Command and Scripting Interpreter Delete Usage - Rule", "ESCU - Splunk Command and Scripting Interpreter Risky Commands - Rule", "ESCU - Splunk Command and Scripting Interpreter Risky SPL MLTK - Rule", "ESCU - Splunk csrf in the ssg kvstore client endpoint - Rule", "ESCU - Splunk Data exfiltration from Analytics Workspace using sid query - Rule", "ESCU - Splunk Digital Certificates Infrastructure Version - Rule", "ESCU - Splunk Digital Certificates Lack of Encryption - Rule", "ESCU - Splunk DoS Using Malformed SAML Request - Rule", "ESCU - Splunk DOS Via Dump SPL Command - Rule", "ESCU - Splunk DoS via Malformed S2S Request - Rule", "ESCU - Splunk DOS via printf search function - Rule", "ESCU - Splunk Edit User Privilege Escalation - Rule", "ESCU - Splunk Endpoint Denial of Service DoS Zip Bomb - Rule", "ESCU - Splunk HTTP Response Splitting Via Rest SPL Command - Rule", "ESCU - Splunk Improperly Formatted Parameter Crashes splunkd - Rule", "ESCU - Splunk list all nonstandard admin accounts - Rule", "ESCU - Splunk Low Privilege User Can View Hashed Splunk Password - Rule", "ESCU - Splunk Path Traversal In Splunk App For Lookup File Edit - Rule", "ESCU - Persistent XSS in RapidDiag through User Interface Views - Rule", "ESCU - Splunk Persistent XSS Via URL Validation Bypass W Dashboard - Rule", "ESCU - Splunk Process Injection Forwarder Bundle Downloads - Rule", "ESCU - Splunk Protocol Impersonation Weak Encryption Configuration - Rule", "ESCU - Splunk protocol impersonation weak encryption selfsigned - Rule", "ESCU - Splunk protocol impersonation weak encryption simplerequest - Rule", "ESCU - Splunk RBAC Bypass On Indexing Preview REST Endpoint - Rule", "ESCU - Splunk RCE via Serialized Session Payload - Rule", "ESCU - Splunk RCE via Splunk Secure Gateway Splunk Mobile alerts feature - Rule", "ESCU - Splunk Reflected XSS in the templates lists radio - Rule", "ESCU - Splunk Reflected XSS on App Search Table Endpoint - Rule", "ESCU - Splunk risky Command Abuse disclosed february 2023 - Rule", "ESCU - Splunk Stored XSS via Data Model objectName field - Rule", "ESCU - Splunk Unauthenticated Log Injection Web Service Log - Rule", "ESCU - Splunk unnecessary file extensions allowed by lookup table uploads - Rule", "ESCU - Splunk User Enumeration Attempt - Rule", "ESCU - Splunk XSS in Monitoring Console - Rule", "ESCU - Splunk XSS in Save table dialog header in search page - Rule", "ESCU - Splunk XSS via View - Rule", "ESCU - Open Redirect in Splunk Web - Rule", "ESCU - Splunk Enterprise Information Disclosure - Rule", "ESCU - Splunk Identified SSL TLS Certificates - Rule"]
|
||||
searches = ["ESCU - Detect Risky SPL using Pretrained ML Model - Rule", "ESCU - Path traversal SPL injection - Rule", "ESCU - Splunk Absolute Path Traversal Using runshellscript - Rule", "ESCU - Splunk Account Discovery Drilldown Dashboard Disclosure - Rule", "ESCU - Splunk App for Lookup File Editing RCE via User XSLT - Rule", "ESCU - Splunk Code Injection via custom dashboard leading to RCE - Rule", "ESCU - Splunk Command and Scripting Interpreter Delete Usage - Rule", "ESCU - Splunk Command and Scripting Interpreter Risky Commands - Rule", "ESCU - Splunk Command and Scripting Interpreter Risky SPL MLTK - Rule", "ESCU - Splunk csrf in the ssg kvstore client endpoint - Rule", "ESCU - Splunk Data exfiltration from Analytics Workspace using sid query - Rule", "ESCU - Splunk Digital Certificates Infrastructure Version - Rule", "ESCU - Splunk Digital Certificates Lack of Encryption - Rule", "ESCU - Splunk DoS Using Malformed SAML Request - Rule", "ESCU - Splunk DOS Via Dump SPL Command - Rule", "ESCU - Splunk DoS via Malformed S2S Request - Rule", "ESCU - Splunk DOS via printf search function - Rule", "ESCU - Splunk Edit User Privilege Escalation - Rule", "ESCU - Splunk Endpoint Denial of Service DoS Zip Bomb - Rule", "ESCU - Splunk HTTP Response Splitting Via Rest SPL Command - Rule", "ESCU - Splunk Improperly Formatted Parameter Crashes splunkd - Rule", "ESCU - Splunk list all nonstandard admin accounts - Rule", "ESCU - Splunk Low Privilege User Can View Hashed Splunk Password - Rule", "ESCU - Splunk Path Traversal In Splunk App For Lookup File Edit - Rule", "ESCU - Persistent XSS in RapidDiag through User Interface Views - Rule", "ESCU - Splunk Persistent XSS Via URL Validation Bypass W Dashboard - Rule", "ESCU - Splunk Process Injection Forwarder Bundle Downloads - Rule", "ESCU - Splunk Protocol Impersonation Weak Encryption Configuration - Rule", "ESCU - Splunk protocol impersonation weak encryption selfsigned - Rule", "ESCU - Splunk protocol impersonation weak encryption simplerequest - Rule", "ESCU - Splunk RBAC Bypass On Indexing Preview REST Endpoint - Rule", "ESCU - Splunk RCE via Serialized Session Payload - Rule", "ESCU - Splunk RCE via Splunk Secure Gateway Splunk Mobile alerts feature - Rule", "ESCU - Splunk Reflected XSS in the templates lists radio - Rule", "ESCU - Splunk Reflected XSS on App Search Table Endpoint - Rule", "ESCU - Splunk risky Command Abuse disclosed february 2023 - Rule", "ESCU - Splunk Stored XSS via Data Model objectName field - Rule", "ESCU - Splunk Unauthenticated Log Injection Web Service Log - Rule", "ESCU - Splunk unnecessary file extensions allowed by lookup table uploads - Rule", "ESCU - Splunk User Enumeration Attempt - Rule", "ESCU - Splunk XSS in Highlighted JSON Events - Rule", "ESCU - Splunk XSS in Monitoring Console - Rule", "ESCU - Splunk XSS in Save table dialog header in search page - Rule", "ESCU - Splunk XSS via View - Rule", "ESCU - Open Redirect in Splunk Web - Rule", "ESCU - Splunk Enterprise Information Disclosure - Rule", "ESCU - Splunk Identified SSL TLS Certificates - Rule"]
|
||||
description = Keeping your Splunk Enterprise deployment up to date is critical and will help you reduce the risk associated with vulnerabilities in the product.
|
||||
narrative = This analytic story includes detections that focus on attacker behavior targeted at your Splunk environment directly.
|
||||
|
||||
@@ -16624,6 +16818,17 @@ searches = ["ESCU - Executables Or Script Creation In Suspicious Path - Rule", "
|
||||
description = Leverage searches that allow you to detect and investigate unusual activities that might relate to the swift slicer malware including overwriting of files and etc.
|
||||
narrative = Swift Slicer is one of Windows destructive malware found by ESET that was used in a targeted organizarion to wipe critical files like windows drivers and other files to destroy and left the machine inoperable. This malware like Caddy Wiper was deliver through GPO which suggests that the attacker had taken control of the victims active directory environment.
|
||||
|
||||
[analytic_story://SysAid On-Prem Software CVE-2023-47246 Vulnerability]
|
||||
category = Malware
|
||||
last_updated = 2023-11-09
|
||||
version = 1
|
||||
references = ["https://www.sysaid.com/blog/service-desk/on-premise-software-security-vulnerability-notification"]
|
||||
maintainers = [{"company": "Splunk", "email": "-", "name": "Michael Haag"}]
|
||||
spec_version = 3
|
||||
searches = ["ESCU - Any Powershell DownloadString - Rule", "ESCU - Detect Webshell Exploit Behavior - Rule", "ESCU - Java Writing JSP File - Rule", "ESCU - Windows Java Spawning Shells - Rule"]
|
||||
description = A zero-day vulnerability was discovered in SysAid's on-premise software, exploited by the group DEV-0950 (Lace Tempest). The attackers uploaded a WebShell and other payloads, gaining unauthorized access and control. SysAid has released a patch (version 23.3.36) to remediate the vulnerability and urges customers to conduct a comprehensive compromise assessment.
|
||||
narrative = The analytics tagged to this analytic story will aid in capturing initial access and some post-exploitation activities. In addition to the application spawning a shell, consider reviewing STRT's Cobalt Strike and PowerShell script block logging analytic stories. On November 2nd, SysAid's security team identified a potential vulnerability in their on-premise software. The investigation revealed a zero-day vulnerability exploited by the group known as DEV-0950 (Lace Tempest). The attackers uploaded a WebShell and other payloads into the webroot of the SysAid Tomcat web service, thereby gaining unauthorized access and control over the affected system. SysAid promptly initiated their incident response protocol and began proactive communication with their on-premise customers to implement a mitigation solution. SysAid has released a patch (version 23.3.36) to remediate the vulnerability and strongly recommends all customers to conduct a comprehensive compromise assessment of their network.
|
||||
|
||||
[analytic_story://Text4Shell CVE-2022-42889]
|
||||
category = Adversary Tactics
|
||||
last_updated = 2022-10-26
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
#############
|
||||
# Automatically generated by generator.py in splunk/security_content
|
||||
# On Date: 2023-11-01T20:44:08 UTC
|
||||
# On Date: 2023-11-16T22:15:55 UTC
|
||||
# Author: Splunk Threat Research Team - Splunk
|
||||
# Contact: research@splunk.com
|
||||
#############
|
||||
@@ -10,7 +10,7 @@
|
||||
is_configured = false
|
||||
state = enabled
|
||||
state_change_requires_restart = false
|
||||
build = 20231101204321
|
||||
build = 20231116221053
|
||||
|
||||
[triggers]
|
||||
reload.analytic_stories = simple
|
||||
@@ -26,7 +26,7 @@ reload.es_investigations = simple
|
||||
|
||||
[launcher]
|
||||
author = Splunk
|
||||
version = 4.15.0
|
||||
version = 4.16.0
|
||||
description = Explore the Analytic Stories included with ES Content Updates.
|
||||
|
||||
[ui]
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
#############
|
||||
# Automatically generated by generator.py in splunk/security_content
|
||||
# On Date: 2023-11-01T20:44:08 UTC
|
||||
# On Date: 2023-11-16T22:15:55 UTC
|
||||
# Author: Splunk Threat Research Team - Splunk
|
||||
# Contact: research@splunk.com
|
||||
#############
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
#############
|
||||
# Automatically generated by generator.py in splunk/security_content
|
||||
# On Date: 2023-11-01T20:44:08 UTC
|
||||
# On Date: 2023-11-16T22:15:55 UTC
|
||||
# Author: Splunk Threat Research Team - Splunk
|
||||
# Contact: research@splunk.com
|
||||
#############
|
||||
[content-version]
|
||||
version = 4.15.0
|
||||
version = 4.16.0
|
||||
@@ -1,6 +1,6 @@
|
||||
#############
|
||||
# Automatically generated by generator.py in splunk/security_content
|
||||
# On Date: 2023-11-01T20:44:08 UTC
|
||||
# On Date: 2023-11-16T22:15:55 UTC
|
||||
# Author: Splunk Threat Research Team - Splunk
|
||||
# Contact: research@splunk.com
|
||||
#############
|
||||
|
||||
+85
-9
@@ -1,6 +1,6 @@
|
||||
#############
|
||||
# Automatically generated by generator.py in splunk/security_content
|
||||
# On Date: 2023-11-01T20:44:08 UTC
|
||||
# On Date: 2023-11-16T22:15:55 UTC
|
||||
# Author: Splunk Threat Research Team - Splunk
|
||||
# Contact: research@splunk.com
|
||||
#############
|
||||
@@ -117,6 +117,10 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[splunk_app_for_lookup_file_editing_rce_via_user_xslt_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[splunk_code_injection_via_custom_dashboard_leading_to_rce_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -257,6 +261,10 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[splunk_xss_in_highlighted_json_events_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[splunk_xss_in_monitoring_console_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -593,10 +601,18 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_block_user_consent_for_risky_apps_disabled_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_concurrent_sessions_from_different_ips_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_device_code_authentication_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_external_guest_user_invited_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -617,6 +633,18 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_multi_source_failed_authentications_spike_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_multiple_appids_and_useragents_authentication_spike_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_multiple_denied_mfa_requests_for_user_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_multiple_failed_mfa_requests_for_user_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -633,10 +661,18 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_new_mfa_method_registered_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_new_mfa_method_registered_for_user_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_oauth_application_consent_granted_by_user_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_pim_role_assigned_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -681,10 +717,22 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_tenant_wide_admin_consent_granted_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_unusual_number_of_failed_authentications_from_ip_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_user_consent_blocked_for_risky_application_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_user_consent_denied_for_oauth_application_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[azure_ad_user_enabled_and_password_reset_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -753,14 +801,6 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[correlation_by_repository_and_risk_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[correlation_by_user_and_risk_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[detect_aws_console_login_by_new_user_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -961,6 +1001,10 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[risk_rule_for_dev_sec_ops_by_repository_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[abnormally_high_aws_instances_launched_by_user_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -1005,6 +1049,14 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[correlation_by_repository_and_risk_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[correlation_by_user_and_risk_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[detect_activity_related_to_pass_the_hash_attacks_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -3897,6 +3949,10 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[windows_autoit3_execution_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[windows_autostart_execution_lsass_driver_registry_modification_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -3917,6 +3973,10 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[windows_cab_file_on_disk_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[windows_cached_domain_credentials_reg_query_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -3965,6 +4025,10 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[windows_conhost_with_headless_argument_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[windows_create_local_account_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -4533,6 +4597,10 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[windows_msiexec_spawn_windbg_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[windows_msiexec_unregister_dllregisterserver_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -5137,6 +5205,10 @@ description = Update this macro to limit the output results to filter out false
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[windows_windbg_spawning_autoit3_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
|
||||
[windows_winlogon_with_public_network_connection_filter]
|
||||
definition = search *
|
||||
description = Update this macro to limit the output results to filter out false positives.
|
||||
@@ -5610,6 +5682,10 @@ description = customer specific splunk configurations(eg- index, source, sourcet
|
||||
definition = sourcetype=mscs:azure:audit
|
||||
description = customer specific splunk configurations(eg- index, source, sourcetype). Replace the macro definition with configurations for your Splunk Environmnent.
|
||||
|
||||
[azure_monitor_aad]
|
||||
definition = sourcetype=azure:monitor:aad
|
||||
description = customer specific splunk configurations(eg- index, source, sourcetype). Replace the macro definition with configurations for your Splunk Environmnent.
|
||||
|
||||
[azuread]
|
||||
definition = sourcetype=mscs:azure:eventhub
|
||||
description = customer specific splunk configurations(eg- index, source, sourcetype). Replace the macro definition with configurations for your Splunk Environmnent.
|
||||
|
||||
+899
-116
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -1,6 +1,6 @@
|
||||
#############
|
||||
# Automatically generated by generator.py in splunk/security_content
|
||||
# On Date: 2023-11-01T20:44:08 UTC
|
||||
# On Date: 2023-11-16T22:15:55 UTC
|
||||
# Author: Splunk Threat Research Team - Splunk
|
||||
# Contact: research@splunk.com
|
||||
#############
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
#############
|
||||
# Automatically generated by generator.py in splunk/security_content
|
||||
# On Date: 2023-11-01T20:44:08 UTC
|
||||
# On Date: 2023-11-16T22:15:55 UTC
|
||||
# Author: Splunk Threat Research Team - Splunk
|
||||
# Contact: research@splunk.com
|
||||
#############
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version": {"name": "v4.16.0", "published_at": "2023-11-16T22:23:38Z"}}
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Attempted Credential Dump From Registry via Reg exe
|
||||
id: 14038953-e5f2-4daf-acff-5452062baf03
|
||||
version: 3
|
||||
version: 4
|
||||
status: production
|
||||
description: The following analytic identifies the use of `reg.exe` attempting to
|
||||
export Windows registry keys that contain hashed credentials. Adversaries will utilize
|
||||
@@ -12,8 +12,8 @@ search: ' $main = from source | eval timestamp = time | eval metadata_uid = me
|
||||
| eval actor_process = actor.process | eval actor_process_pid = actor_process.pid
|
||||
| eval actor_process_file = actor_process.file | eval actor_process_file_path =
|
||||
actor_process_file.path | eval actor_process_file_name = actor_process_file.name
|
||||
| eval device_hostname = device.hostname | where (process_file_name="reg.exe" OR
|
||||
process_file_name="cmd.exe") AND (match(process_cmd_line, /(?i)HKEY_LOCAL_MACHINE\\System/)=true
|
||||
| eval device_hostname = device.hostname | where (process_file_name IN ("reg.exe",
|
||||
"cmd.exe")) AND (match(process_cmd_line, /(?i)HKEY_LOCAL_MACHINE\\System/)=true
|
||||
OR match(process_cmd_line, /(?i)HKEY_LOCAL_MACHINE\\SAM/)=true OR match(process_cmd_line,
|
||||
/(?i)HKEY_LOCAL_MACHINE\\Security/)=true OR match(process_cmd_line, /(?i)HKLM\\System/)=true
|
||||
OR match(process_cmd_line, /(?i)HKLM\\SAM/)=true OR match(process_cmd_line, /(?i)HKLM\\Security/)=true)
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
name: Delete A Net User
|
||||
id: 8776d79c-d26e-11eb-9a56-acde48001122
|
||||
version: 4
|
||||
version: 5
|
||||
status: production
|
||||
description: This analytic will detect a suspicious net.exe/net1.exe command-line
|
||||
to delete a user on a system. This technique may be use by an administrator for
|
||||
@@ -16,7 +16,7 @@ search: ' $main = from source | eval timestamp = time | eval metadata_uid = me
|
||||
| eval actor_process_file = actor_process.file | eval actor_process_file_path =
|
||||
actor_process_file.path | eval actor_process_file_name = actor_process_file.name
|
||||
| eval device_hostname = device.hostname | where process_cmd_line LIKE "%user%"
|
||||
AND process_cmd_line LIKE "%/delete%" AND (process_file_name="net.exe" OR process_file_name="net1.exe")
|
||||
AND process_cmd_line LIKE "%/delete%" AND (process_file_name IN ("net.exe", "net1.exe"))
|
||||
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
name: Deleting Shadow Copies
|
||||
id: fd40c537-53d0-4c28-9b7e-77cfd28a49c8
|
||||
version: 1
|
||||
version: 2
|
||||
status: validation
|
||||
description: The vssadmin.exe utility is used to interact with the Volume Shadow Copy
|
||||
Service. Wmic is an interface to the Windows Management Instrumentation. This search
|
||||
@@ -12,9 +12,9 @@ search: ' $main = from source | eval timestamp = time | eval metadata_uid = me
|
||||
| eval actor_process = actor.process | eval actor_process_pid = actor_process.pid
|
||||
| eval actor_process_file = actor_process.file | eval actor_process_file_path =
|
||||
actor_process_file.path | eval actor_process_file_name = actor_process_file.name
|
||||
| eval device_hostname = device.hostname | where (process_file_name="vssadmin.exe"
|
||||
OR process_file_name="wmic.exe") AND process_cmd_line LIKE "%delete%" AND process_cmd_line
|
||||
LIKE "%shadow%"
|
||||
| eval device_hostname = device.hostname | where (process_file_name IN ("vssadmin.exe",
|
||||
"wmic.exe")) AND process_cmd_line LIKE "%delete%" AND process_cmd_line LIKE "%shadow%"
|
||||
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
evidence = {"process.pid": process_pid, "process.file.path": process_file_path, "process.file.name": process_file_name, "process.cmd_line": process_cmd_line, "actor.user.name": actor_user_name, "actor.process.pid": actor_process_pid, "actor.process.file.path": actor_process_file_path, "actor.process.file.name": actor_process_file_name, "device.hostname": device_hostname},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Deny Permission using Cacls Utility
|
||||
id: b76eae28-cd25-11eb-9c92-acde48001122
|
||||
version: 3
|
||||
version: 4
|
||||
status: production
|
||||
description: The following analytic identifies the use of `cacls.exe`, `icacls.exe`
|
||||
or `xcacls.exe` placing the deny permission on a file or directory. Adversaries
|
||||
@@ -13,9 +13,8 @@ search: ' $main = from source | eval timestamp = time | eval metadata_uid = me
|
||||
| eval actor_process = actor.process | eval actor_process_pid = actor_process.pid
|
||||
| eval actor_process_file = actor_process.file | eval actor_process_file_path =
|
||||
actor_process_file.path | eval actor_process_file_name = actor_process_file.name
|
||||
| eval device_hostname = device.hostname | where (process_file_name="icacls.exe"
|
||||
OR process_file_name="xcacls.exe" OR process_file_name="cacls.exe") AND match(process_cmd_line,
|
||||
/(?i)deny/)=true
|
||||
| eval device_hostname = device.hostname | where (process_file_name IN ("icacls.exe",
|
||||
"xcacls.exe", "cacls.exe")) AND match(process_cmd_line, /(?i)deny/)=true
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
evidence = {"process.pid": process_pid, "process.file.path": process_file_path, "process.file.name": process_file_name, "process.cmd_line": process_cmd_line, "actor.user.name": actor_user_name, "actor.process.pid": actor_process_pid, "actor.process.file.path": actor_process_file_path, "actor.process.file.name": actor_process_file_name, "device.hostname": device_hostname},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Detect Prohibited Applications Spawning cmd exe
|
||||
id: c10a18cb-fd80-4ffa-a844-25026e0a0c94
|
||||
version: 4
|
||||
version: 5
|
||||
status: production
|
||||
description: The following analytic identifies parent processes, browsers, Windows
|
||||
terminal applications, Office Products and Java spawning cmd.exe. By its very nature,
|
||||
@@ -13,14 +13,12 @@ search: ' $main = from source | eval timestamp = time | eval metadata_uid = me
|
||||
= actor_user.name | eval actor_process = actor.process | eval actor_process_pid
|
||||
= actor_process.pid | eval actor_process_file = actor_process.file | eval actor_process_file_path
|
||||
= actor_process_file.path | eval actor_process_file_name = lower(actor_process_file.name)
|
||||
| eval device_hostname = device.hostname | where ((actor_process_file_name="winword.exe"
|
||||
OR actor_process_file_name="excel.exe" OR actor_process_file_name="outlook.exe"
|
||||
OR actor_process_file_name="acrobat.exe" OR actor_process_file_name="acrord32.exe"
|
||||
OR actor_process_file_name="iexplore.exe" OR actor_process_file_name="opera.exe"
|
||||
OR actor_process_file_name="firefox.exe" OR actor_process_file_name="powershell.exe")
|
||||
OR (actor_process_file_name="java.exe" AND (NOT match(actor_process_file_name, /(?i)patch1-Hotfix1a/)=true))
|
||||
OR (actor_process_file_name="chrome.exe" AND (NOT process_cmd_line="chrome-extension")))
|
||||
AND process_file_name="cmd.exe"
|
||||
| eval device_hostname = device.hostname | where ((actor_process_file_name IN ("winword.exe",
|
||||
"excel.exe", "outlook.exe", "acrobat.exe", "acrord32.exe", "iexplore.exe", "opera.exe",
|
||||
"firefox.exe", "powershell.exe")) OR (actor_process_file_name="java.exe" AND (NOT
|
||||
match(actor_process_file_name, /(?i)patch1-Hotfix1a/)=true)) OR (actor_process_file_name="chrome.exe"
|
||||
AND (NOT process_cmd_line="chrome-extension"))) AND process_file_name="cmd.exe"
|
||||
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
evidence = {"process.pid": process_pid, "process.file.path": process_file_path, "process.file.name": process_file_name, "process.cmd_line": process_cmd_line, "actor.user.name": actor_user_name, "actor.process.pid": actor_process_pid, "actor.process.file.path": actor_process_file_path, "actor.process.file.name": actor_process_file_name, "device.hostname": device_hostname},
|
||||
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
name: Detect Prohibited Applications Spawning cmd exe browsers
|
||||
id: c10a18cb-fd70-4ffa-a844-25026e0a0c94
|
||||
version: 2
|
||||
status: validation
|
||||
description: The following analytic identifies parent processes that are browsers,
|
||||
spawning cmd.exe. By its very nature, many applications spawn cmd.exe natively or
|
||||
built into macros. Much of this will need to be tuned to further enhance the risk.
|
||||
search: ' $main = from source | eval timestamp = time | eval metadata_uid = metadata.uid |
|
||||
eval process_pid = process.pid | eval process_file = process.file | eval process_file_path
|
||||
= process_file.path | eval process_file_name = lower(process_file.name) | eval process_cmd_line
|
||||
= lower(process.cmd_line) | eval actor_user = actor.user | eval actor_user_name
|
||||
= actor_user.name | eval actor_process = actor.process | eval actor_process_pid
|
||||
= actor_process.pid | eval actor_process_file = actor_process.file | eval actor_process_file_path
|
||||
= actor_process_file.path | eval actor_process_file_name = lower(actor_process_file.name)
|
||||
| eval device_hostname = device.hostname | where ((actor_process_file_name IN ("iexplore.exe",
|
||||
"opera.exe", "firefox.exe")) OR (actor_process_file_name="chrome.exe" AND (NOT process_cmd_line="chrome-extension")))
|
||||
AND process_file_name="cmd.exe"
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
evidence = {"process.pid": process_pid, "process.file.path": process_file_path, "process.file.name": process_file_name, "process.cmd_line": process_cmd_line, "actor.user.name": actor_user_name, "actor.process.pid": actor_process_pid, "actor.process.file.path": actor_process_file_path, "actor.process.file.name": actor_process_file_name, "device.hostname": device_hostname},
|
||||
message = "Detect Prohibited Applications Spawning cmd exe browsers has been triggered on " + device_hostname + " by " + actor_user_name + ".",
|
||||
users = [{"name": actor_user_name, "uid": actor_user.uid}],
|
||||
activity_id = 1,
|
||||
cis_csc = [{"control": "CIS 10", "version": 8}],
|
||||
analytic_stories = ["Suspicious Command-Line Executions", "Insider Threat"],
|
||||
class_name = "Detection Report",
|
||||
confidence = 50,
|
||||
confidence_id = 2,
|
||||
duration = 0,
|
||||
impact = 70,
|
||||
impact_id = 4,
|
||||
kill_chain = [{"phase": "Installation", "phase_id": 5}],
|
||||
nist = ["DE.AE"],
|
||||
risk_level = "Low",
|
||||
category_uid = 2,
|
||||
class_uid = 102001,
|
||||
risk_level_id = 1,
|
||||
risk_score = 35,
|
||||
severity_id = 0,
|
||||
rule = {"name": "Detect Prohibited Applications Spawning cmd exe browsers", "uid": "c10a18cb-fd70-4ffa-a844-25026e0a0c94", "type": "Streaming"},
|
||||
metadata = {"customer_uid": metadata.customer_uid, "product": {"name": "Behavior Analytics", "vendor_name": "Splunk"}, "version": "1.0.0-rc.2", "logged_time": time()},
|
||||
type_uid = 10200101,
|
||||
start_time = timestamp,
|
||||
end_time = timestamp
|
||||
| fields metadata, rule, activity_id, analytic_stories, cis_csc, category_uid, class_name, class_uid, confidence, confidence_id, devices, duration, time, evidence, impact, impact_id, kill_chain, message, nist, observables, risk_level, risk_level_id, risk_score, severity_id, type_uid, users, start_time, end_time
|
||||
| into sink; '
|
||||
how_to_implement: In order to successfully implement this analytic, you will need
|
||||
endpoint process data from a EDR product or Sysmon. This search has been modified
|
||||
to process raw sysmon data from attack_range's nxlogs on DSP.
|
||||
known_false_positives: There are circumstances where an application may legitimately
|
||||
execute and interact with the Windows command-line interface.
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1059/
|
||||
tags:
|
||||
required_fields:
|
||||
- process.pid
|
||||
- process.file.path
|
||||
- process.file.name
|
||||
- process.cmd_line
|
||||
- actor.user.name
|
||||
- actor.process.pid
|
||||
- actor.process.file.path
|
||||
- actor.process.file.name
|
||||
- device.hostname
|
||||
risk_score: 35
|
||||
security_domain: endpoint
|
||||
risk_severity: low
|
||||
research_site_url: https://research.splunk.com/endpoint/c10a18cb-fd70-4ffa-a844-25026e0a0c94/
|
||||
event_schema: ocsf
|
||||
mappings:
|
||||
- ocsf: process.pid
|
||||
cim: process_id
|
||||
- ocsf: process.file.path
|
||||
cim: process_path
|
||||
- ocsf: process.file.name
|
||||
cim: process_name
|
||||
- ocsf: process.cmd_line
|
||||
cim: process
|
||||
- ocsf: actor.user.name
|
||||
cim: user
|
||||
- ocsf: actor.process.pid
|
||||
cim: parent_process_id
|
||||
- ocsf: actor.process.file.path
|
||||
cim: parent_process_path
|
||||
- ocsf: actor.process.file.name
|
||||
cim: parent_process_name
|
||||
- ocsf: device.hostname
|
||||
cim: dest
|
||||
annotations:
|
||||
analytic_story:
|
||||
- Suspicious Command-Line Executions
|
||||
- Insider Threat
|
||||
cis20:
|
||||
- CIS 10
|
||||
kill_chain_phases:
|
||||
- Installation
|
||||
mitre_attack_id:
|
||||
- T1059
|
||||
nist:
|
||||
- DE.AE
|
||||
test:
|
||||
name: Detect Prohibited Applications Spawning cmd exe browsers Unit Test
|
||||
tests:
|
||||
- name: Detect Prohibited Applications Spawning cmd exe browsers
|
||||
attack_data:
|
||||
- file_name: windows-security.log
|
||||
data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.003/ssa_validation/browsers/windows-security.log
|
||||
source: WinEventLog:Security
|
||||
runtime: SPL2
|
||||
internalVersion: 2
|
||||
+111
@@ -0,0 +1,111 @@
|
||||
name: Detect Prohibited Applications Spawning cmd exe office
|
||||
id: c10a18cb-fd70-4ffa-a844-25026e0b0c94
|
||||
version: 2
|
||||
status: validation
|
||||
description: The following analytic identifies parent processes that are office/productivity
|
||||
applications, spawning cmd.exe. By its very nature, many applications spawn cmd.exe
|
||||
natively or built into macros. Much of this will need to be tuned to further enhance
|
||||
the risk.
|
||||
search: ' $main = from source | eval timestamp = time | eval metadata_uid = metadata.uid |
|
||||
eval process_pid = process.pid | eval process_file = process.file | eval process_file_path
|
||||
= process_file.path | eval process_file_name = lower(process_file.name) | eval process_cmd_line
|
||||
= process.cmd_line | eval actor_user = actor.user | eval actor_user_name = actor_user.name
|
||||
| eval actor_process = actor.process | eval actor_process_pid = actor_process.pid
|
||||
| eval actor_process_file = actor_process.file | eval actor_process_file_path =
|
||||
actor_process_file.path | eval actor_process_file_name = lower(actor_process_file.name)
|
||||
| eval device_hostname = device.hostname | where (actor_process_file_name IN ("winword.exe",
|
||||
"excel.exe", "outlook.exe", "acrobat.exe", "acrord32.exe")) AND process_file_name="cmd.exe"
|
||||
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
evidence = {"process.pid": process_pid, "process.file.path": process_file_path, "process.file.name": process_file_name, "process.cmd_line": process_cmd_line, "actor.user.name": actor_user_name, "actor.process.pid": actor_process_pid, "actor.process.file.path": actor_process_file_path, "actor.process.file.name": actor_process_file_name, "device.hostname": device_hostname},
|
||||
message = "Detect Prohibited Applications Spawning cmd exe office has been triggered on " + device_hostname + " by " + actor_user_name + ".",
|
||||
users = [{"name": actor_user_name, "uid": actor_user.uid}],
|
||||
activity_id = 1,
|
||||
cis_csc = [{"control": "CIS 10", "version": 8}],
|
||||
analytic_stories = ["Suspicious Command-Line Executions", "Insider Threat"],
|
||||
class_name = "Detection Report",
|
||||
confidence = 50,
|
||||
confidence_id = 2,
|
||||
duration = 0,
|
||||
impact = 70,
|
||||
impact_id = 4,
|
||||
kill_chain = [{"phase": "Installation", "phase_id": 5}],
|
||||
nist = ["DE.AE"],
|
||||
risk_level = "Low",
|
||||
category_uid = 2,
|
||||
class_uid = 102001,
|
||||
risk_level_id = 1,
|
||||
risk_score = 35,
|
||||
severity_id = 0,
|
||||
rule = {"name": "Detect Prohibited Applications Spawning cmd exe office", "uid": "c10a18cb-fd70-4ffa-a844-25026e0b0c94", "type": "Streaming"},
|
||||
metadata = {"customer_uid": metadata.customer_uid, "product": {"name": "Behavior Analytics", "vendor_name": "Splunk"}, "version": "1.0.0-rc.2", "logged_time": time()},
|
||||
type_uid = 10200101,
|
||||
start_time = timestamp,
|
||||
end_time = timestamp
|
||||
| fields metadata, rule, activity_id, analytic_stories, cis_csc, category_uid, class_name, class_uid, confidence, confidence_id, devices, duration, time, evidence, impact, impact_id, kill_chain, message, nist, observables, risk_level, risk_level_id, risk_score, severity_id, type_uid, users, start_time, end_time
|
||||
| into sink; '
|
||||
how_to_implement: In order to successfully implement this analytic, you will need
|
||||
endpoint process data from a EDR product or Sysmon. This search has been modified
|
||||
to process raw sysmon data from attack_range's nxlogs on DSP.
|
||||
known_false_positives: There are circumstances where an application may legitimately
|
||||
execute and interact with the Windows command-line interface.
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1059/
|
||||
tags:
|
||||
required_fields:
|
||||
- process.pid
|
||||
- process.file.path
|
||||
- process.file.name
|
||||
- process.cmd_line
|
||||
- actor.user.name
|
||||
- actor.process.pid
|
||||
- actor.process.file.path
|
||||
- actor.process.file.name
|
||||
- device.hostname
|
||||
risk_score: 35
|
||||
security_domain: endpoint
|
||||
risk_severity: low
|
||||
research_site_url: https://research.splunk.com/endpoint/c10a18cb-fd70-4ffa-a844-25026e0b0c94/
|
||||
event_schema: ocsf
|
||||
mappings:
|
||||
- ocsf: process.pid
|
||||
cim: process_id
|
||||
- ocsf: process.file.path
|
||||
cim: process_path
|
||||
- ocsf: process.file.name
|
||||
cim: process_name
|
||||
- ocsf: process.cmd_line
|
||||
cim: process
|
||||
- ocsf: actor.user.name
|
||||
cim: user
|
||||
- ocsf: actor.process.pid
|
||||
cim: parent_process_id
|
||||
- ocsf: actor.process.file.path
|
||||
cim: parent_process_path
|
||||
- ocsf: actor.process.file.name
|
||||
cim: parent_process_name
|
||||
- ocsf: device.hostname
|
||||
cim: dest
|
||||
annotations:
|
||||
analytic_story:
|
||||
- Suspicious Command-Line Executions
|
||||
- Insider Threat
|
||||
cis20:
|
||||
- CIS 10
|
||||
kill_chain_phases:
|
||||
- Installation
|
||||
mitre_attack_id:
|
||||
- T1059
|
||||
nist:
|
||||
- DE.AE
|
||||
test:
|
||||
name: Detect Prohibited Applications Spawning cmd exe office Unit Test
|
||||
tests:
|
||||
- name: Detect Prohibited Applications Spawning cmd exe office
|
||||
attack_data:
|
||||
- file_name: windows-security.log
|
||||
data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.003/ssa_validation/office/windows-security.log
|
||||
source: WinEventLog:Security
|
||||
runtime: SPL2
|
||||
internalVersion: 2
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
name: Detect Prohibited Applications Spawning cmd exe powershell
|
||||
id: c10a18cb-fd70-4ffa-a844-25126e0b0d94
|
||||
version: 2
|
||||
status: validation
|
||||
description: The following analytic identifies parent processes that are powershell,
|
||||
spawning cmd.exe. By its very nature, many applications spawn cmd.exe natively or
|
||||
built into macros. Much of this will need to be tuned to further enhance the risk.
|
||||
search: ' $main = from source | eval timestamp = time | eval metadata_uid = metadata.uid |
|
||||
eval process_pid = process.pid | eval process_file = process.file | eval process_file_path
|
||||
= process_file.path | eval process_file_name = lower(process_file.name) | eval process_cmd_line
|
||||
= process.cmd_line | eval actor_user = actor.user | eval actor_user_name = actor_user.name
|
||||
| eval actor_process = actor.process | eval actor_process_pid = actor_process.pid
|
||||
| eval actor_process_file = actor_process.file | eval actor_process_file_path =
|
||||
actor_process_file.path | eval actor_process_file_name = lower(actor_process_file.name)
|
||||
| eval device_hostname = device.hostname | where actor_process_file_name="powershell.exe"
|
||||
AND process_file_name="cmd.exe"
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
evidence = {"process.pid": process_pid, "process.file.path": process_file_path, "process.file.name": process_file_name, "process.cmd_line": process_cmd_line, "actor.user.name": actor_user_name, "actor.process.pid": actor_process_pid, "actor.process.file.path": actor_process_file_path, "actor.process.file.name": actor_process_file_name, "device.hostname": device_hostname},
|
||||
message = "Detect Prohibited Applications Spawning cmd exe powershell has been triggered on " + device_hostname + " by " + actor_user_name + ".",
|
||||
users = [{"name": actor_user_name, "uid": actor_user.uid}],
|
||||
activity_id = 1,
|
||||
cis_csc = [{"control": "CIS 10", "version": 8}],
|
||||
analytic_stories = ["Suspicious Command-Line Executions", "Insider Threat"],
|
||||
class_name = "Detection Report",
|
||||
confidence = 50,
|
||||
confidence_id = 2,
|
||||
duration = 0,
|
||||
impact = 70,
|
||||
impact_id = 4,
|
||||
kill_chain = [{"phase": "Installation", "phase_id": 5}],
|
||||
nist = ["DE.AE"],
|
||||
risk_level = "Low",
|
||||
category_uid = 2,
|
||||
class_uid = 102001,
|
||||
risk_level_id = 1,
|
||||
risk_score = 35,
|
||||
severity_id = 0,
|
||||
rule = {"name": "Detect Prohibited Applications Spawning cmd exe powershell", "uid": "c10a18cb-fd70-4ffa-a844-25126e0b0d94", "type": "Streaming"},
|
||||
metadata = {"customer_uid": metadata.customer_uid, "product": {"name": "Behavior Analytics", "vendor_name": "Splunk"}, "version": "1.0.0-rc.2", "logged_time": time()},
|
||||
type_uid = 10200101,
|
||||
start_time = timestamp,
|
||||
end_time = timestamp
|
||||
| fields metadata, rule, activity_id, analytic_stories, cis_csc, category_uid, class_name, class_uid, confidence, confidence_id, devices, duration, time, evidence, impact, impact_id, kill_chain, message, nist, observables, risk_level, risk_level_id, risk_score, severity_id, type_uid, users, start_time, end_time
|
||||
| into sink; '
|
||||
how_to_implement: In order to successfully implement this analytic, you will need
|
||||
endpoint process data from a EDR product or Sysmon. This search has been modified
|
||||
to process raw sysmon data from attack_range's nxlogs on DSP.
|
||||
known_false_positives: There are circumstances where an application may legitimately
|
||||
execute and interact with the Windows command-line interface.
|
||||
references:
|
||||
- https://attack.mitre.org/techniques/T1059/
|
||||
tags:
|
||||
required_fields:
|
||||
- process.pid
|
||||
- process.file.path
|
||||
- process.file.name
|
||||
- process.cmd_line
|
||||
- actor.user.name
|
||||
- actor.process.pid
|
||||
- actor.process.file.path
|
||||
- actor.process.file.name
|
||||
- device.hostname
|
||||
risk_score: 35
|
||||
security_domain: endpoint
|
||||
risk_severity: low
|
||||
research_site_url: https://research.splunk.com/endpoint/c10a18cb-fd70-4ffa-a844-25126e0b0d94/
|
||||
event_schema: ocsf
|
||||
mappings:
|
||||
- ocsf: process.pid
|
||||
cim: process_id
|
||||
- ocsf: process.file.path
|
||||
cim: process_path
|
||||
- ocsf: process.file.name
|
||||
cim: process_name
|
||||
- ocsf: process.cmd_line
|
||||
cim: process
|
||||
- ocsf: actor.user.name
|
||||
cim: user
|
||||
- ocsf: actor.process.pid
|
||||
cim: parent_process_id
|
||||
- ocsf: actor.process.file.path
|
||||
cim: parent_process_path
|
||||
- ocsf: actor.process.file.name
|
||||
cim: parent_process_name
|
||||
- ocsf: device.hostname
|
||||
cim: dest
|
||||
annotations:
|
||||
analytic_story:
|
||||
- Suspicious Command-Line Executions
|
||||
- Insider Threat
|
||||
cis20:
|
||||
- CIS 10
|
||||
kill_chain_phases:
|
||||
- Installation
|
||||
mitre_attack_id:
|
||||
- T1059
|
||||
nist:
|
||||
- DE.AE
|
||||
test:
|
||||
name: Detect Prohibited Applications Spawning cmd exe powershell Unit Test
|
||||
tests:
|
||||
- name: Detect Prohibited Applications Spawning cmd exe powershell
|
||||
attack_data:
|
||||
- file_name: windows-security.log
|
||||
data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.003/powershell_spawn_cmd/windows-security.log
|
||||
source: WinEventLog:Security
|
||||
runtime: SPL2
|
||||
internalVersion: 2
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
name: Disable Net User Account
|
||||
id: ba858b08-d26c-11eb-af9b-acde48001122
|
||||
version: 3
|
||||
version: 4
|
||||
status: production
|
||||
description: This analytic will identify a suspicious command-line that disables a
|
||||
user account using the native `net.exe` or `net1.exe` utility to Windows. This technique
|
||||
@@ -14,7 +14,7 @@ search: ' $main = from source | eval timestamp = time | eval metadata_uid = me
|
||||
| eval actor_process_file = actor_process.file | eval actor_process_file_path =
|
||||
actor_process_file.path | eval actor_process_file_name = actor_process_file.name
|
||||
| eval device_hostname = device.hostname | where process_cmd_line LIKE "%user%"
|
||||
AND process_cmd_line LIKE "%/active:no%" AND (process_file_name="net.exe" OR process_file_name="net1.exe")
|
||||
AND process_cmd_line LIKE "%/active:no%" AND (process_file_name IN ("net.exe", "net1.exe"))
|
||||
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Grant Permission Using Cacls Utility
|
||||
id: c6da561a-cd29-11eb-ae65-acde48001122
|
||||
version: 3
|
||||
version: 4
|
||||
status: production
|
||||
description: The following analytic identifies the use of `cacls.exe`, `icacls.exe`
|
||||
or `xcacls.exe` placing the grant permission on a file or directory. Adversaries
|
||||
@@ -13,9 +13,8 @@ search: ' $main = from source | eval timestamp = time | eval metadata_uid = me
|
||||
| eval actor_process = actor.process | eval actor_process_pid = actor_process.pid
|
||||
| eval actor_process_file = actor_process.file | eval actor_process_file_path =
|
||||
actor_process_file.path | eval actor_process_file_name = actor_process_file.name
|
||||
| eval device_hostname = device.hostname | where (process_file_name="icacls.exe"
|
||||
OR process_file_name="xcacls.exe" OR process_file_name="cacls.exe") AND match(process_cmd_line,
|
||||
/(?i)grant/)=true
|
||||
| eval device_hostname = device.hostname | where (process_file_name IN ("icacls.exe",
|
||||
"xcacls.exe", "cacls.exe")) AND match(process_cmd_line, /(?i)grant/)=true
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
evidence = {"process.pid": process_pid, "process.file.path": process_file_path, "process.file.name": process_file_name, "process.cmd_line": process_cmd_line, "actor.user.name": actor_user_name, "actor.process.pid": actor_process_pid, "actor.process.file.path": actor_process_file_path, "actor.process.file.name": actor_process_file_name, "device.hostname": device_hostname},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Modify ACLs Permission Of Files Or Folders
|
||||
id: 9ae9a48a-cdbe-11eb-875a-acde48001122
|
||||
version: 3
|
||||
version: 4
|
||||
status: production
|
||||
description: This analytic identifies suspicious modification of ACL permission to
|
||||
a files or folder to make it available to everyone or to a specific user. This technique
|
||||
@@ -17,8 +17,7 @@ search: ' $main = from source | eval timestamp = time | eval metadata_uid = me
|
||||
actor_process_file.path | eval actor_process_file_name = actor_process_file.name
|
||||
| eval device_hostname = device.hostname | where (match(process_cmd_line, /(?i)S-1-1-0:/)=true
|
||||
OR match(process_cmd_line, /(?i)SYSTEM:/)=true OR match(process_cmd_line, /(?i)everyone:/)=true)
|
||||
AND (process_file_name="icacls.exe" OR process_file_name="xcacls.exe" OR process_file_name="cacls.exe")
|
||||
|
||||
AND (process_file_name IN ("icacls.exe", "xcacls.exe", "cacls.exe"))
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
evidence = {"process.pid": process_pid, "process.file.path": process_file_path, "process.file.name": process_file_name, "process.cmd_line": process_cmd_line, "actor.user.name": actor_user_name, "actor.process.pid": actor_process_pid, "actor.process.file.path": actor_process_file_path, "actor.process.file.name": actor_process_file_name, "device.hostname": device_hostname},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Office Product Spawning Windows Script Host
|
||||
id: 3ea3851a-8736-41a0-bc09-7e4485b48fa6
|
||||
version: 1
|
||||
version: 2
|
||||
status: production
|
||||
description: The following analytic will identify a Windows Office Product spawning
|
||||
WScript.exe or CScript.exe. Tuning may be required based on legitimate application
|
||||
@@ -12,11 +12,11 @@ search: ' $main = from source | eval timestamp = time | eval metadata_uid = me
|
||||
| eval actor_process = actor.process | eval actor_process_pid = actor_process.pid
|
||||
| eval actor_process_file = actor_process.file | eval actor_process_file_path =
|
||||
actor_process_file.path | eval actor_process_file_name = actor_process_file.name
|
||||
| eval device_hostname = device.hostname | where (process_file_name="cscript.exe"
|
||||
OR process_file_name="wscript.exe") AND (match(actor_process_file_name, /(?i)visio.exe/)=true
|
||||
OR match(actor_process_file_name, /(?i)mspub.exe/)=true OR match(actor_process_file_name,
|
||||
/(?i)powerpnt.exe/)=true OR match(actor_process_file_name, /(?i)excel.exe/)=true
|
||||
OR match(actor_process_file_name, /(?i)winword.exe/)=true)
|
||||
| eval device_hostname = device.hostname | where (process_file_name IN ("cscript.exe",
|
||||
"wscript.exe")) AND (match(actor_process_file_name, /(?i)visio.exe/)=true OR match(actor_process_file_name,
|
||||
/(?i)mspub.exe/)=true OR match(actor_process_file_name, /(?i)powerpnt.exe/)=true
|
||||
OR match(actor_process_file_name, /(?i)excel.exe/)=true OR match(actor_process_file_name,
|
||||
/(?i)winword.exe/)=true)
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
evidence = {"process.pid": process_pid, "process.file.path": process_file_path, "process.file.name": process_file_name, "process.cmd_line": process_cmd_line, "actor.user.name": actor_user_name, "actor.process.pid": actor_process_pid, "actor.process.file.path": actor_process_file_path, "actor.process.file.name": actor_process_file_name, "device.hostname": device_hostname},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Services lolbas Execution Process Spawn
|
||||
id: 0d85fde3-0de9-4eec-b386-6a8ba70f3935
|
||||
version: 1
|
||||
version: 2
|
||||
status: validation
|
||||
description: The following analytic identifies services.exe spawning a LOLBAS execution
|
||||
process. When adversaries execute code on remote endpoints abusing the Service Control
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: System Process Running from Unexpected Location
|
||||
id: 28179107-099a-464a-94d3-08301e6c055f
|
||||
version: 4
|
||||
version: 5
|
||||
status: production
|
||||
description: An attacker tries might try to use different version of a system command
|
||||
without overriding original, or they might try to avoid some detection running the
|
||||
@@ -10,7 +10,7 @@ description: An attacker tries might try to use different version of a system co
|
||||
and the original detection https://github.com/splunk/security_content/blob/develop/detections/system_processes_run_from_unexpected_locations.yml
|
||||
search: ' $main = from source | eval timestamp = time | eval metadata_uid = metadata.uid |
|
||||
eval process_pid = process.pid | eval process_file = process.file | eval process_file_path
|
||||
= process_file.path | eval process_file_name = process_file.name | eval process_cmd_line
|
||||
= process_file.path | eval process_file_name = lower(process_file.name) | eval process_cmd_line
|
||||
= process.cmd_line | eval actor_user = actor.user | eval actor_user_name = actor_user.name
|
||||
| eval actor_process = actor.process | eval actor_process_pid = actor_process.pid
|
||||
| eval actor_process_file = actor_process.file | eval actor_process_file_path =
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: Windows LOLBin Binary in Non Standard Path
|
||||
id: 25689101-012a-324a-94d3-08301e6c065a
|
||||
version: 4
|
||||
version: 5
|
||||
status: production
|
||||
description: The following analytic identifies native living off the land binaries
|
||||
within the Windows operating system that may be abused by adversaries by moving
|
||||
|
||||
+5
-7
@@ -1,6 +1,6 @@
|
||||
name: Windows MSHTA Child Process
|
||||
id: f63f7e9c-9526-11ec-9fc7-acde48001122
|
||||
version: 2
|
||||
version: 3
|
||||
status: production
|
||||
description: The following analytic identifies child processes spawning from "mshta.exe".
|
||||
The search will return the first time and last time these command-line arguments
|
||||
@@ -13,12 +13,10 @@ search: ' $main = from source | eval timestamp = time | eval metadata_uid = me
|
||||
| eval actor_process = actor.process | eval actor_process_pid = actor_process.pid
|
||||
| eval actor_process_file = actor_process.file | eval actor_process_file_path =
|
||||
actor_process_file.path | eval actor_process_file_name = actor_process_file.name
|
||||
| eval device_hostname = device.hostname | where (process_file_name="wscript.exe"
|
||||
OR process_file_name="cscript.exe" OR process_file_name="searchprotocolhost.exe"
|
||||
OR process_file_name="microsoft.workflow.compiler.exe" OR process_file_name="msbuild.exe"
|
||||
OR process_file_name="colorcpl.exe" OR process_file_name="scrcons.exe" OR process_file_name="cmd.exe"
|
||||
OR process_file_name="powershell.exe") AND actor_process_file_name LIKE "%mshta.exe"
|
||||
|
||||
| eval device_hostname = device.hostname | where (process_file_name IN ("wscript.exe",
|
||||
"cscript.exe", "searchprotocolhost.exe", "microsoft.workflow.compiler.exe", "msbuild.exe",
|
||||
"colorcpl.exe", "scrcons.exe", "cmd.exe", "powershell.exe")) AND actor_process_file_name
|
||||
LIKE "%mshta.exe"
|
||||
| eval devices = [{"hostname": device_hostname, "type_id": 0, "uuid": device.uuid}],
|
||||
time = timestamp,
|
||||
evidence = {"process.pid": process_pid, "process.file.path": process_file_path, "process.file.name": process_file_name, "process.cmd_line": process_cmd_line, "actor.user.name": actor_user_name, "actor.process.pid": actor_process_pid, "actor.process.file.path": actor_process_file_path, "actor.process.file.name": actor_process_file_name, "device.hostname": device_hostname},
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user