ブログ 脅威ラボ A Real-World Look at AWS Best Practices: Root Accounts
Apr 22 2021

A Real-World Look at AWS Best Practices: Root Accounts

Introduction

Best practices for securing an AWS environment have been well-documented and generally accepted, such as AWS’s guidance. However, organizations may still find it challenging on how to begin applying this guidance to their specific environments.

  • Which controls should be applied out-of-the-box vs. customized?
  • What pitfalls exist in implementing the various controls or checks?
  • How do you prioritize remediation of the “sea of red” violations?

In this blog series, we’ll analyze anonymized data from Netskope customers that include security settings of 650,000 entities from 1,143 AWS accounts across several hundred organizations. We’ll look at the configuration from the perspective of the best practices, see what’s commonly occurring in the real world and:

  • Discuss specific risk areas that should be prioritized
  • Identify underlying root causes and potential pitfalls
  • Focus on practical guidance for applying the Benchmark to your specific environment

This blog post focuses on the IAM security controls for root account security. Based on the Netskope dataset analyzed, we will highlight three opportunities to improve security by making simple IAM changes:

  1. Restrict root account access. In these production environments, some root accounts are being used regularly (3%).
  2. Disable or remove all root account access keys. 4% of root accounts have access keys.

Enforce hardware MFA. 8-9% of root accounts do not have MFA enabled.

Root of it all

Root, Root, go away
Come only with MFA
All the attackers want to play
Root, root, go away
— Nursery rhyme by anonymous AWS Administrator

It is a best practice to avoid using the root account for everyday use, and the prevalence of root account use and associated security issues over time are discussed in detail in The Root of your AWS Insecurities. However, there are several nuanced items worth reemphasizing. When looking at root account best practices in the 1,143 accounts in the dataset, we find:

#Best Practice# of Violations

%
1Eliminate use of the root user for administrative and daily tasks353.1
2Ensure no root user account access key exists494.3
3Ensure MFA is enabled for the root user account1119.7
4Ensure hardware MFA is enabled for the root user account948.2

1. Root Account Use

Background: The root account should not be used for everyday tasks, and should be used only for initial provisioning of an IAM administrator user or only for select tasks that can only be done by the root account.

Data: In this dataset, 35 (3.1%) of the root accounts have been used within the last 7 days prior to the date of analysis. 

Analysis: In order to discern whether there are a small number of “repeat-offender” accounts, we performed a longitudinal analysis in The Root of your AWS Insecurities and found that over 4 months, the number of unique accounts using the root account was higher at 15% of the total accounts. This shows that the problem is widespread over a relatively short time period.

The 4.8% usage from this dataset snapshot and the ongoing 15% root account usage is higher than expected and exposes the organization to large adverse impacts in case of compromise. 

Controls: 

  • Detection/Audit
    • Root account use can be detected by auditing the IAM credential report:
      $ aws iam generate-credential-report
      $ aws iam get-credential-report --query 'Content'
      --output text | base64 --decode > aws_cred_report.csv
      and looking at the password_last_used or access_key_N_last_used_date fields.
    • AWS GuardDuty will also detect root credential usage
    • Those customers with implementations of monitoring using CloudTrail, CloudWatch, or a SIEM can also directly detect events.

      As this is the root account (which should not be used for everyday tasks), the number of alerts from any of these checks should be low, and the time is well spent reviewing any use of the root account.
  • Prevention/Mitigation
    • Limited-privilege administrator accounts (IAM User admin accounts) should be created and used for most tasks. For those tasks that can only be done by root, then any “alerts” generated can still be quickly triaged as the volume should be low.
    • IAM Policies do not apply to the root user, but an SCP to restrict root access can be applied to an AWS Org. This is another good reason to manage multiple accounts using AWS Organizations if at all possible.

2. Root Access Keys

Background: For reasons similar to root account use, It is another best practice to not create any access keys for the root account. Root access keys provide another risk area for compromise, with very high adverse impact due to the root account privileges.

Data: In this dataset, we see that access keys have been created in 4.3% of the 1,143 root accounts.

Analysis: 4.3% is a high percentage of root accounts, and it greatly increases the attack surface area and the chances for compromise. 

Controls:

  • Detection/Audit
    • Active root access keys can be identified by access_key_N_active fields in the IAM credential report
    • Enabling the AWS Config rule: iam-root-access-key-check will also detect root access keys.
  • Prevention/Mitigation
    • Best practices recommend to not create access keys in the first place and utilize access keys associated with limited privilege IAM administrator accounts.

