Skip to content
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

[New Rule] AWS S3 Bucket Enumeration or Brute Force #3635

Conversation

brokensound77
Copy link
Contributor

@brokensound77 brokensound77 commented May 1, 2024

Summary

It was recently shared that S3 buckets are vulnerable to exhaustive PUT requests for the sake of causing financial impact to an organization, only needing to know the bucket name. (AWS did respond quickly that they were addressing the billing of such operations).

What makes this slightly more impactful is the fact that bucket names themselves are trivially discoverable via enumeration, allowing for randomized or targeted brute forcing in a simple manner.

Details

AWS S3 buckets can be be brute forced to cause financial impact against the resource owner. What makes this even riskier is that even private, locked down buckets can still trigger a potential cost, even with an "Access Denied", while also being accessible from unauthenticated, anonymous accounts. This also appears to work on several or all operations (GET, PUT, list-objects, etc.), with charges resulting from all of them (.004 or .0005)!

Attackers may attempt to enumerate names until a valid bucket is discovered and then pivot to cause financial impact, enumerate for more information, or brute force in other ways to attempt to exfil data.

UPDATE:

In this case, the aws.s3.bucket.name was where (bucket) the logs were going to vs the targeted bucket, which has been corrected with tls.client.server_name

Developer notes

This is an ES|QL rule, which is still in technical preview, but was tested E2E multiple ways. It did require a small bypass for parsing required_fields since we do not yet parse the AST for ES|QL. The query validation was performed on an active stack with relevant data.

Technically this is also achievable with a threshold rule, so if any blockers arise, we can consider converting it.

Testing

