-
Notifications
You must be signed in to change notification settings - Fork 446
Cisco Secure Application Alerts #3306
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 12 commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
0544e80
adding draft detections
patel-bhavin 90d0d3b
adding data source
patel-bhavin 5e3991d
updating datasiource
patel-bhavin 785fbd5
updating contetntctl
patel-bhavin 3f04de5
updating TA
patel-bhavin c8aabc0
updating yaml
patel-bhavin af6077f
updating spl
patel-bhavin 6908748
Merge branch 'develop' into app_dynamics_alerts
patel-bhavin 0392bfe
Update cisco_secure_application_alerts.yml
patel-bhavin d5f3bf6
Add manual_test flag
patel-bhavin 3bb8618
updating as per Lou's feedback
patel-bhavin 2ba144b
Update cisco_secure_application_alerts.yml
patel-bhavin 9ae1c7a
kfp
patel-bhavin 3a5f6d6
Merge branch 'develop' into app_dynamics_alerts
patel-bhavin File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
136 changes: 136 additions & 0 deletions
136
data_sources/cisco_secure_application_appdynamics_alerts.yml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,136 @@ | ||
| name: Cisco Secure Application AppDynamics Alerts | ||
| id: 5c963eb0-010e-4386-875f-5134879f14a7 | ||
| version: 1 | ||
| date: '2025-02-04' | ||
| author: Bhavin Patel, Splunk | ||
| description: Data source object for alerts from Cisco Secure Application | ||
| source: AppDynamics Security | ||
| sourcetype: appdynamics_security | ||
| supported_TA: | ||
| - name: Splunk Add-on for AppDynamics | ||
| url: https://splunkbase.splunk.com/app/3471 | ||
| version: 3.0.0 | ||
| fields: | ||
| - SourceType | ||
| - apiServerExternal | ||
| - app_name | ||
| - application | ||
| - attackEventTrigger | ||
| - attackEvents{}.applicationName | ||
| - attackEvents{}.attackOutcome | ||
| - attackEvents{}.attackTypes | ||
| - attackEvents{}.blocked | ||
| - attackEvents{}.blockedReason | ||
| - attackEvents{}.clientAddress | ||
| - attackEvents{}.clientAddressType | ||
| - attackEvents{}.clientPort | ||
| - attackEvents{}.cveId | ||
| - attackEvents{}.detailJson.apiServerExternal | ||
| - attackEvents{}.detailJson.apiServerInUrl | ||
| - attackEvents{}.detailJson.classname | ||
| - attackEvents{}.detailJson.hostContext | ||
| - attackEvents{}.detailJson.methodName | ||
| - attackEvents{}.detailJson.ptype | ||
| - attackEvents{}.detailJson.socketOut | ||
| - attackEvents{}.eventType | ||
| - attackEvents{}.jvmId | ||
| - attackEvents{}.keyInfo | ||
| - attackEvents{}.maliciousIpOut | ||
| - attackEvents{}.maliciousIpSource | ||
| - attackEvents{}.maliciousIpSourceOut | ||
| - attackEvents{}.matchedCveName | ||
| - attackEvents{}.serverAddress | ||
| - attackEvents{}.serverName | ||
| - attackEvents{}.serverPort | ||
| - attackEvents{}.stackTrace | ||
| - attackEvents{}.tierName | ||
| - attackEvents{}.timestamp | ||
| - attackEvents{}.vulnerabilityInfo.cveNvdUrl | ||
| - attackEvents{}.vulnerabilityInfo.cvePublishDate | ||
| - attackEvents{}.vulnerabilityInfo.cvssScore | ||
| - attackEvents{}.vulnerabilityInfo.cvssSeverity | ||
| - attackEvents{}.vulnerabilityInfo.incidentFirstDetected | ||
| - attackEvents{}.vulnerabilityInfo.kennaActiveInternetBreach | ||
| - attackEvents{}.vulnerabilityInfo.kennaEasilyExploitable | ||
| - attackEvents{}.vulnerabilityInfo.kennaMalwareExploitable | ||
| - attackEvents{}.vulnerabilityInfo.kennaPopularTarget | ||
| - attackEvents{}.vulnerabilityInfo.kennaPredictedExploitable | ||
| - attackEvents{}.vulnerabilityInfo.kennaScore | ||
| - attackEvents{}.vulnerabilityInfo.library | ||
| - attackEvents{}.vulnerabilityInfo.title | ||
| - attackEvents{}.vulnerabilityInfo.type | ||
| - attackEvents{}.vulnerableMethod | ||
| - attackEvents{}.webTransactionUrl | ||
| - attackId | ||
| - attackLastDetected | ||
| - attackOutcome | ||
| - attackSource | ||
| - attackStatus | ||
| - attackTypes | ||
| - blocked | ||
| - blockedReason | ||
| - businessTransaction | ||
| - classname | ||
| - clientAddressType | ||
| - cveId | ||
| - cveNvdUrl | ||
| - cvePublishDate | ||
| - cvssScore | ||
| - cvssSeverity | ||
| - dest_ip | ||
| - dest_nt_host | ||
| - dest_port | ||
| - eventType | ||
| - eventtype | ||
| - host | ||
| - incidentFirstDetected | ||
| - index | ||
| - jvmId | ||
| - kennaActiveInternetBreach | ||
| - kennaEasilyExploitable | ||
| - kennaMalwareExploitable | ||
| - kennaPopularTarget | ||
| - kennaPredictedExploitable | ||
| - kennaScore | ||
| - keyInfo | ||
| - linecount | ||
| - maliciousIpOut | ||
| - maliciousIpSource | ||
| - maliciousIpSourceOut | ||
| - matchedCveName | ||
| - methodName | ||
| - ptype | ||
| - punct | ||
| - signature | ||
| - socketAddr | ||
| - socketFromLog4j | ||
| - socketOut | ||
| - source | ||
| - sourcetype | ||
| - splunk_server | ||
| - splunk_server_group | ||
| - src_category | ||
| - src_ip | ||
| - src_port | ||
| - stackTrace | ||
| - status | ||
| - tag | ||
| - tag::eventtype | ||
| - tier | ||
| - tierName | ||
| - timestamp | ||
| - vulnLibrary | ||
| - vulnTitle | ||
| - vulnType | ||
| - vulnerableMethod | ||
| - webTransactionUrl | ||
| - _bkt | ||
| - _cd | ||
| - _eventtype_color | ||
| - _indextime | ||
| - _raw | ||
| - _serial | ||
| - _si | ||
| - _sourcetype | ||
| - _time | ||
| 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}}]}' |
88 changes: 88 additions & 0 deletions
88
detections/application/cisco_secure_application_alerts.yml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,88 @@ | ||
| name: Cisco Secure Application Alerts | ||
| id: 9982bff4-fc5d-49a3-ab9e-2dbbab2a711b | ||
| version: 1 | ||
| date: '2025-02-04' | ||
| author: Ryan Long, Bhavin Patel, Splunk | ||
| status: production | ||
| 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. | ||
|
|
||
| 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: | ||
|
|
||
| * 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: | ||
| - Cisco Secure Application AppDynamics Alerts | ||
| 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." | ||
| ) | ||
| | `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: None known false postive for this detection search. If the alerts are noisy, consider tuning this detection by using the _filter macro in this search and/or by updating the tool this alert originates from. | ||
ljstella marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| 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 | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| definition: sourcetype=appdynamics_security | ||
| description: customer specific splunk configurations(eg- index, source, sourcetype). | ||
| Replace the macro definition with configurations for your Splunk Environment. | ||
| name: appdynamics_security |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.