From 2c6248de856f988de5d4eaba58d9c22e7327d54e Mon Sep 17 00:00:00 2001 From: Bhavin Patel Date: Mon, 4 Aug 2025 13:56:35 -0500 Subject: [PATCH 1/7] updating based on request from Ryan Long --- ..._appdynamics_secure_application_alert.yml} | 2 +- ..._appdynamics_secure_application_alerts.yml | 88 +++++++++++++++++++ .../cisco_secure_application_alerts.yml | 5 +- removed/deprecation_mapping.YML | 5 ++ 4 files changed, 96 insertions(+), 4 deletions(-) rename data_sources/{cisco_secure_application_appdynamics_alerts.yml => splunk_appdynamics_secure_application_alert.yml} (99%) create mode 100644 detections/application/splunk_appdynamics_secure_application_alerts.yml rename detections/{application => deprecated}/cisco_secure_application_alerts.yml (98%) diff --git a/data_sources/cisco_secure_application_appdynamics_alerts.yml b/data_sources/splunk_appdynamics_secure_application_alert.yml similarity index 99% rename from data_sources/cisco_secure_application_appdynamics_alerts.yml rename to data_sources/splunk_appdynamics_secure_application_alert.yml index b25486168d..fa20121066 100644 --- a/data_sources/cisco_secure_application_appdynamics_alerts.yml +++ b/data_sources/splunk_appdynamics_secure_application_alert.yml @@ -1,4 +1,4 @@ -name: Cisco Secure Application AppDynamics Alerts +name: Splunk AppDynamics Secure Application Alert id: 5c963eb0-010e-4386-875f-5134879f14a7 version: 1 date: '2025-02-04' diff --git a/detections/application/splunk_appdynamics_secure_application_alerts.yml b/detections/application/splunk_appdynamics_secure_application_alerts.yml new file mode 100644 index 0000000000..562dc2953e --- /dev/null +++ b/detections/application/splunk_appdynamics_secure_application_alerts.yml @@ -0,0 +1,88 @@ +name: Splunk AppDynamics Secure Application Alerts +id: d1a45d84-8dd1-4b31-8854-62b0b1d5da0b +version: 1 +date: '2025-05-02' +author: Ryan Long, Bhavin Patel, Splunk +status: deprecated +type: Anomaly +description: | + The following analytic is to leverage alerts from Splunk AppDynamics SecureApp, which identifies and monitors exploit attempts targeting business applications. The primary attack observed involves exploiting vulnerabilities in web applications, including injection attacks (SQL, API abuse), deserialization vulnerabilities, remote code execution attempts, LOG4J and zero day attacks. These attacks are typically aimed at gaining unauthorized access, exfiltrating sensitive data, or disrupting application functionality. + + Splunk AppDynamics SecureApp provides real-time detection of these threats by analyzing application-layer events and correlating attack behavior with known vulnerability signatures. This detection methodology helps the Security Operations Center (SOC) by: + + * Identifying active exploitation attempts in real-time, allowing for quicker incident response. + * Categorizing attack severity to prioritize remediation efforts based on risk level. + * Providing visibility into attacker tactics, including source IP, attack techniques, and affected applications. + * Generating risk-based scoring and contextual alerts to enhance decision-making within SOC workflows. + * Helping analysts determine whether an attack was merely an attempt or if it successfully exploited a vulnerability. + + By leveraging this information, SOC teams can proactively mitigate security threats, patch vulnerable applications, and enforce security controls to prevent further exploitation. +data_source: +- Splunk AppDynamics Secure Application Alert +search: |- + `appdynamics_security` blocked=false + | rename attackEvents{}.attackOutcome AS attackOutcome, "attackEvents{}.vulnerabilityInfo.*" AS * + | fields - tag::eventtype, eventtype, host, id, index, linecount, punct, source, sourcetype, splunk_server, tag, SourceType, app clientAddressType, application, tier, "attackEvents{}.*" + | eval socketOut=mvjoin(socketOut," AND ") + | eval risk_score=kennaScore + | fillnull risk_score value="0" + | eval risk_object=app_name + | stats values(*) as * by attackId + | eval severity=case( + risk_score>=100 OR signature="LOG4J", "critical", + risk_score>50 AND risk_score<75, "high", + risk_score=0 AND attackOutcome="EXPLOITED", "high", + risk_score<=50 AND attackOutcome!="OBSERVED", "medium", + risk_score=0 AND attackOutcome="ATTEMPTED", "medium", + risk_score=0, "low", + risk_score=0 AND attackOutcome="OBSERVED", "low" + ) + | eval risk_message=case( + (signature="API" OR signature="LOG4J" OR signature="SSRF"), "An attempt to exploit a ".signature." vulnerability was made from a ".src_category." IP address ".src_ip.". The server ".dest_nt_host." hosting application ".app_name." was accessed, and data may have been exfiltrated to ".socketOut.".", + (signature="MALIP" OR signature="SQL"), "A vulnerability is being ".attackOutcome." from a ".src_category." IP address ".src_ip.". The server ".dest_nt_host." hosting application ".app_name." was accessed.", + (signature="DESEREAL"), "The application ".app_name." deserializes untrusted data without sufficiently verifying that the resulting data will be valid. Data which is untrusted cannot be trusted to be well-formed. Malformed data or unexpected data could be used to abuse application logic, deny service, or execute arbitrary code, when deserialized." + ) + | `splunk_appdynamics_secure_application_alerts_filter` +how_to_implement: In order to properly run this search, you need to ingest alerts data from AppD SecureApp, specifically ingesting data via HEC. You will also need to ensure that the data is going to sourcetype - `appdynamics_security`. You will need to install the Splunk Add-on for AppDynamics. +known_false_positives: No known false positives for this detection. If the alerts are noisy, consider tuning this detection by using the _filter macro in this search, and/or updating the tool this alert originates from. +references: +- https://docs.appdynamics.com/appd/24.x/latest/en/application-security-monitoring/integrate-cisco-secure-application-with-splunk +drilldown_searches: +- name: View the detection results for - "$app_name$" + search: '%original_detection_search% | search app_name = "$app_name$"' + earliest_offset: $info_min_time$ + latest_offset: $info_max_time$ +- name: View risk events for the last 7 days for - "$app_name$" + search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$app_name$") starthoursago=168 | stats count min(_time) + as firstTime max(_time) as lastTime values(search_name) as "Search Name" values(risk_message) + as "Risk Message" values(analyticstories) as "Analytic Stories" values(annotations._all) + as "Annotations" values(annotations.mitre_attack.mitre_tactic) as "ATT&CK Tactics" + by normalized_risk_object | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`' + earliest_offset: $info_min_time$ + latest_offset: $info_max_time$ +rba: + message: $risk_message$ + risk_objects: + - field: app_name + type: other + score: 10 + threat_objects: + - field: src_ip + type: ip_address +tags: + analytic_story: + - Critical Alerts + asset_type: Web Application + mitre_attack_id: [] + product: + - Splunk Enterprise + - Splunk Enterprise Security + - Splunk Cloud + security_domain: threat + manual_test: We are dynamically creating the risk_score field based on the severity of the alert in the SPL and that supersedes the risk score set in the detection. Setting these to manual test since otherwise we fail integration testing. The detection is also failing on unit-testing as some of the fields set in the observables are empty. +tests: +- name: True Positive Test + attack_data: + - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/suspicious_behaviour/alerts/cisco_secure_app_alerts.log + sourcetype: appdynamics_security + source: AppDynamics Security diff --git a/detections/application/cisco_secure_application_alerts.yml b/detections/deprecated/cisco_secure_application_alerts.yml similarity index 98% rename from detections/application/cisco_secure_application_alerts.yml rename to detections/deprecated/cisco_secure_application_alerts.yml index 6e69995755..8992338bbf 100644 --- a/detections/application/cisco_secure_application_alerts.yml +++ b/detections/deprecated/cisco_secure_application_alerts.yml @@ -3,7 +3,7 @@ id: 9982bff4-fc5d-49a3-ab9e-2dbbab2a711b version: 2 date: '2025-05-02' author: Ryan Long, Bhavin Patel, Splunk -status: production +status: deprecated type: Anomaly description: | The following analytic is to leverage alerts from Cisco SecureApp, which identifies and monitors exploit attempts targeting business applications. The primary attack observed involves exploiting vulnerabilities in web applications, including injection attacks (SQL, API abuse), deserialization vulnerabilities, remote code execution attempts, LOG4J and zero day attacks. These attacks are typically aimed at gaining unauthorized access, exfiltrating sensitive data, or disrupting application functionality. @@ -17,8 +17,7 @@ description: | * Helping analysts determine whether an attack was merely an attempt or if it successfully exploited a vulnerability. By leveraging this information, SOC teams can proactively mitigate security threats, patch vulnerable applications, and enforce security controls to prevent further exploitation. -data_source: -- Cisco Secure Application AppDynamics Alerts +data_source: [] search: |- `appdynamics_security` blocked=false | rename attackEvents{}.attackOutcome AS attackOutcome, "attackEvents{}.vulnerabilityInfo.*" AS * diff --git a/removed/deprecation_mapping.YML b/removed/deprecation_mapping.YML index 69417fd8e3..78a2d6adaf 100644 --- a/removed/deprecation_mapping.YML +++ b/removed/deprecation_mapping.YML @@ -1,4 +1,9 @@ detections: + - content: Cisco Secure Application Alerts + removed_in_version: 5.14.0 + reason: Detection has been deprecated since it has been replaced with a better named detection to reflect the correct product + replacement_content: + - Splunk AppDynamics Secure Application Alerts - content: Windows InstallUtil Uninstall Option with Network removed_in_version: 5.12.0 reason: Detection has been deprecated as its scope is already covered by "Windows InstallUtil Remote Network Connection". From c6c2175f2ab8c63a3344760c72d23a32a982a094 Mon Sep 17 00:00:00 2001 From: Bhavin Patel Date: Mon, 4 Aug 2025 14:00:19 -0500 Subject: [PATCH 2/7] move to prod --- .../splunk_appdynamics_secure_application_alerts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/detections/application/splunk_appdynamics_secure_application_alerts.yml b/detections/application/splunk_appdynamics_secure_application_alerts.yml index 562dc2953e..4680bbab98 100644 --- a/detections/application/splunk_appdynamics_secure_application_alerts.yml +++ b/detections/application/splunk_appdynamics_secure_application_alerts.yml @@ -3,7 +3,7 @@ id: d1a45d84-8dd1-4b31-8854-62b0b1d5da0b version: 1 date: '2025-05-02' author: Ryan Long, Bhavin Patel, Splunk -status: deprecated +status: production type: Anomaly description: | The following analytic is to leverage alerts from Splunk AppDynamics SecureApp, which identifies and monitors exploit attempts targeting business applications. The primary attack observed involves exploiting vulnerabilities in web applications, including injection attacks (SQL, API abuse), deserialization vulnerabilities, remote code execution attempts, LOG4J and zero day attacks. These attacks are typically aimed at gaining unauthorized access, exfiltrating sensitive data, or disrupting application functionality. From ab80c31b85043969c6e7bcb0c8522417d2c288fb Mon Sep 17 00:00:00 2001 From: Bhavin Patel Date: Mon, 4 Aug 2025 14:38:02 -0500 Subject: [PATCH 3/7] appinspect --- detections/deprecated/cisco_secure_application_alerts.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/detections/deprecated/cisco_secure_application_alerts.yml b/detections/deprecated/cisco_secure_application_alerts.yml index 8992338bbf..37643f4674 100644 --- a/detections/deprecated/cisco_secure_application_alerts.yml +++ b/detections/deprecated/cisco_secure_application_alerts.yml @@ -1,7 +1,7 @@ name: Cisco Secure Application Alerts id: 9982bff4-fc5d-49a3-ab9e-2dbbab2a711b -version: 2 -date: '2025-05-02' +version: 3 +date: '2025-08-04' author: Ryan Long, Bhavin Patel, Splunk status: deprecated type: Anomaly From 8a8e24ff2948b1c7c8659268bdfb23ea16508350 Mon Sep 17 00:00:00 2001 From: Bhavin Patel Date: Mon, 4 Aug 2025 14:45:49 -0500 Subject: [PATCH 4/7] adding macro --- detections/deprecated/cisco_secure_application_alerts.yml | 1 + macros/secureapp_es_field_mappings.yml | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 macros/secureapp_es_field_mappings.yml diff --git a/detections/deprecated/cisco_secure_application_alerts.yml b/detections/deprecated/cisco_secure_application_alerts.yml index 37643f4674..7f2ab591e5 100644 --- a/detections/deprecated/cisco_secure_application_alerts.yml +++ b/detections/deprecated/cisco_secure_application_alerts.yml @@ -41,6 +41,7 @@ search: |- (signature="MALIP" OR signature="SQL"), "A vulnerability is being ".attackOutcome." from a ".src_category." IP address ".src_ip.". The server ".dest_nt_host." hosting application ".app_name." was accessed.", (signature="DESEREAL"), "The application ".app_name." deserializes untrusted data without sufficiently verifying that the resulting data will be valid. Data which is untrusted cannot be trusted to be well-formed. Malformed data or unexpected data could be used to abuse application logic, deny service, or execute arbitrary code, when deserialized." ) + | `secureapp_es_field_mappings` | `cisco_secure_application_alerts_filter` how_to_implement: In order to properly run this search, you need to ingest alerts data from AppD SecureApp, specifically ingesting data via HEC. You will also need to ensure that the data is going to sourcetype - `appdynamics_security`. You will need to install the Splunk Add-on for AppDynamics. known_false_positives: No known false positives for this detection. If the alerts are noisy, consider tuning this detection by using the _filter macro in this search, and/or updating the tool this alert originates from. diff --git a/macros/secureapp_es_field_mappings.yml b/macros/secureapp_es_field_mappings.yml new file mode 100644 index 0000000000..f9fd6f1f63 --- /dev/null +++ b/macros/secureapp_es_field_mappings.yml @@ -0,0 +1,4 @@ +definition: | eval rule_number=attackName | eval app=app_name | eval action=attackOutcome | eval view=blockedReason | eval product=btName | eval ids_type=eventType | eval process=jvmId | eval cve=matchedCveName | eval record_type=ptype | eval ip=socketAddr | eval package_title=tierName | eval signature_id=vulnerableMethod | eval url=webTransactionUrl | eval location=applicationId | eval package=tierId | eval rule_number=attackId | eval mode=attackStatus +description: customer specific splunk configurations(eg- index, source, sourcetype). + Replace the macro definition with configurations for your Splunk Environment. +name: secureapp_es_field_mappings \ No newline at end of file From 75b307f0f8a5e2c33b5b1eb1fe14e263c305feca Mon Sep 17 00:00:00 2001 From: Bhavin Patel Date: Mon, 4 Aug 2025 14:47:09 -0500 Subject: [PATCH 5/7] updating def --- macros/secureapp_es_field_mappings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macros/secureapp_es_field_mappings.yml b/macros/secureapp_es_field_mappings.yml index f9fd6f1f63..4c1247de19 100644 --- a/macros/secureapp_es_field_mappings.yml +++ b/macros/secureapp_es_field_mappings.yml @@ -1,4 +1,4 @@ -definition: | eval rule_number=attackName | eval app=app_name | eval action=attackOutcome | eval view=blockedReason | eval product=btName | eval ids_type=eventType | eval process=jvmId | eval cve=matchedCveName | eval record_type=ptype | eval ip=socketAddr | eval package_title=tierName | eval signature_id=vulnerableMethod | eval url=webTransactionUrl | eval location=applicationId | eval package=tierId | eval rule_number=attackId | eval mode=attackStatus +definition: eval rule_number=attackName | eval app=app_name | eval action=attackOutcome | eval view=blockedReason | eval product=btName | eval ids_type=eventType | eval process=jvmId | eval cve=matchedCveName | eval record_type=ptype | eval ip=socketAddr | eval package_title=tierName | eval signature_id=vulnerableMethod | eval url=webTransactionUrl | eval location=applicationId | eval package=tierId | eval rule_number=attackId | eval mode=attackStatus description: customer specific splunk configurations(eg- index, source, sourcetype). Replace the macro definition with configurations for your Splunk Environment. name: secureapp_es_field_mappings \ No newline at end of file From 716592ff40500283743cb599956dc212e2818467 Mon Sep 17 00:00:00 2001 From: Bhavin Patel Date: Mon, 4 Aug 2025 14:48:58 -0500 Subject: [PATCH 6/7] updating spl --- .../cisco_secure_application_alerts.yml | 45 +++++++++---------- macros/secureapp_es_field_mappings.yml | 2 +- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/detections/deprecated/cisco_secure_application_alerts.yml b/detections/deprecated/cisco_secure_application_alerts.yml index 7f2ab591e5..0ac86229d6 100644 --- a/detections/deprecated/cisco_secure_application_alerts.yml +++ b/detections/deprecated/cisco_secure_application_alerts.yml @@ -19,29 +19,28 @@ description: | By leveraging this information, SOC teams can proactively mitigate security threats, patch vulnerable applications, and enforce security controls to prevent further exploitation. data_source: [] search: |- - `appdynamics_security` blocked=false - | rename attackEvents{}.attackOutcome AS attackOutcome, "attackEvents{}.vulnerabilityInfo.*" AS * - | fields - tag::eventtype, eventtype, host, id, index, linecount, punct, source, sourcetype, splunk_server, tag, SourceType, app clientAddressType, application, tier, "attackEvents{}.*" - | eval socketOut=mvjoin(socketOut," AND ") - | eval risk_score=kennaScore - | fillnull risk_score value="0" - | eval risk_object=app_name - | stats values(*) as * by attackId - | eval severity=case( - risk_score>=100 OR signature="LOG4J", "critical", - risk_score>50 AND risk_score<75, "high", - risk_score=0 AND attackOutcome="EXPLOITED", "high", - risk_score<=50 AND attackOutcome!="OBSERVED", "medium", - risk_score=0 AND attackOutcome="ATTEMPTED", "medium", - risk_score=0, "low", - risk_score=0 AND attackOutcome="OBSERVED", "low" - ) - | eval risk_message=case( - (signature="API" OR signature="LOG4J" OR signature="SSRF"), "An attempt to exploit a ".signature." vulnerability was made from a ".src_category." IP address ".src_ip.". The server ".dest_nt_host." hosting application ".app_name." was accessed, and data may have been exfiltrated to ".socketOut.".", - (signature="MALIP" OR signature="SQL"), "A vulnerability is being ".attackOutcome." from a ".src_category." IP address ".src_ip.". The server ".dest_nt_host." hosting application ".app_name." was accessed.", - (signature="DESEREAL"), "The application ".app_name." deserializes untrusted data without sufficiently verifying that the resulting data will be valid. Data which is untrusted cannot be trusted to be well-formed. Malformed data or unexpected data could be used to abuse application logic, deny service, or execute arbitrary code, when deserialized." - ) - | `secureapp_es_field_mappings` + `appdynamics_security` + | rename attackEvents{}.* AS *, detailJson.* AS *, vulnerabilityInfo.* AS * + | fields - tag::eventtype, eventtype, host, id, index, linecount, punct, source, sourcetype, splunk_server, tag, SourceType, app clientAddressType, application, tier, "attackEvents{}.* status" + | eval socketOut=mvjoin(socketOut," AND ") + | eval risk_score=kennaScore + | fillnull risk_score value="0" + `secureapp_es_field_mappings` + | stats values(*) as * by attackId + | eval severity=case( + risk_score>=100 OR signature="LOG4J", "critical", + risk_score>50 AND risk_score<75, "high", + risk_score=0 AND attackOutcome="EXPLOITED", "high", + risk_score<=50 AND attackOutcome!="OBSERVED", "medium", + risk_score=0 AND attackOutcome="ATTEMPTED", "medium", + risk_score=0, "low", + risk_score=0 AND attackOutcome="OBSERVED", "low" + ) + | eval risk_messege=case( + (signature="API" OR signature="LOG4J" OR signature="SSRF"), "An attempt to exploit a ".signature." vulnerability was made from a ".src_category." IP address ".src_ip.". The server ".dest_nt_host." hosting application ".app_name." was accessed, and data may have been exfiltrated to ".socketOut.".", + (signature="MALIP" OR signature="SQL"), "A vulnerability is being ".attackOutcome." from a ".src_category." IP address ".src_ip.". The server ".dest_nt_host." hosting application ".app_name." was accessed.", + (signature="DESEREAL"), "The application ".app_name." deserializes untrusted data without sufficiently verifying that the resulting data will be valid. Data which is untrusted cannot be trusted to be well-formed. Malformed data or unexpected data could be used to abuse application logic, deny service, or execute arbitrary code, when deserialized." + ) | `cisco_secure_application_alerts_filter` how_to_implement: In order to properly run this search, you need to ingest alerts data from AppD SecureApp, specifically ingesting data via HEC. You will also need to ensure that the data is going to sourcetype - `appdynamics_security`. You will need to install the Splunk Add-on for AppDynamics. known_false_positives: No known false positives for this detection. If the alerts are noisy, consider tuning this detection by using the _filter macro in this search, and/or updating the tool this alert originates from. diff --git a/macros/secureapp_es_field_mappings.yml b/macros/secureapp_es_field_mappings.yml index 4c1247de19..cb1407d2c1 100644 --- a/macros/secureapp_es_field_mappings.yml +++ b/macros/secureapp_es_field_mappings.yml @@ -1,4 +1,4 @@ -definition: eval rule_number=attackName | eval app=app_name | eval action=attackOutcome | eval view=blockedReason | eval product=btName | eval ids_type=eventType | eval process=jvmId | eval cve=matchedCveName | eval record_type=ptype | eval ip=socketAddr | eval package_title=tierName | eval signature_id=vulnerableMethod | eval url=webTransactionUrl | eval location=applicationId | eval package=tierId | eval rule_number=attackId | eval mode=attackStatus +definition: '| eval rule_number=attackName | eval app=app_name | eval action=attackOutcome | eval view=blockedReason | eval product=btName | eval ids_type=eventType | eval process=jvmId | eval cve=matchedCveName | eval record_type=ptype | eval ip=socketAddr | eval package_title=tierName | eval signature_id=vulnerableMethod | eval url=webTransactionUrl | eval location=applicationId | eval package=tierId | eval rule_number=attackId | eval mode=attackStatus' description: customer specific splunk configurations(eg- index, source, sourcetype). Replace the macro definition with configurations for your Splunk Environment. name: secureapp_es_field_mappings \ No newline at end of file From ef128df8863bf2658214921c0d9dbdd1f0367a64 Mon Sep 17 00:00:00 2001 From: Bhavin Patel Date: Mon, 4 Aug 2025 14:53:47 -0500 Subject: [PATCH 7/7] updating spl --- ..._appdynamics_secure_application_alerts.yml | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/detections/application/splunk_appdynamics_secure_application_alerts.yml b/detections/application/splunk_appdynamics_secure_application_alerts.yml index 4680bbab98..94f059f914 100644 --- a/detections/application/splunk_appdynamics_secure_application_alerts.yml +++ b/detections/application/splunk_appdynamics_secure_application_alerts.yml @@ -20,28 +20,28 @@ description: | data_source: - Splunk AppDynamics Secure Application Alert search: |- - `appdynamics_security` blocked=false - | rename attackEvents{}.attackOutcome AS attackOutcome, "attackEvents{}.vulnerabilityInfo.*" AS * - | fields - tag::eventtype, eventtype, host, id, index, linecount, punct, source, sourcetype, splunk_server, tag, SourceType, app clientAddressType, application, tier, "attackEvents{}.*" - | eval socketOut=mvjoin(socketOut," AND ") - | eval risk_score=kennaScore - | fillnull risk_score value="0" - | eval risk_object=app_name - | stats values(*) as * by attackId - | eval severity=case( - risk_score>=100 OR signature="LOG4J", "critical", - risk_score>50 AND risk_score<75, "high", - risk_score=0 AND attackOutcome="EXPLOITED", "high", - risk_score<=50 AND attackOutcome!="OBSERVED", "medium", - risk_score=0 AND attackOutcome="ATTEMPTED", "medium", - risk_score=0, "low", - risk_score=0 AND attackOutcome="OBSERVED", "low" - ) - | eval risk_message=case( - (signature="API" OR signature="LOG4J" OR signature="SSRF"), "An attempt to exploit a ".signature." vulnerability was made from a ".src_category." IP address ".src_ip.". The server ".dest_nt_host." hosting application ".app_name." was accessed, and data may have been exfiltrated to ".socketOut.".", - (signature="MALIP" OR signature="SQL"), "A vulnerability is being ".attackOutcome." from a ".src_category." IP address ".src_ip.". The server ".dest_nt_host." hosting application ".app_name." was accessed.", - (signature="DESEREAL"), "The application ".app_name." deserializes untrusted data without sufficiently verifying that the resulting data will be valid. Data which is untrusted cannot be trusted to be well-formed. Malformed data or unexpected data could be used to abuse application logic, deny service, or execute arbitrary code, when deserialized." - ) + `appdynamics_security` blocked=false + | rename attackEvents{}.* AS *, detailJson.* AS *, vulnerabilityInfo.* AS * + | fields - tag::eventtype, eventtype, host, id, index, linecount, punct, source, sourcetype, splunk_server, tag, SourceType, app clientAddressType, application, tier, "attackEvents{}.* status" + | eval socketOut=mvjoin(socketOut," AND ") + | eval risk_score=kennaScore + | fillnull risk_score value="0" + `secureapp_es_field_mappings` + | stats values(*) as * by attackId + | eval severity=case( + risk_score>=100 OR signature="LOG4J", "critical", + risk_score>50 AND risk_score<75, "high", + risk_score=0 AND attackOutcome="EXPLOITED", "high", + risk_score<=50 AND attackOutcome!="OBSERVED", "medium", + risk_score=0 AND attackOutcome="ATTEMPTED", "medium", + risk_score=0, "low", + risk_score=0 AND attackOutcome="OBSERVED", "low" + ) + | eval risk_message=case( + (signature="API" OR signature="LOG4J" OR signature="SSRF"), "An attempt to exploit a ".signature." vulnerability was made from a ".src_category." IP address ".src_ip.". The server ".dest_nt_host." hosting application ".app_name." was accessed, and data may have been exfiltrated to ".socketOut.".", + (signature="MALIP" OR signature="SQL"), "A vulnerability is being ".attackOutcome." from a ".src_category." IP address ".src_ip.". The server ".dest_nt_host." hosting application ".app_name." was accessed.", + (signature="DESEREAL"), "The application ".app_name." deserializes untrusted data without sufficiently verifying that the resulting data will be valid. Data which is untrusted cannot be trusted to be well-formed. Malformed data or unexpected data could be used to abuse application logic, deny service, or execute arbitrary code, when deserialized." + ) | `splunk_appdynamics_secure_application_alerts_filter` how_to_implement: In order to properly run this search, you need to ingest alerts data from AppD SecureApp, specifically ingesting data via HEC. You will also need to ensure that the data is going to sourcetype - `appdynamics_security`. You will need to install the Splunk Add-on for AppDynamics. known_false_positives: No known false positives for this detection. If the alerts are noisy, consider tuning this detection by using the _filter macro in this search, and/or updating the tool this alert originates from.