image image
{
    "kibana.alert.severity": [
      "low"
    ],
    "kibana.alert.rule.references": [
      "https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1",
      "https://docs.aws.amazon.com/cli/latest/reference/s3api/"
    ],
    "kibana.alert.rule.updated_by": [
      "jibarra"
    ],
    "signal.ancestors.depth": [
      0
    ],
    "kibana.alert.rule.tags": [
      "Domain: Cloud",
      "Data Source: AWS",
      "Data Source: Amazon Web Services",
      "Resources: Investigation Guide",
      "Use Case: Log Auditing",
      "Tactic: Impact"
    ],
    "kibana.alert.reason.text": [
      "event created low alert AWS S3 Bucket Enumeration or Brute Force."
    ],
    "kibana.alert.rule.threat.technique.id": [
      "T1657",
      "T1580",
      "T1530"
    ],
    "kibana.alert.ancestors.depth": [
      0
    ],
    "signal.rule.enabled": [
      "true"
    ],
    "signal.rule.max_signals": [
      100
    ],
    "kibana.alert.risk_score": [
      21
    ],
    "signal.rule.updated_at": [
      "2024-05-01T06:54:15.033Z"
    ],
    "signal.rule.references": [
      "https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1",
      "https://docs.aws.amazon.com/cli/latest/reference/s3api/"
    ],
    "kibana.alert.rule.interval": [
      "10m"
    ],
    "kibana.alert.rule.type": [
      "esql"
    ],
    "kibana.alert.start": [
      "2024-05-01T06:59:53.776Z"
    ],
    "kibana.alert.rule.immutable": [
      "false"
    ],
    "signal.rule.from": [
      "now-960s"
    ],
    "kibana.alert.rule.enabled": [
      "true"
    ],
    "kibana.alert.rule.version": [
      "1"
    ],
    "kibana.alert.ancestors.type": [
      "event"
    ],
    "signal.ancestors.index": [
      ""
    ],
    "signal.rule.threat.framework": [
      "MITRE ATT&CK",
      "MITRE ATT&CK",
      "MITRE ATT&CK"
    ],
    "aws.s3.bucket.name": [
      "REDACTED_BUCKET"
    ],
    "kibana.alert.rule.note": [
      "## Triage and analysis\n\n### InvestigatingAWS S3 Bucket Enumeration or Brute Force\n\nAWS S3 buckets can be be brute forced to cause financial impact against the resource owner. What makes this even riskier is that even private, locked down buckets can still trigger a potential cost, even with an \"Access Denied\", while also being accessible from unauthenticated, anonymous accounts. This also appears to work on several or all [operations](https://docs.aws.amazon.com/cli/latest/reference/s3api/) (GET, PUT, list-objects, etc.). Additionally, buckets are trivially discoverable by default as long as the bucket name is known, making it vulnerable to enumeration for discovery.\n\nAttackers may attempt to enumerate names until a valid bucket is discovered and then pivot to cause financial impact, enumerate for more information, or brute force in other ways to attempt to exfil data.\n\n#### Possible investigation steps\n\n- Examine the history of the operation requests from the same `source.address` and `cloud.account.id` to determine if there is other suspicious activity.\n- Review similar requests and look at the `user.agent` info to ascertain the source of the requests (though do not overly rely on this since it is controlled by the requestor).\n- Review other requests to the same `aws.s3.object.key` as well as other `aws.s3.object.key` accessed by the same `cloud.account.id` or `source.address`.\n- Investigate other alerts associated with the user account during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, or network administrator activity.\n- Examine the request parameters. These may indicate the source of the program or the nature of the task being performed when the error occurred.\n    - Check whether the error is related to unsuccessful attempts to enumerate or access objects, data, or secrets.\n- Considering the source IP address and geolocation of the user who issued the command:\n    - Do they look normal for the calling user?\n    - If the source is an EC2 IP address, is it associated with an EC2 instance in one of your accounts or is the source IP from an EC2 instance that's not under your control?\n    - If it is an authorized EC2 instance, is the activity associated with normal behavior for the instance role or roles? Are there any other alerts or signs of suspicious activity involving this instance?\n- Consider the time of day. If the user is a human (not a program or script), did the activity take place during a normal time of day?\n- Contact the account owner and confirm whether they are aware of this activity if suspicious.\n- If you suspect the account has been compromised, scope potentially compromised assets by tracking servers, services, and data accessed by the account in the last 24 hours.\n\n### False positive analysis\n\n- Verify the `source.address` and `cloud.account.id` - there are some valid operations from within AWS directly that can cause failures and false positives. Additionally, failed automation can also caeuse false positives, but should be identifiable by reviewing the `source.address` and `cloud.account.id`.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Disable or limit the account during the investigation and response.\n- Identify the possible impact of the incident and prioritize accordingly; the following actions can help you gain context:\n    - Identify the account role in the cloud environment.\n    - Assess the criticality of affected services and servers.\n    - Work with your IT team to identify and minimize the impact on users.\n    - Identify if the attacker is moving laterally and compromising other accounts, servers, or services.\n    - Identify any regulatory or legal ramifications related to this activity.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords or delete API keys as needed to revoke the attacker's access to the environment. Work with your IT teams to minimize the impact on business operations during these actions.\n- Check if unauthorized new users were created, remove unauthorized new accounts, and request password resets for other IAM users.\n- Consider enabling multi-factor authentication for users.\n- Review the permissions assigned to the implicated user to ensure that the least privilege principle is being followed.\n- Implement security best practices [outlined](https://aws.amazon.com/premiumsupport/knowledge-center/security-best-practices/) by AWS.\n- Take the actions needed to return affected systems, data, or services to their normal operational levels.\n- Identify the initial vector abused by the attacker and take action to prevent reinfection via the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n"
    ],
    "kibana.alert.rule.max_signals": [
      100
    ],
    "signal.rule.author": [
      "Elastic"
    ],
    "kibana.alert.rule.risk_score": [
      21
    ],
    "kibana.alert.rule.false_positives": [
      "Known or internal account IDs or automation"
    ],
    "signal.rule.threat.technique.id": [
      "T1657",
      "T1580",
      "T1530"
    ],
    "kibana.alert.rule.consumer": [
      "siem"
    ],
    "kibana.alert.rule.category": [
      "ES|QL Rule"
    ],
    "@timestamp": [
      "2024-05-01T06:59:53.758Z"
    ],
    "signal.rule.updated_by": [
      "jibarra"
    ],
    "cloud.account.id": [
      "anonymous"
    ],
    "kibana.alert.rule.severity": [
      "low"
    ],
    "signal.rule.timestamp_override": [
      "event.ingested"
    ],
    "signal.rule.threat.technique.reference": [
      "https://attack.mitre.org/techniques/T1657/",
      "https://attack.mitre.org/techniques/T1580/",
      "https://attack.mitre.org/techniques/T1530/"
    ],
    "kibana.alert.rule.execution.uuid": [
      "3041b651-9fca-4226-8bd7-3ba31d232d28"
    ],
    "kibana.alert.uuid": [
      "f71eed8c46141f9527ac1971bb4119cff762d171"
    ],
    "signal.rule.note": [
      "## Triage and analysis\n\n### InvestigatingAWS S3 Bucket Enumeration or Brute Force\n\nAWS S3 buckets can be be brute forced to cause financial impact against the resource owner. What makes this even riskier is that even private, locked down buckets can still trigger a potential cost, even with an \"Access Denied\", while also being accessible from unauthenticated, anonymous accounts. This also appears to work on several or all [operations](https://docs.aws.amazon.com/cli/latest/reference/s3api/) (GET, PUT, list-objects, etc.). Additionally, buckets are trivially discoverable by default as long as the bucket name is known, making it vulnerable to enumeration for discovery.\n\nAttackers may attempt to enumerate names until a valid bucket is discovered and then pivot to cause financial impact, enumerate for more information, or brute force in other ways to attempt to exfil data.\n\n#### Possible investigation steps\n\n- Examine the history of the operation requests from the same `source.address` and `cloud.account.id` to determine if there is other suspicious activity.\n- Review similar requests and look at the `user.agent` info to ascertain the source of the requests (though do not overly rely on this since it is controlled by the requestor).\n- Review other requests to the same `aws.s3.object.key` as well as other `aws.s3.object.key` accessed by the same `cloud.account.id` or `source.address`.\n- Investigate other alerts associated with the user account during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, or network administrator activity.\n- Examine the request parameters. These may indicate the source of the program or the nature of the task being performed when the error occurred.\n    - Check whether the error is related to unsuccessful attempts to enumerate or access objects, data, or secrets.\n- Considering the source IP address and geolocation of the user who issued the command:\n    - Do they look normal for the calling user?\n    - If the source is an EC2 IP address, is it associated with an EC2 instance in one of your accounts or is the source IP from an EC2 instance that's not under your control?\n    - If it is an authorized EC2 instance, is the activity associated with normal behavior for the instance role or roles? Are there any other alerts or signs of suspicious activity involving this instance?\n- Consider the time of day. If the user is a human (not a program or script), did the activity take place during a normal time of day?\n- Contact the account owner and confirm whether they are aware of this activity if suspicious.\n- If you suspect the account has been compromised, scope potentially compromised assets by tracking servers, services, and data accessed by the account in the last 24 hours.\n\n### False positive analysis\n\n- Verify the `source.address` and `cloud.account.id` - there are some valid operations from within AWS directly that can cause failures and false positives. Additionally, failed automation can also caeuse false positives, but should be identifiable by reviewing the `source.address` and `cloud.account.id`.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Disable or limit the account during the investigation and response.\n- Identify the possible impact of the incident and prioritize accordingly; the following actions can help you gain context:\n    - Identify the account role in the cloud environment.\n    - Assess the criticality of affected services and servers.\n    - Work with your IT team to identify and minimize the impact on users.\n    - Identify if the attacker is moving laterally and compromising other accounts, servers, or services.\n    - Identify any regulatory or legal ramifications related to this activity.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords or delete API keys as needed to revoke the attacker's access to the environment. Work with your IT teams to minimize the impact on business operations during these actions.\n- Check if unauthorized new users were created, remove unauthorized new accounts, and request password resets for other IAM users.\n- Consider enabling multi-factor authentication for users.\n- Review the permissions assigned to the implicated user to ensure that the least privilege principle is being followed.\n- Implement security best practices [outlined](https://aws.amazon.com/premiumsupport/knowledge-center/security-best-practices/) by AWS.\n- Take the actions needed to return affected systems, data, or services to their normal operational levels.\n- Identify the initial vector abused by the attacker and take action to prevent reinfection via the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n"
    ],
    "kibana.alert.rule.meta.kibana_siem_app_url": [
      ""
    ],
    "kibana.version": [
      "8.13.2"
    ],
    "signal.rule.threat.technique.name": [
      "Financial Theft",
      "Cloud Infrastructure Discovery",
      "Data from Cloud Storage"
    ],
    "signal.rule.license": [
      "Elastic License v2"
    ],
    "signal.ancestors.type": [
      "event"
    ],
    "kibana.alert.rule.rule_id": [
      "cb13546e-02b3-45d0-9387-5e0ec52dda7f"
    ],
    "signal.rule.type": [
      "esql"
    ],
    "failed_requests": [
      66
    ],
    "kibana.alert.ancestors.id": [
      ""
    ],
    "kibana.alert.url": [
      "REDACTED"
    ],
    "kibana.alert.rule.description": [
      "Identifies a high number of failed S3 operations from a single source and account (or anonymous account) within a short timeframe. This activity can be indicative of attempting to cause an increase in billing to an account for excessive random operations, cause resource exhaustion, or enumerating bucket names for discovery."
    ],
    "kibana.alert.rule.producer": [
      "siem"
    ],
    "kibana.alert.rule.to": [
      "now"
    ],
    "signal.rule.created_by": [
      "jibarra"
    ],
    "signal.rule.interval": [
      "10m"
    ],
    "kibana.alert.rule.created_by": [
      "jibarra"
    ],
    "kibana.alert.rule.timestamp_override": [
      "event.ingested"
    ],
    "signal.rule.id": [
      "54040915-f9f3-4db3-86fe-6cec81fd985a"
    ],
    "signal.reason": [
      "event created low alert AWS S3 Bucket Enumeration or Brute Force."
    ],
    "signal.rule.risk_score": [
      21
    ],
    "kibana.alert.rule.name": [
      "AWS S3 Bucket Enumeration or Brute Force"
    ],
    "kibana.alert.rule.threat.technique.reference": [
      "https://attack.mitre.org/techniques/T1657/",
      "https://attack.mitre.org/techniques/T1580/",
      "https://attack.mitre.org/techniques/T1530/"
    ],
    "signal.status": [
      "open"
    ],
    "event.kind": [
      "signal"
    ],
    "signal.rule.created_at": [
      "2024-05-01T06:49:49.101Z"
    ],
    "signal.rule.tags": [
      "Domain: Cloud",
      "Data Source: AWS",
      "Data Source: Amazon Web Services",
      "Resources: Investigation Guide",
      "Use Case: Log Auditing",
      "Tactic: Impact"
    ],
    "kibana.alert.workflow_status": [
      "open"
    ],
    "kibana.alert.rule.threat.tactic.name": [
      "Impact",
      "Discovery",
      "Collection"
    ],
    "kibana.alert.rule.uuid": [
      "54040915-f9f3-4db3-86fe-6cec81fd985a"
    ],
    "kibana.alert.reason": [
      "event created low alert AWS S3 Bucket Enumeration or Brute Force V2."
    ],
    "signal.rule.threat.tactic.id": [
      "TA0040",
      "TA0007",
      "TA0009"
    ],
    "signal.ancestors.id": [
      ""
    ],
    "signal.rule.severity": [
      "low"
    ],
    "kibana.alert.ancestors.index": [
      ""
    ],
    "kibana.alert.depth": [
      1
    ],
    "kibana.alert.rule.from": [
      "now-960s"
    ],
    "kibana.alert.rule.parameters": [
      {
        "description": "Identifies a high number of failed S3 operations from a single source and account (or anonymous account) within a short timeframe. This activity can be indicative of attempting to cause an increase in billing to an account for excessive random operations, cause resource exhaustion, or enumerating bucket names for discovery.",
        "risk_score": 21,
        "severity": "low",
        "note": "## Triage and analysis\n\n### InvestigatingAWS S3 Bucket Enumeration or Brute Force\n\nAWS S3 buckets can be be brute forced to cause financial impact against the resource owner. What makes this even riskier is that even private, locked down buckets can still trigger a potential cost, even with an \"Access Denied\", while also being accessible from unauthenticated, anonymous accounts. This also appears to work on several or all [operations](https://docs.aws.amazon.com/cli/latest/reference/s3api/) (GET, PUT, list-objects, etc.). Additionally, buckets are trivially discoverable by default as long as the bucket name is known, making it vulnerable to enumeration for discovery.\n\nAttackers may attempt to enumerate names until a valid bucket is discovered and then pivot to cause financial impact, enumerate for more information, or brute force in other ways to attempt to exfil data.\n\n#### Possible investigation steps\n\n- Examine the history of the operation requests from the same `source.address` and `cloud.account.id` to determine if there is other suspicious activity.\n- Review similar requests and look at the `user.agent` info to ascertain the source of the requests (though do not overly rely on this since it is controlled by the requestor).\n- Review other requests to the same `aws.s3.object.key` as well as other `aws.s3.object.key` accessed by the same `cloud.account.id` or `source.address`.\n- Investigate other alerts associated with the user account during the past 48 hours.\n- Validate the activity is not related to planned patches, updates, or network administrator activity.\n- Examine the request parameters. These may indicate the source of the program or the nature of the task being performed when the error occurred.\n    - Check whether the error is related to unsuccessful attempts to enumerate or access objects, data, or secrets.\n- Considering the source IP address and geolocation of the user who issued the command:\n    - Do they look normal for the calling user?\n    - If the source is an EC2 IP address, is it associated with an EC2 instance in one of your accounts or is the source IP from an EC2 instance that's not under your control?\n    - If it is an authorized EC2 instance, is the activity associated with normal behavior for the instance role or roles? Are there any other alerts or signs of suspicious activity involving this instance?\n- Consider the time of day. If the user is a human (not a program or script), did the activity take place during a normal time of day?\n- Contact the account owner and confirm whether they are aware of this activity if suspicious.\n- If you suspect the account has been compromised, scope potentially compromised assets by tracking servers, services, and data accessed by the account in the last 24 hours.\n\n### False positive analysis\n\n- Verify the `source.address` and `cloud.account.id` - there are some valid operations from within AWS directly that can cause failures and false positives. Additionally, failed automation can also caeuse false positives, but should be identifiable by reviewing the `source.address` and `cloud.account.id`.\n\n### Response and remediation\n\n- Initiate the incident response process based on the outcome of the triage.\n- Disable or limit the account during the investigation and response.\n- Identify the possible impact of the incident and prioritize accordingly; the following actions can help you gain context:\n    - Identify the account role in the cloud environment.\n    - Assess the criticality of affected services and servers.\n    - Work with your IT team to identify and minimize the impact on users.\n    - Identify if the attacker is moving laterally and compromising other accounts, servers, or services.\n    - Identify any regulatory or legal ramifications related to this activity.\n- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords or delete API keys as needed to revoke the attacker's access to the environment. Work with your IT teams to minimize the impact on business operations during these actions.\n- Check if unauthorized new users were created, remove unauthorized new accounts, and request password resets for other IAM users.\n- Consider enabling multi-factor authentication for users.\n- Review the permissions assigned to the implicated user to ensure that the least privilege principle is being followed.\n- Implement security best practices [outlined](https://aws.amazon.com/premiumsupport/knowledge-center/security-best-practices/) by AWS.\n- Take the actions needed to return affected systems, data, or services to their normal operational levels.\n- Identify the initial vector abused by the attacker and take action to prevent reinfection via the same vector.\n- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).\n",
        "license": "Elastic License v2",
        "meta": {
          "from": "6m",
          "kibana_siem_app_url": ""
        },
        "timestamp_override": "event.ingested",
        "timestamp_override_fallback_disabled": false,
        "author": [
          "Elastic"
        ],
        "false_positives": [
          "Known or internal account IDs or automation"
        ],
        "from": "now-960s",
        "rule_id": "cb13546e-02b3-45d0-9387-5e0ec52dda7f",
        "max_signals": 100,
        "risk_score_mapping": [],
        "severity_mapping": [],
        "threat": [
          {
            "framework": "MITRE ATT&CK",
            "tactic": {
              "id": "TA0040",
              "name": "Impact",
              "reference": "https://attack.mitre.org/tactics/TA0040/"
            },
            "technique": [
              {
                "id": "T1657",
                "name": "Financial Theft",
                "reference": "https://attack.mitre.org/techniques/T1657/",
                "subtechnique": []
              }
            ]
          },
          {
            "framework": "MITRE ATT&CK",
            "tactic": {
              "id": "TA0007",
              "name": "Discovery",
              "reference": "https://attack.mitre.org/tactics/TA0007/"
            },
            "technique": [
              {
                "id": "T1580",
                "name": "Cloud Infrastructure Discovery",
                "reference": "https://attack.mitre.org/techniques/T1580/",
                "subtechnique": []
              }
            ]
          },
          {
            "framework": "MITRE ATT&CK",
            "tactic": {
              "id": "TA0009",
              "name": "Collection",
              "reference": "https://attack.mitre.org/tactics/TA0009/"
            },
            "technique": [
              {
                "id": "T1530",
                "name": "Data from Cloud Storage",
                "reference": "https://attack.mitre.org/techniques/T1530/",
                "subtechnique": []
              }
            ]
          }
        ],
        "to": "now",
        "references": [
          "https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1",
          "https://docs.aws.amazon.com/cli/latest/reference/s3api/"
        ],
        "version": 1,
        "exceptions_list": [],
        "immutable": false,
        "related_integrations": [],
        "required_fields": [],
        "setup": "",
        "type": "esql",
        "language": "esql",
        "query": "from logs-aws.cloudtrail*\n| where event.provider == \"s3.amazonaws.com\" and aws.cloudtrail.error_code == \"AccessDenied\"\n| stats failed_requests = count(*) by aws.s3.bucket.name, source.address, cloud.account.id\n  // can modify the failed request count or tweak time window to fit environment\n  // can add `not cloud.account.id in (KNOWN)` or specify in exceptions\n| where failed_requests > 40\n"
      }
    ],
    "kibana.alert.rule.revision": [
      1
    ],
    "kibana.alert.rule.threat.tactic.id": [
      "TA0040",
      "TA0007",
      "TA0009"
    ],
    "signal.rule.version": [
      "1"
    ],
    "kibana.alert.rule.threat.technique.name": [
      "Financial Theft",
      "Cloud Infrastructure Discovery",
      "Data from Cloud Storage"
    ],
    "kibana.alert.status": [
      "active"
    ],
    "kibana.alert.last_detected": [
      "2024-05-01T06:59:53.776Z"
    ],
    "signal.rule.false_positives": [
      "Known or internal account IDs or automation"
    ],
    "signal.depth": [
      1
    ],
    "source.address": [
      "XX.XX.XX.XX"
    ],
    "signal.rule.immutable": [
      "false"
    ],
    "kibana.alert.rule.rule_type_id": [
      "siem.esqlRule"
    ],
    "signal.rule.name": [
      "AWS S3 Bucket Enumeration or Brute Force"
    ],
    "signal.rule.rule_id": [
      "cb13546e-02b3-45d0-9387-5e0ec52dda7f"
    ],
    "signal.rule.threat.tactic.reference": [
      "https://attack.mitre.org/tactics/TA0040/",
      "https://attack.mitre.org/tactics/TA0007/",
      "https://attack.mitre.org/tactics/TA0009/"
    ],
    "kibana.alert.rule.license": [
      "Elastic License v2"
    ],
    "signal.rule.threat.tactic.name": [
      "Impact",
      "Discovery",
      "Collection"
    ],
    "kibana.alert.rule.threat.framework": [
      "MITRE ATT&CK",
      "MITRE ATT&CK",
      "MITRE ATT&CK"
    ],
    "kibana.alert.rule.updated_at": [
      "2024-05-01T06:54:15.033Z"
    ],
    "signal.rule.description": [
      "Identifies a high number of failed S3 operations from a single source and account (or anonymous account) within a short timeframe. This activity can be indicative of attempting to cause an increase in billing to an account for excessive random operations, cause resource exhaustion, or enumerating bucket names for discovery."
    ],
    "kibana.alert.rule.author": [
      "Elastic"
    ],
    "kibana.alert.rule.threat.tactic.reference": [
      "https://attack.mitre.org/tactics/TA0040/",
      "https://attack.mitre.org/tactics/TA0007/",
      "https://attack.mitre.org/tactics/TA0009/"
    ],
    "kibana.alert.rule.created_at": [
      "2024-05-01T06:49:49.101Z"
    ],
    "signal.rule.to": [
      "now"
    ],
    "kibana.space_ids": [
      "default"
    ],
    "kibana.alert.rule.meta.from": [
      "6m"
    ]
  }

