Best practices for securing an AWS environment have been well-documented and generally accepted, such as in 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 IAM security controls related to networking. Based on the analysis, we will highlight two opportunities to improve security by making these networking changes:
- Use More Secure Remote Access: Replace security groups that allow inbound Internet access to remote admin ports with more secure methods to remotely administer EC2 instances. 4% of the security groups in use allow inbound Internet access for SSH or RDP.
- Do Not Use Default Security Groups: Ensure that default security groups do not allow any traffic and are not used. 609 default security groups (1% of all security groups) are being used and allow traffic of some kind.
These three technical controls relating to network security were analyzed against 16,059 network ACLs and 59,361 security groups in 1,143 accounts:
|No NACLs allow ingress from 0.0.0.0/0 to remote admin ports
|No SGs allow ingress from 0.0.0.0/0 to remote admin ports
|Default SGs should restrict all traffic
Background: NACLs apply to a particular subnet of a VPC and can be used in combination with security groups to control access to resources within the VPC. They allow all traffic in and out of the VPC by default, are stateless, and specify both allow and deny rules. One can implement defense-in-depth by using both NACLs and security groups.
Data: 15,778 (98%) out of the 16,059 NACLs across 92% of the accounts in this dataset allow Internet access from the Internet to either SSH or RDP.
Analysis: In this dataset, NACLs are not commonly used for filtering inbound internet traffic since almost all NACLs (15,778 or 98%) are configured to allow inbound traffic to SSH or RDP, while a much smaller number of security groups actually allow that same traffic through (2,380 or 4%). If organizations in this dataset are using NACLs for layered defense, then almost all of the NACLs NACLs should implement deny ACLs for inbound Internet traffic to ports 22 and 3389. On the other hand, if NACLs are not being used, then the next two controls regarding Security Groups should be the focus.
If NACLs are used, then regular and automated checks on NACL rules should be done in order to prevent misconfigured NACLs that allow too much traffic in or out of VPCs.NACLs can be inspected manually in the AWS Console or via the CLI:
aws ec2 describe-network-acls
Network ACLs can be set in the Console via CLI:
aws ec2 create-network-acl
aws ec2 create-network-acl-entry
2. Security Groups
Background: Security groups are used to control granular access to instances within a VPC. Best practices are to not allow inbound access to remote administration ports like SSH or RDP.
Data: 2,380 security groups in use allow inbound traffic to port 22 (SSH) or 3389 (RDP).Analysis: When looking at all security groups, 6,527 (11%) allow inbound Internet traffic to SSH or RDP ports. This occurs in about half (48%) of the accounts. The breakdown of the 6,527 security groups into attached vs. unattached is:
Analysis: When looking at all security groups, 6,527 (11%) allow inbound Internet traffic to SSH or RDP ports. This occurs in about half (48%) of the accounts. The breakdown of the 6,527 security groups into attached vs. unattached is:
|Security Groups allowing ingress from 0.0.0.0/0 to remote admin ports
|ports 22 or 3389
|not in use
From a remediation perspective, unattached security groups may not be as critical as attached ones as they are unused. However, unused objects of any kind should be reviewed and removed, as they can accidentally be used in the future or may waste time with maintenance and upkeep.
Allowing direct SSH or RDP access to a VPC via a security group is not the most secure way to do remote administration. The drawbacks of this approach include protocol attacks such as SSH multiplexing attacks, exposure of additional ports to the internet, lack of centralized logging, and lack of IAM authentication/access control. This is discussed in detail in: Leaving Bastion Hosts Behind Part 2: AWS.
- Regular, automated checks should be implemented to ensure security groups do not allow inbound Internet traffic to remote administration ports.
- The security groups for an EC2 instance can be checked in the Console or with the CLI:
aws ec2 describe-security-groups
- AWS Config has two rules to detect security groups that allow either SSH or common ports such as RDP.
- Instead of exposing ports to inbound Internet traffic, use better solutions for private access to EC2 instances for remote administration. Alternatives include AWS Session Manager or products such as Netskope Private Access.
3. Default Security Groups
Background: There are two best practices related to default security groups.
- Default security groups should not allow any traffic inbound or outbound
By default, all traffic to/from EC2 instances should be prevented, which forces conscious decisions to be made for which traffic is allowed. Since default security groups don’t allow any traffic, the corollary to this is: do not modify default security groups. It can only lead to confusion and errors.
- Don’t use default security groups
Instead of using and modifying default security groups, create new, customized ones for your EC2 instances, which practices a principle of conscious, explicit policies rather than implicit, default policies.
Data: In this dataset, 609 default security groups in use allow traffic, which is 1% of all security groups.
Analysis: We will break down the default 10,307 default security groups to identify which are attached to a network interface (and being used) or not, since both sets are worth looking at for security reasons.
|Default security groups allowing traffic inbound or outbound
|Have at least 1 inbound or 1 outbound rule
|not in use
Attached default security groups should be remediated immediately by replacing them with customized security groups.
Unattached or unused security groups of any kind should also be reviewed. Best practices guidance is to remove all rules from default security groups and ensure they are not attached to any resources.
- Regular and automated checks should be implemented to detect default security group usage, and these should be replaced with custom security groups instead.
- The AWS Console and CLI can be used to audit security groups:
aws ec2 describe-security-groups
- Default security groups are named “default” and all attached default security groups should be reviewed.
- AWS Config also has a rule to detect if the default security group allows traffic.
- Ensure that the EC2 provisioning process uses or creates custom security groups and attaches that to a new EC2 instance.
The CIS Foundation Benchmark for AWS provides specific guidance on auditing and remediating your configurations in these areas. There are some basic measures that can be done to address some of the common risk areas due to storage or network configuration in your AWS environment:
- Secure Remote Admin: Instead of remotely administering and accessing compute instances by opening up security groups, use more secure methods to remotely administer EC2 instances such as AWS Session Manager or Netskope Private Access.
- Do Not Use Default Security Groups: Do not use default security groups.
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 1,143 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.