mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-unauthenticated-e
This commit is contained in:
+45
-40
@@ -1,74 +1,74 @@
|
||||
# AWS - Relational Database (RDS) Enum
|
||||
# AWS - Relational Database (RDS) 열거
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## 기본 정보
|
||||
|
||||
AWS에서 제공하는 **Relational Database Service (RDS)**는 **클라우드에서 관계형 데이터베이스**의 배포, 운영 및 확장을 간소화하도록 설계되었습니다. 이 서비스는 하드웨어 프로비저닝, 데이터베이스 구성, 패치 및 백업과 같은 노동 집약적인 작업을 자동화하면서 비용 효율성과 확장성의 이점을 제공합니다.
|
||||
AWS에서 제공하는 **Relational Database Service (RDS)**는 **클라우드에서의 관계형 데이터베이스** 배포, 운영 및 확장을 간소화하도록 설계되었습니다. 이 서비스는 비용 효율성과 확장성의 이점을 제공하면서 하드웨어 프로비저닝, 데이터베이스 구성, 패치 및 백업과 같은 수작업이 많은 작업을 자동화합니다.
|
||||
|
||||
AWS RDS는 MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server 및 Amazon Aurora를 포함한 다양한 널리 사용되는 관계형 데이터베이스 엔진을 지원하며, MySQL 및 PostgreSQL과의 호환성을 제공합니다.
|
||||
AWS RDS는 MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server, Amazon Aurora 등 다양한 널리 사용되는 관계형 데이터베이스 엔진을 지원하며 MySQL 및 PostgreSQL과의 호환성을 제공합니다.
|
||||
|
||||
RDS의 주요 기능은 다음과 같습니다:
|
||||
|
||||
- **데이터베이스 인스턴스 관리**가 간소화됩니다.
|
||||
- 읽기 성능을 향상시키기 위한 **읽기 복제본** 생성.
|
||||
- 높은 가용성과 장애 조치 메커니즘을 보장하기 위한 **다중 가용 영역(AZ) 배포** 구성.
|
||||
- 다음과 같은 다른 AWS 서비스와의 **통합**:
|
||||
- 강력한 액세스 제어를 위한 AWS Identity and Access Management (**IAM**).
|
||||
- 포괄적인 모니터링 및 메트릭을 위한 AWS **CloudWatch**.
|
||||
- KMS 키로 암호화된 상태에서 보안을 보장하는 AWS Key Management Service (**KMS**).
|
||||
- **읽기 복제본(read replicas)** 생성을 통해 읽기 성능을 향상시킬 수 있습니다.
|
||||
- **multi-Availability Zone (AZ) deployments** 구성으로 고가용성과 장애 조치 메커니즘을 보장합니다.
|
||||
- **다음과 같은 AWS 서비스와의 통합**:
|
||||
- AWS Identity and Access Management (**IAM**)를 통한 강력한 액세스 제어.
|
||||
- AWS **CloudWatch**를 통한 포괄적인 모니터링 및 메트릭.
|
||||
- AWS Key Management Service (**KMS**)를 통한 저장 암호화 관리.
|
||||
|
||||
## 자격 증명
|
||||
|
||||
DB 클러스터를 생성할 때 마스터 **사용자 이름**을 구성할 수 있습니다 (**기본값은 `admin`**). 이 사용자의 비밀번호를 생성하려면 다음을 수행할 수 있습니다:
|
||||
DB 클러스터를 생성할 때 마스터 **username**은 구성할 수 있으며 (기본값은 **`admin`**) 이 사용자 비밀번호를 생성하는 방법은 다음과 같습니다:
|
||||
|
||||
- **비밀번호**를 직접 **지정**합니다.
|
||||
- RDS에 **자동 생성**하도록 지시합니다.
|
||||
- RDS에 **AWS Secret Manager**에서 KMS 키로 암호화하여 관리하도록 지시합니다.
|
||||
- **직접 비밀번호를 지정**합니다.
|
||||
- RDS에게 **자동 생성**하도록 요청합니다.
|
||||
- RDS가 **AWS Secret Manager**에서 KMS 키로 암호화하여 관리하도록 합니다.
|
||||
|
||||
<figure><img src="../../../images/image (144).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 인증
|
||||
|
||||
3가지 유형의 인증 옵션이 있지만 **마스터 비밀번호 사용은 항상 허용됩니다**:
|
||||
인증 옵션은 3가지가 있으며, **마스터 암호는 항상 허용됩니다**:
|
||||
|
||||
<figure><img src="../../../images/image (227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 공용 액세스 및 VPC
|
||||
### 퍼블릭 액세스 및 VPC
|
||||
|
||||
기본적으로 데이터베이스에 **공용 액세스가 허용되지 않습니다**, 그러나 **허용될 수 있습니다**. 따라서 기본적으로 선택된 **보안 그룹**(EC2 SG에 저장됨)이 허용하는 경우에만 동일한 VPC의 머신만 액세스할 수 있습니다.
|
||||
기본적으로 데이터베이스에는 **퍼블릭 액세스가 허용되지 않습니다**, 그러나 **허용될 수 있습니다**. 따라서 기본적으로 선택한 **security group**(EC2 SG에 저장됨)이 허용하는 경우에만 동일한 VPC의 머신들만 접근할 수 있습니다.
|
||||
|
||||
DB 인스턴스를 노출하는 대신 **RDS Proxy**를 생성하여 DB 클러스터의 **확장성** 및 **가용성**을 **향상**시킬 수 있습니다.
|
||||
DB 인스턴스를 노출하는 대신 DB 클러스터의 **scalability**와 **availability**를 **향상시키는** **RDS Proxy**를 생성할 수 있습니다.
|
||||
|
||||
또한 **데이터베이스 포트도 수정할 수 있습니다**.
|
||||
또한 데이터베이스 포트는 **수정 가능**합니다.
|
||||
|
||||
### 암호화
|
||||
|
||||
**암호화는 기본적으로 활성화되어 있습니다** AWS 관리 키를 사용하여 (대신 CMK를 선택할 수 있습니다).
|
||||
**암호화는 기본적으로 활성화되어 있으며** AWS 관리형 키를 사용합니다(대신 CMK를 선택할 수 있음).
|
||||
|
||||
암호화를 활성화하면 **저장소, 스냅샷, 읽기 복제본 및 백업에 대한 암호화가 활성화됩니다**. 이 암호화를 관리하기 위한 키는 **KMS**를 사용하여 발급할 수 있습니다.\
|
||||
데이터베이스가 생성된 후에는 이 수준의 암호화를 추가할 수 없습니다. **생성 중에 수행해야 합니다**.
|
||||
암호화를 활성화하면 저장소, 스냅샷, 읽기 복제본 및 백업에 대해 **저장 시 암호화(encryption at rest)**가 적용됩니다. 이 암호화를 관리하는 키는 **KMS**를 사용하여 발급할 수 있습니다.\
|
||||
데이터베이스가 생성된 후에는 이 수준의 암호화를 추가할 수 없습니다. **생성 단계에서 설정해야 합니다**.
|
||||
|
||||
그러나 **암호화되지 않은 데이터베이스를 암호화할 수 있는 우회 방법이 있습니다**. 암호화되지 않은 데이터베이스의 스냅샷을 생성하고, 해당 스냅샷의 암호화된 복사본을 생성한 다음, 그 암호화된 스냅샷을 사용하여 새 데이터베이스를 생성하면, 최종적으로 데이터베이스가 암호화됩니다.
|
||||
하지만 **암호화되지 않은 데이터베이스를 암호화하는 우회 방법**이 있습니다. 암호화되지 않은 데이터베이스의 스냅샷을 생성한 다음, 해당 스냅샷의 암호화된 복사본을 생성하고, 그 암호화된 스냅샷을 사용해 새 데이터베이스를 생성하면 최종적으로 데이터베이스가 암호화된 상태가 됩니다.
|
||||
|
||||
#### 투명 데이터 암호화 (TDE)
|
||||
#### Transparent Data Encryption (TDE)
|
||||
|
||||
RDS의 애플리케이션 수준의 암호화 기능과 함께, RDS는 데이터가 저장된 상태에서 보호하기 위한 **추가 플랫폼 수준의 암호화 메커니즘**도 지원합니다. 여기에는 Oracle 및 SQL Server에 대한 **투명 데이터 암호화 (TDE)**가 포함됩니다. 그러나 TDE가 데이터를 저장된 상태에서 암호화하여 보안을 강화하지만, **데이터베이스 성능에 영향을 미칠 수 있습니다**. 이 성능 영향은 MySQL 암호화 기능이나 Microsoft Transact-SQL 암호화 기능과 함께 사용할 때 특히 두드러집니다.
|
||||
RDS의 애플리케이션 수준 암호화 기능 외에도 플랫폼 수준에서 데이터를 보호하기 위한 **추가 암호화 메커니즘**을 지원합니다. 여기에는 Oracle 및 SQL Server용 **Transparent Data Encryption (TDE)**가 포함됩니다. 그러나 TDE는 저장 중인 데이터를 암호화하여 보안을 강화하는 반면, **데이터베이스 성능에 영향을 미칠 수 있다는 점**을 유의해야 합니다. 이 성능 영향은 특히 MySQL 암호화 함수 또는 Microsoft Transact-SQL 암호화 함수와 함께 사용할 때 더 두드러집니다.
|
||||
|
||||
TDE를 사용하려면 몇 가지 사전 단계가 필요합니다:
|
||||
TDE를 사용하려면 다음과 같은 사전 단계가 필요합니다:
|
||||
|
||||
1. **옵션 그룹 연결**:
|
||||
- 데이터베이스는 옵션 그룹과 연결되어야 합니다. 옵션 그룹은 설정 및 기능을 위한 컨테이너 역할을 하여 보안 향상을 포함한 데이터베이스 관리를 용이하게 합니다.
|
||||
- 그러나 옵션 그룹은 특정 데이터베이스 엔진 및 버전에서만 사용할 수 있다는 점에 유의해야 합니다.
|
||||
1. **옵션 그룹 연관(Option Group Association)**:
|
||||
- 데이터베이스는 옵션 그룹과 연관되어야 합니다. 옵션 그룹은 설정 및 기능을 담는 컨테이너 역할을 하며 데이터베이스 관리 및 보안 향상을 돕습니다.
|
||||
- 다만 옵션 그룹은 특정 데이터베이스 엔진 및 버전에만 제공된다는 점을 유의해야 합니다.
|
||||
2. **옵션 그룹에 TDE 포함**:
|
||||
- 옵션 그룹과 연결된 후, Oracle 투명 데이터 암호화 옵션을 해당 그룹에 포함해야 합니다.
|
||||
- TDE 옵션이 옵션 그룹에 추가되면 영구적인 요소가 되며 제거할 수 없다는 점을 인식하는 것이 중요합니다.
|
||||
- 옵션 그룹과 연관한 후 Oracle Transparent Data Encryption 옵션을 해당 그룹에 포함해야 합니다.
|
||||
- TDE 옵션이 옵션 그룹에 추가되면 영구적으로 남게 되며 제거할 수 없다는 점을 인지해야 합니다.
|
||||
3. **TDE 암호화 모드**:
|
||||
- TDE는 두 가지 고유한 암호화 모드를 제공합니다:
|
||||
- **TDE 테이블스페이스 암호화**: 이 모드는 전체 테이블을 암호화하여 데이터 보호의 범위를 넓힙니다.
|
||||
- **TDE 열 암호화**: 이 모드는 데이터베이스 내의 특정 개별 요소를 암호화하는 데 중점을 두어 어떤 데이터를 암호화할지에 대한 보다 세밀한 제어를 허용합니다.
|
||||
- TDE는 두 가지 암호화 모드를 제공합니다:
|
||||
- **TDE Tablespace Encryption**: 전체 테이블스페이스를 암호화하여 더 넓은 범위의 데이터 보호를 제공합니다.
|
||||
- **TDE Column Encryption**: 데이터베이스 내 특정 개별 요소를 암호화하여 보다 세분화된 제어를 허용합니다.
|
||||
|
||||
이러한 전제 조건과 TDE의 운영 복잡성을 이해하는 것은 RDS 내에서 암호화를 효과적으로 구현하고 관리하여 데이터 보안과 필요한 표준 준수를 보장하는 데 중요합니다.
|
||||
이러한 전제 조건과 TDE의 운영적 세부사항을 이해하는 것은 RDS 내에서 암호화를 효과적으로 구현하고 관리하여 데이터 보안 및 규정 준수를 보장하는 데 중요합니다.
|
||||
|
||||
### 열거
|
||||
```bash
|
||||
@@ -80,6 +80,10 @@ aws rds describe-db-cluster-backtracks --db-cluster-identifier <cluster-name>
|
||||
|
||||
## Cluster snapshots
|
||||
aws rds describe-db-cluster-snapshots
|
||||
aws rds describe-db-cluster-snapshots --include-public --snapshot-type public
|
||||
|
||||
## Restore cluster snapshot as new instance
|
||||
aws rds restore-db-instance-from-db-snapshot --db-cluster-identifier <ID> --snapshot-identifier <ID>
|
||||
|
||||
# Get DB instances info
|
||||
aws rds describe-db-instances #username, url, port, vpc, SG, is public?
|
||||
@@ -91,6 +95,7 @@ aws rds describe-db-instance-automated-backups
|
||||
## Find snapshots
|
||||
aws rds describe-db-snapshots
|
||||
aws rds describe-db-snapshots --include-public --snapshot-type public
|
||||
|
||||
## Restore snapshot as new instance
|
||||
aws rds restore-db-instance-from-db-snapshot --db-instance-identifier <ID> --db-snapshot-identifier <ID> --availability-zone us-west-2a
|
||||
|
||||
@@ -105,33 +110,33 @@ aws rds describe-db-proxy-targets
|
||||
## reset credentials of MasterUsername
|
||||
aws rds modify-db-instance --db-instance-identifier <ID> --master-user-password <NewPassword> --apply-immediately
|
||||
```
|
||||
### 인증되지 않은 접근
|
||||
### 인증되지 않은 액세스
|
||||
|
||||
{{#ref}}
|
||||
../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md
|
||||
{{#endref}}
|
||||
|
||||
### 권한 상승
|
||||
### Privesc
|
||||
|
||||
{{#ref}}
|
||||
../aws-privilege-escalation/aws-rds-privesc/README.md
|
||||
{{#endref}}
|
||||
|
||||
### 포스트 익스플로잇
|
||||
### Post Exploitation
|
||||
|
||||
{{#ref}}
|
||||
../aws-post-exploitation/aws-rds-post-exploitation/README.md
|
||||
{{#endref}}
|
||||
|
||||
### 지속성
|
||||
### Persistence
|
||||
|
||||
{{#ref}}
|
||||
../aws-persistence/aws-rds-persistence/README.md
|
||||
{{#endref}}
|
||||
|
||||
### SQL 인젝션
|
||||
### SQL Injection
|
||||
|
||||
DynamoDB 데이터에 **SQL 구문**으로 접근할 수 있는 방법이 있으며, 따라서 일반적인 **SQL 인젝션도 가능합니다**.
|
||||
DynamoDB 데이터에 **SQL syntax**로 접근할 수 있는 방법이 있으므로, 일반적인 **SQL injections**도 가능합니다.
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
|
||||
|
||||
+17
-4
@@ -4,7 +4,7 @@
|
||||
|
||||
## RDS
|
||||
|
||||
자세한 정보는 다음을 확인하세요:
|
||||
자세한 내용은 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-relational-database-rds-enum.md
|
||||
@@ -12,11 +12,11 @@
|
||||
|
||||
## 공개 포트
|
||||
|
||||
인터넷에서 **데이터베이스에 대한 공개 접근**을 허용할 수 있습니다. 공격자는 데이터베이스에 접근하기 위해 여전히 **사용자명과 비밀번호를 알아야 하며,** IAM 접근 권한, 또는 **exploit**이 필요합니다.
|
||||
인터넷에서 접근 가능한 **데이터베이스**에 공개 액세스를 허용할 수 있습니다. 공격자는 여전히 데이터베이스에 접근하기 위해 **사용자 이름과 비밀번호**를 알아야 하거나, IAM 접근 권한을 보유하거나, **exploit**이 필요합니다.
|
||||
|
||||
## 공개 RDS Snapshots
|
||||
## 공개 RDS 스냅샷
|
||||
|
||||
AWS는 **누구나 RDS snapshots를 다운로드할 수 있도록 접근을 허용**할 수 있습니다. 이러한 public RDS snapshots는 자신의 계정에서 매우 쉽게 나열할 수 있습니다:
|
||||
AWS는 **누구나 RDS 스냅샷을 다운로드할 수 있도록 액세스를 부여할 수 있습니다**. 자신의 계정에서 이러한 공개 RDS 스냅샷을 아주 쉽게 나열할 수 있습니다:
|
||||
```bash
|
||||
# Public RDS snapshots
|
||||
aws rds describe-db-snapshots --include-public
|
||||
@@ -32,6 +32,19 @@ aws rds describe-db-snapshots --snapshot-type public [--region us-west-2]
|
||||
## Even if in the console appear as there are public snapshot it might be public
|
||||
## snapshots from other accounts used by the current account
|
||||
```
|
||||
## Public RDS Cluster Snapshots
|
||||
|
||||
마찬가지로, cluster snapshots를 찾아볼 수 있습니다.
|
||||
```bash
|
||||
# Public RDS cluster snapshots
|
||||
aws rds describe-db-cluster-snapshots --include-public
|
||||
|
||||
## Search by account ID
|
||||
aws rds describe-db-cluster-snapshots --include-public --query 'DBClusterSnapshots[?contains(DBClusterSnapshotIdentifier, `284546856933:`) == `true`]'
|
||||
|
||||
# From the own account you can check if there is any public cluster snapshot with:
|
||||
aws rds describe-db-cluster-snapshots --snapshot-type public [--region us-west-2]
|
||||
```
|
||||
### 공개 URL 템플릿
|
||||
```
|
||||
mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306
|
||||
|
||||
Reference in New Issue
Block a user