@brokensound77 brokensound77 added Rule: New Proposal for new rule esql ES|QL labels May 1, 2024
@botelastic botelastic bot added Domain: Cloud Integration: AWS AWS related rules python Internal python for the repository labels May 1, 2024
detection_rules/rule.py Outdated Show resolved Hide resolved
Copy link
Contributor

@Aegrah Aegrah left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice complete rule with IG. Just curious about the type of alert it generates, as the ES|QL rule type is rather new. Any chance you have a json document for that?

detection_rules/rule.py Outdated Show resolved Hide resolved
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
@brokensound77 brokensound77 removed the request for review from w0rk3r May 1, 2024 19:30
Copy link
Contributor

@Mikaayenson Mikaayenson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Copy link
Contributor

@terrancedejesus terrancedejesus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for answering my questions. I think this is good to ship!

@brokensound77 brokensound77 merged commit 54ff270 into elastic:main May 1, 2024
14 checks passed
protectionsmachine pushed a commit that referenced this pull request May 1, 2024
* [New Rule] AWS S3 Bucket Enumeration or Brute Force
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
---------

Co-authored-by: brokensound77 <brokensound77@users.noreply.github.com>
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>

(cherry picked from commit 54ff270)
protectionsmachine pushed a commit that referenced this pull request May 1, 2024
* [New Rule] AWS S3 Bucket Enumeration or Brute Force
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
---------