3. MFA: Root User and 4. Hardware MFA: Root User

Background: Multi-factor authentication is one of the best mitigations to credential compromise and should be enabled for the root account, preferably using a hardware key. MFA can be set in two ways: 

  • directly at the account level and 
  • via a Service Control Policy applied at the AWS Org level, which is recommended for larger, multi-account organizations since it is easier to maintain and implement a consistent policy across the AWS Organization.

Data: 111 out of the total 1143 root accounts or 9.7% of root accounts definitively do not have any MFA enabled. 

Analysis: MFA is not configured at the account level in 737 (64.5%) root accounts. When looking at hardware MFA, 868 (75.9%) root accounts–again, at the account level.

However, when analyzing MFA policies, we need to look at the effective MFA policy for root, including SCP policies. As SCP policy data was not available in this dataset, we instead will focus on standalone AWS accounts: 111 accounts did not have MFA enabled for root at the account level and are not part of an AWS Organization, and therefore do not have MFA enforced by an SCP. 

Controls:

  • Detection/Audit
    • To determine whether MFA is enabled, check the root account mfa_active field in the IAM credential report and whether an MFA policy is set in an SCP at the AWS Organization/OU/root level:
      aws organizations list-policies|describe-policies
    • Using one of the predefined AWS Config rules:  root-account-mfa-enabled or root-account-hardware-mfa-enabled will also detect whether MFA is enabled for the root account
  • Prevention/Mitigation
    • Best practices recommend hardware-level MFA be enabled for root account use. 
    • For the root account, require MFA using a Service Control Policy within an AWS Organization similar to:
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Deny",
    "Action": ["*"],
    "Resource": ["*"],
    "Condition": {
      "BoolIfExists": {
        "aws:MultiFactorAuthPresent": "false"
      },
      "StringLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::*:root"
          ]
      }
    }
  }]
 }

IP Allow Lists: In addition to the controls listed above, IP Allow Lists can further mitigate compromised credentials. Service Control Policies need to be used with AWS Organizations in order to apply this to the root account since normal IAM User policies within an account do not apply to the root account. 

To implement IP allow lists in a manageable manner, it is best to utilize VPNs or proxies so that approved traffic to AWS comes from a more static list of approved, corporate IP ranges.

Conclusion

Many best practices have been codified but many AWS environments lag behind in implementing these best practices. Remediating the issues is straightforward for many of the security settings, and there exists specific prescriptive guidance on auditing and remediating your configurations in these areas, which can result in a large reduction in risk.

Here are some basic measures that can be done to address some of the common risk areas due to IAM configuration in your AWS environment:

  1. Restrict root account access and instead create limited Administrator IAM User accounts. 
  2. Remove root account access keys. Use limited IAM User administrator accounts instead and/or limited administrator roles for more narrow administrator privileges.
  3. Protect the root account with hardware MFA.

In upcoming blogs, we’ll continue exploring other best practices and how individual organizations can apply these best practices to their specific environment.

Additionally, Netskope’s Public Cloud Security platform also can automate configuration checking of your AWS environment, implementing both compliance standards, as well as custom configuration checks.

Dataset and Methodology

Time Period: Data was sampled/analyzed from January 24, 2021. 

Source: The analysis presented in this blog post is based on anonymized usage data collected by the Netskope Security Cloud platform relating to a subset of Netskope customers with prior authorization.

Data Scope: The data included 1143 AWS accounts and several hundred organizations. The data was composed of configuration settings across tens of thousands of AWS entities including IAM users, IAM policies, password policy, buckets, databases, CloudTrail logs, compute instances, and security groups.

Logic: The analysis followed the logic of core root account security checks found in best practices regarding AWS configuration settings with a few adjustments for the dataset and methodology. Some best practices might define “recent usage” for the root account as a last logged-in time occurring within the past 24 hours to determine whether the root account has been used recently. Because this dataset comes from a point-in-time snapshot, this was changed to within the past seven days prior to the audit date.

author image
About the author
Jenko has 15+ years of experience in research, product management, and engineering in cloud security, AV/AS, routers/appliances, threat intel, Windows security, vulnerability scanning and compliance. At Netskope, he researches new cloud attacks.
Jenko has 15+ years of experience in research, product management, and engineering in cloud security, AV/AS, routers/appliances, threat intel, Windows security, vulnerability scanning and compliance. At Netskope, he researches new cloud attacks.