Skip to content

Commit e2863ae

Browse files
authored
Merge branch 'develop' into github_detections_improvement
2 parents 3563fdd + a11c4b1 commit e2863ae

File tree

4 files changed

+234
-0
lines changed

4 files changed

+234
-0
lines changed

contentctl.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,4 +212,10 @@ apps:
212212
version: 3.1.0
213213
description: description of app
214214
hardcoded_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/splunk-add-on-for-github_310.tgz
215+
- uid: 2882
216+
title: Splunk Add-on for AppDynamics
217+
appid: Splunk_TA_AppDynamics
218+
version: 3.0.0
219+
description: The Splunk Add-on for AppDynamics enables you to easily configure data inputs to pull data from AppDynamics' REST APIs
220+
hardcoded_path: https://attack-range-appbinaries.s3.us-west-2.amazonaws.com/splunk-add-on-for-appdynamics_300.tgz
215221
githash: d6fac80e6d50ae06b40f91519a98489d4ce3a3fd
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
name: Cisco Secure Application AppDynamics Alerts
2+
id: 5c963eb0-010e-4386-875f-5134879f14a7
3+
version: 1
4+
date: '2025-02-04'
5+
author: Bhavin Patel, Splunk
6+
description: Data source object for alerts from Cisco Secure Application
7+
source: AppDynamics Security
8+
sourcetype: appdynamics_security
9+
supported_TA:
10+
- name: Splunk Add-on for AppDynamics
11+
url: https://splunkbase.splunk.com/app/3471
12+
version: 3.0.0
13+
fields:
14+
- SourceType
15+
- apiServerExternal
16+
- app_name
17+
- application
18+
- attackEventTrigger
19+
- attackEvents{}.applicationName
20+
- attackEvents{}.attackOutcome
21+
- attackEvents{}.attackTypes
22+
- attackEvents{}.blocked
23+
- attackEvents{}.blockedReason
24+
- attackEvents{}.clientAddress
25+
- attackEvents{}.clientAddressType
26+
- attackEvents{}.clientPort
27+
- attackEvents{}.cveId
28+
- attackEvents{}.detailJson.apiServerExternal
29+
- attackEvents{}.detailJson.apiServerInUrl
30+
- attackEvents{}.detailJson.classname
31+
- attackEvents{}.detailJson.hostContext
32+
- attackEvents{}.detailJson.methodName
33+
- attackEvents{}.detailJson.ptype
34+
- attackEvents{}.detailJson.socketOut
35+
- attackEvents{}.eventType
36+
- attackEvents{}.jvmId
37+
- attackEvents{}.keyInfo
38+
- attackEvents{}.maliciousIpOut
39+
- attackEvents{}.maliciousIpSource
40+
- attackEvents{}.maliciousIpSourceOut
41+
- attackEvents{}.matchedCveName
42+
- attackEvents{}.serverAddress
43+
- attackEvents{}.serverName
44+
- attackEvents{}.serverPort
45+
- attackEvents{}.stackTrace
46+
- attackEvents{}.tierName
47+
- attackEvents{}.timestamp
48+
- attackEvents{}.vulnerabilityInfo.cveNvdUrl
49+
- attackEvents{}.vulnerabilityInfo.cvePublishDate
50+
- attackEvents{}.vulnerabilityInfo.cvssScore
51+
- attackEvents{}.vulnerabilityInfo.cvssSeverity
52+
- attackEvents{}.vulnerabilityInfo.incidentFirstDetected
53+
- attackEvents{}.vulnerabilityInfo.kennaActiveInternetBreach
54+
- attackEvents{}.vulnerabilityInfo.kennaEasilyExploitable
55+
- attackEvents{}.vulnerabilityInfo.kennaMalwareExploitable
56+
- attackEvents{}.vulnerabilityInfo.kennaPopularTarget
57+
- attackEvents{}.vulnerabilityInfo.kennaPredictedExploitable
58+
- attackEvents{}.vulnerabilityInfo.kennaScore
59+
- attackEvents{}.vulnerabilityInfo.library
60+
- attackEvents{}.vulnerabilityInfo.title
61+
- attackEvents{}.vulnerabilityInfo.type
62+
- attackEvents{}.vulnerableMethod
63+
- attackEvents{}.webTransactionUrl
64+
- attackId
65+
- attackLastDetected
66+
- attackOutcome
67+
- attackSource
68+
- attackStatus
69+
- attackTypes
70+
- blocked
71+
- blockedReason
72+
- businessTransaction
73+
- classname
74+
- clientAddressType
75+
- cveId
76+
- cveNvdUrl
77+
- cvePublishDate
78+
- cvssScore
79+
- cvssSeverity
80+
- dest_ip
81+
- dest_nt_host
82+
- dest_port
83+
- eventType
84+
- eventtype
85+
- host
86+
- incidentFirstDetected
87+
- index
88+
- jvmId
89+
- kennaActiveInternetBreach
90+
- kennaEasilyExploitable
91+
- kennaMalwareExploitable
92+
- kennaPopularTarget
93+
- kennaPredictedExploitable
94+
- kennaScore
95+
- keyInfo
96+
- linecount
97+
- maliciousIpOut
98+
- maliciousIpSource
99+
- maliciousIpSourceOut
100+
- matchedCveName
101+
- methodName
102+
- ptype
103+
- punct
104+
- signature
105+
- socketAddr
106+
- socketFromLog4j
107+
- socketOut
108+
- source
109+
- sourcetype
110+
- splunk_server
111+
- splunk_server_group
112+
- src_category
113+
- src_ip
114+
- src_port
115+
- stackTrace
116+
- status
117+
- tag
118+
- tag::eventtype
119+
- tier
120+
- tierName
121+
- timestamp
122+
- vulnLibrary
123+
- vulnTitle
124+
- vulnType
125+
- vulnerableMethod
126+
- webTransactionUrl
127+
- _bkt
128+
- _cd
129+
- _eventtype_color
130+
- _indextime
131+
- _raw
132+
- _serial
133+
- _si
134+
- _sourcetype
135+
- _time
136+
example_log: '{ "SourceType": "secure_app_attacks", "attackId": "24815279", "attackSource": "EXTERNAL", "attackOutcome": "EXPLOITED", "attackTypes": "{SSRF}", "attackEventTrigger": "", "application": "AD-Ecommerce", "tier": "Order-Processing-Services", "businessTransaction": "Checkout", "attackStatus": "OPEN", "attackLastDetected": "2025-01-31 12:30:22 +0000 UTC", "attackEvents": [{"attackOutcome":"EXPLOITED","eventType":"SOCKET_RESOLVE","attackTypes":"SSRF","timestamp":"2025-01-31T12:30:22Z","applicationName":"AD-Ecommerce","tierName":"Order-Processing-Services","maliciousIpOut":"","maliciousIpSourceOut":"","detailJson":{"classname":"java.net.SocketPermission","ptype":"SOCKET","socketOut":"www.cisco.com","hostContext":"www.cisco.com","methodName":"sun.net.www.http.HttpClient.openServer","apiServerExternal":true,"apiServerInUrl":true},"blocked":false,"blockedReason":"","vulnerableMethod":"org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)","matchedCveName":"CVE-2020-13934","keyInfo":"","cveId":"a21931cd-52fa-11ec-a8b2-8e3051145156","stackTrace":"java.lang.SecurityManager.checkConnect(SecurityManager.java:1051)\nsun.net.www.http.HttpClient.openServer(HttpClient.java:510)\nsun.net.www.protocol.https.HttpsClient.\u003cinit\u003e(HttpsClient.java:264)\nsun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)\nsun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)\norg.apache.activemq.artemis.spi.core.security.jaas.LDAPLoginModule.login(SomeFile.java:12)\nsun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138)\nsun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1022)\nsun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1020)\njava.security.AccessController.doPrivileged(Native Method)\njava.security.AccessController.doPrivilegedWithCombiner(AccessController.java:782)\nsun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1019)\nsun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)\nsun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546)\nsun.net.www.protocol.http.HttpURLConnection.access$200(HttpURLConnection.java:91)\nsun.net.www.protocol.http.HttpURLConnection$9.run(HttpURLConnection.java:1466)\nsun.net.www.protocol.http.HttpURLConnection$9.run(HttpURLConnection.java:1464)\njava.security.AccessController.doPrivileged(Native Method)\njava.security.AccessController.doPrivilegedWithCombiner(AccessController.java:782)\nsun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1463)\nsun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)\nservlet.ArgentoDemoApp$GenericExecution._executeServletCommand(ArgentoDemoApp.java:850)\nservlet.ArgentoDemoApp$GenericExecution.executeServletCommand(ArgentoDemoApp.java:778)\nservlet.ArgentoDemoApp$MyApplicationExecution.executeServletCommand(ArgentoDemoApp.java:718)\nservlet.ArgentoDemoApp._doGet(ArgentoDemoApp.java:441)\nservlet.ArgentoDemoApp.doGet(ArgentoDemoApp.java:376)\njavax.servlet.http.HttpServlet.service(HttpServlet.java:634)\njavax.servlet.http.HttpServlet.service(HttpServlet.java:741)\norg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\norg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\norg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\norg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\norg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\norg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\norg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\norg.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)\norg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)\norg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\norg.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)\norg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\norg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)\norg.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)\norg.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\norg.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)\norg.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)\norg.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\njava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\njava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\norg.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\njava.lang.Thread.run(Thread.java:745)\n","jvmId":"EEcommerce_MS_NODE","maliciousIpSource":"","webTransactionUrl":"https://localhost:8088/argentoDemoApp/execute?upload=https://www.cisco.com/c/dam/cdc/t/ctm-core.js","clientAddressType":4,"clientAddress":"218.132.217.179","serverPort":"1047","serverAddress":"75.155.150.130","clientPort":"68389","serverName":"/usr/src/argento/prod/demo-run/tomcat-demo-app/webapps/argentoDemoApp/","vulnerabilityInfo":{"cvePublishDate":"2020-07-15T16:40:14.601976Z","cvssScore":5.3,"cvssSeverity":"MEDIUM","cveNvdUrl":"https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHETOMCATEMBED-584427","incidentFirstDetected":"2020-07-15T16:40:14.601976Z","kennaScore":53.0971,"library":"org.apache.tomcat.embed:tomcat-embed-core","title":"Denial of Service (DoS)","type":"java","kennaActiveInternetBreach":false,"kennaEasilyExploitable":false,"kennaMalwareExploitable":false,"kennaPredictedExploitable":true,"kennaPopularTarget":false}}]}'
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
name: Cisco Secure Application Alerts
2+
id: 9982bff4-fc5d-49a3-ab9e-2dbbab2a711b
3+
version: 1
4+
date: '2025-02-04'
5+
author: Ryan Long, Bhavin Patel, Splunk
6+
status: production
7+
type: Anomaly
8+
description: |
9+
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.
10+
11+
Cisco 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:
12+
13+
* Identifying active exploitation attempts in real-time, allowing for quicker incident response.
14+
* Categorizing attack severity to prioritize remediation efforts based on risk level.
15+
* Providing visibility into attacker tactics, including source IP, attack techniques, and affected applications.
16+
* Generating risk-based scoring and contextual alerts to enhance decision-making within SOC workflows.
17+
* Helping analysts determine whether an attack was merely an attempt or if it successfully exploited a vulnerability.
18+
19+
By leveraging this information, SOC teams can proactively mitigate security threats, patch vulnerable applications, and enforce security controls to prevent further exploitation.
20+
data_source:
21+
- Cisco Secure Application AppDynamics Alerts
22+
search: |-
23+
`appdynamics_security` blocked=false
24+
| rename attackEvents{}.attackOutcome AS attackOutcome, "attackEvents{}.vulnerabilityInfo.*" AS *
25+
| fields - tag::eventtype, eventtype, host, id, index, linecount, punct, source, sourcetype, splunk_server, tag, SourceType, app clientAddressType, application, tier, "attackEvents{}.*"
26+
| eval socketOut=mvjoin(socketOut," AND ")
27+
| eval risk_score=kennaScore
28+
| fillnull risk_score value="0"
29+
| eval risk_object=app_name
30+
| stats values(*) as * by attackId
31+
| eval severity=case(
32+
risk_score>=100 OR signature="LOG4J", "critical",
33+
risk_score>50 AND risk_score<75, "high",
34+
risk_score=0 AND attackOutcome="EXPLOITED", "high",
35+
risk_score<=50 AND attackOutcome!="OBSERVED", "medium",
36+
risk_score=0 AND attackOutcome="ATTEMPTED", "medium",
37+
risk_score=0, "low",
38+
risk_score=0 AND attackOutcome="OBSERVED", "low"
39+
)
40+
| eval risk_message=case(
41+
(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.".",
42+
(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.",
43+
(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."
44+
)
45+
| `cisco_secure_application_alerts_filter`
46+
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.
47+
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.
48+
references:
49+
- https://docs.appdynamics.com/appd/24.x/latest/en/application-security-monitoring/integrate-cisco-secure-application-with-splunk
50+
drilldown_searches:
51+
- name: View the detection results for - "$app_name$"
52+
search: '%original_detection_search% | search app_name = "$app_name$"'
53+
earliest_offset: $info_min_time$
54+
latest_offset: $info_max_time$
55+
- name: View risk events for the last 7 days for - "$app_name$"
56+
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$app_name$") starthoursago=168 | stats count min(_time)
57+
as firstTime max(_time) as lastTime values(search_name) as "Search Name" values(risk_message)
58+
as "Risk Message" values(analyticstories) as "Analytic Stories" values(annotations._all)
59+
as "Annotations" values(annotations.mitre_attack.mitre_tactic) as "ATT&CK Tactics"
60+
by normalized_risk_object | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`'
61+
earliest_offset: $info_min_time$
62+
latest_offset: $info_max_time$
63+
rba:
64+
message: $risk_message$
65+
risk_objects:
66+
- field: app_name
67+
type: other
68+
score: 10
69+
threat_objects:
70+
- field: src_ip
71+
type: ip_address
72+
tags:
73+
analytic_story:
74+
- Critical Alerts
75+
asset_type: Web Application
76+
mitre_attack_id: []
77+
product:
78+
- Splunk Enterprise
79+
- Splunk Enterprise Security
80+
- Splunk Cloud
81+
security_domain: threat
82+
# 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.
83+
tests:
84+
- name: True Positive Test
85+
attack_data:
86+
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/suspicious_behaviour/alerts/cisco_secure_app_alerts.log
87+
sourcetype: appdynamics_security
88+
source: AppDynamics Security

macros/appdynamics_security.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
definition: sourcetype=appdynamics_security
2+
description: customer specific splunk configurations(eg- index, source, sourcetype).
3+
Replace the macro definition with configurations for your Splunk Environment.
4+
name: appdynamics_security

0 commit comments

Comments
 (0)