Co-authored-by: brokensound77 <brokensound77@users.noreply.github.com>
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>

(cherry picked from commit 54ff270)
protectionsmachine pushed a commit that referenced this pull request May 1, 2024
* [New Rule] AWS S3 Bucket Enumeration or Brute Force
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
---------

Co-authored-by: brokensound77 <brokensound77@users.noreply.github.com>
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>

(cherry picked from commit 54ff270)
protectionsmachine pushed a commit that referenced this pull request May 1, 2024
* [New Rule] AWS S3 Bucket Enumeration or Brute Force
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
---------

Co-authored-by: brokensound77 <brokensound77@users.noreply.github.com>
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>

(cherry picked from commit 54ff270)
protectionsmachine pushed a commit that referenced this pull request May 1, 2024
* [New Rule] AWS S3 Bucket Enumeration or Brute Force
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
---------

Co-authored-by: brokensound77 <brokensound77@users.noreply.github.com>
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>

(cherry picked from commit 54ff270)
protectionsmachine pushed a commit that referenced this pull request May 1, 2024
* [New Rule] AWS S3 Bucket Enumeration or Brute Force
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
---------

Co-authored-by: brokensound77 <brokensound77@users.noreply.github.com>
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>

(cherry picked from commit 54ff270)
protectionsmachine pushed a commit that referenced this pull request May 1, 2024
* [New Rule] AWS S3 Bucket Enumeration or Brute Force
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
---------

Co-authored-by: brokensound77 <brokensound77@users.noreply.github.com>
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>

(cherry picked from commit 54ff270)
protectionsmachine pushed a commit that referenced this pull request May 1, 2024
* [New Rule] AWS S3 Bucket Enumeration or Brute Force
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
---------

Co-authored-by: brokensound77 <brokensound77@users.noreply.github.com>
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>

(cherry picked from commit 54ff270)
protectionsmachine pushed a commit that referenced this pull request May 1, 2024
* [New Rule] AWS S3 Bucket Enumeration or Brute Force
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
---------

Co-authored-by: brokensound77 <brokensound77@users.noreply.github.com>
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>

(cherry picked from commit 54ff270)
protectionsmachine pushed a commit that referenced this pull request May 1, 2024
* [New Rule] AWS S3 Bucket Enumeration or Brute Force
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
---------

Co-authored-by: brokensound77 <brokensound77@users.noreply.github.com>
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>

(cherry picked from commit 54ff270)
protectionsmachine pushed a commit that referenced this pull request May 1, 2024
* [New Rule] AWS S3 Bucket Enumeration or Brute Force
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>
---------

Co-authored-by: brokensound77 <brokensound77@users.noreply.github.com>
Co-authored-by: Ruben Groenewoud <78494512+Aegrah@users.noreply.github.com>

(cherry picked from commit 54ff270)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport: auto Domain: Cloud esql ES|QL Integration: AWS AWS related rules python Internal python for the repository Rule: New Proposal for new rule
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants