AWS - KMS Enum

Support HackTricks

KMS - Key Management Service

AWS Key Management Service (AWS KMS)는 사용자가 고객 마스터 키(CMK)를 생성하고 관리하는 과정을 단순화하는 관리형 서비스로 제공됩니다. 이 CMK는 사용자 데이터 암호화에 필수적입니다. AWS KMS의 주목할 만한 기능은 CMK가 주로 하드웨어 보안 모듈(HSM)에 의해 보호된다는 점으로, 암호화 키의 보호를 강화합니다.

KMS는 대칭 암호화를 사용합니다. 이는 정지된 정보(예: S3 내부)를 암호화하는 데 사용됩니다. 전송 중인 정보를 암호화하려면 TLS와 같은 것을 사용해야 합니다.

KMS는 지역별 서비스입니다.

Amazon의 관리자들은 귀하의 키에 접근할 수 없습니다. 그들은 귀하의 키를 복구할 수 없으며, 귀하의 키 암호화에 도움을 주지 않습니다. AWS는 단순히 운영 체제와 기본 애플리케이션을 관리하며, 암호화 키를 관리하고 해당 키가 사용되는 방식을 관리하는 것은 우리에게 달려 있습니다.

고객 마스터 키(CMK): 최대 4KB 크기의 데이터를 암호화할 수 있습니다. 일반적으로 DEK(데이터 암호화 키)를 생성, 암호화 및 복호화하는 데 사용됩니다. 그런 다음 DEK는 데이터를 암호화하는 데 사용됩니다.

고객 마스터 키(CMK)는 AWS KMS에서 마스터 키의 논리적 표현입니다. 마스터 키의 식별자 및 기타 메타데이터(생성 날짜, 설명 및 키 상태 포함) 외에도, CMK는 데이터를 암호화하고 복호화하는 데 사용되는 키 자료를 포함합니다. CMK를 생성할 때 기본적으로 AWS KMS는 해당 CMK에 대한 키 자료를 생성합니다. 그러나 키 자료 없이 CMK를 생성한 다음 해당 CMK에 자신의 키 자료를 가져올 수 있습니다.

마스터 키에는 두 가지 유형이 있습니다:

  • AWS 관리 CMK: 다른 서비스에서 데이터를 암호화하는 데 사용. 해당 지역에서 해당 서비스를 처음 구현할 때 생성됩니다. 3년마다 회전하며 변경할 수 없습니다.

  • 고객 관리 CMK: 유연성, 회전, 구성 가능한 접근 및 키 정책. 키 활성화 및 비활성화 가능.

Key Management Service(KMS)에서의 봉투 암호화: 데이터 키로 데이터를 암호화한 다음 마스터 키로 데이터 키를 암호화하는 이중 계층 시스템.

Key Policies

이는 KMS에서 키를 사용할 수 있고 접근할 수 있는 사람을 정의합니다.

기본적으로:

  • KMS 키를 소유한 AWS 계정에 KMS 키에 대한 전체 접근 권한을 부여합니다.

다른 AWS 리소스 정책과 달리, AWS KMS 키 정책은 계정이나 그 사용자가 자동으로 권한을 가지지 않습니다. 계정 관리자에게 권한을 부여하려면, 키 정책에 이 권한을 제공하는 명시적 문장이 포함되어야 합니다, 다음과 같은 문장처럼.

  • 계정("AWS": "arn:aws:iam::111122223333:root") IAM 권한이 작동하지 않습니다.

  • 키 정책 외에도 계정이 IAM 정책을 사용하여 KMS 키에 접근할 수 있도록 허용합니다.

이 권한이 없으면, 키에 접근할 수 있는 IAM 정책은 효과가 없지만, 키에 접근을 거부하는 IAM 정책은 여전히 효과적입니다.

  • 계정 관리자, 계정 루트 사용자에게 접근 제어 권한을 부여하여 키가 관리 불가능해질 위험을 줄입니다, 이는 삭제할 수 없습니다.

기본 정책 예:

{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:*",
"Resource": "*"
}

계정이 허용된 경우 ("arn:aws:iam::111122223333:root") 계정의 principal은 KMS 키를 사용하기 위해 IAM 권한이 여전히 필요합니다. 그러나 예를 들어 역할의 ARN키 정책에서 명시적으로 허용된 경우, 그 역할은 IAM 권한이 필요하지 않습니다.

Policy Details

정책의 속성:

  • JSON 기반 문서

  • Resource --> 영향을 받는 리소스 (예: "*")

  • Action --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ... (권한)

  • Effect --> Allow/Deny

  • Principal --> 영향을 받는 arn

  • Conditions (선택 사항) --> 권한을 부여하는 조건

Grants:

  • AWS 계정 내의 다른 AWS principal에게 권한을 위임할 수 있습니다. AWS KMS API를 사용하여 생성해야 합니다. CMK 식별자, 수혜자 principal 및 필요한 작업 수준(Decrypt, Encrypt, GenerateDataKey...)을 지정할 수 있습니다.

  • Grant가 생성된 후 GrantToken과 GrantID가 발급됩니다.

Access:

  • key policy를 통해 -- 이 정책이 존재하면 IAM 정책보다 우선합니다.

  • IAM 정책을 통해

  • grants를 통해

Key Administrators

기본 키 관리자:

  • KMS를 관리할 수 있지만 데이터를 암호화하거나 복호화할 수는 없습니다.

  • 그룹이 아닌 IAM 사용자와 역할만 키 관리자 목록에 추가할 수 있습니다.

  • 외부 CMK를 사용하는 경우, 키 관리자는 키 자료를 가져올 수 있는 권한을 가집니다.

CMKs의 회전

  • 동일한 키가 오래 유지될수록 더 많은 데이터가 해당 키로 암호화되며, 해당 키가 유출되면 더 넓은 범위의 데이터가 위험에 처하게 됩니다. 또한, 키가 활성 상태로 오래 있을수록 유출될 확률이 높아집니다.

  • KMS는 고객 키를 매 365일마다 회전하며 (또는 원할 때 수동으로 수행할 수 있습니다) AWS가 관리하는 키는 매 3년마다 회전하며 이 시간은 변경할 수 없습니다.

  • 이전 키는 유지되어 회전 이전에 암호화된 데이터를 복호화할 수 있습니다.

  • 유출된 경우, 키를 회전해도 위협이 제거되지 않으며, 유출된 키로 암호화된 모든 데이터를 복호화할 수 있습니다. 그러나 새로운 데이터는 새로운 키로 암호화됩니다.

  • CMK비활성화 또는 삭제 대기 중 상태인 경우, KMS는 CMK가 다시 활성화되거나 삭제가 취소될 때까지 키 회전을 수행하지 않습니다.

수동 회전

  • 새로운 CMK를 생성해야 하며, 새로운 CMK-ID가 생성되므로 애플리케이션새로운 CMK-ID를 참조하도록 업데이트해야 합니다.

  • 이 과정을 쉽게 하기 위해 키-ID를 참조하는 별칭을 사용하고, 별칭이 참조하는 키를 업데이트할 수 있습니다.

  • 이전 파일을 복호화하기 위해 이전 키를 유지해야 합니다.

온프레미스 키 인프라에서 키를 가져올 수 있습니다.

기타 관련 KMS 정보

KMS는 월별로 모든 서비스에서 받은 암호화/복호화 요청 수에 따라 가격이 책정됩니다.

KMS는 CloudTrail과의 완전한 감사 및 준수 통합을 제공합니다. 여기서 KMS에서 수행된 모든 변경 사항을 감사할 수 있습니다.

KMS 정책을 통해 다음을 수행할 수 있습니다:

  • 데이터 키를 생성할 수 있는 사람과 이러한 키를 사용할 수 있는 서비스를 제한

  • 시스템 접근을 암호화 전용, 복호화 전용 또는 둘 다로 제한

  • 시스템이 지역 간에 키에 접근할 수 있도록 정의 (그러나 KMS를 호스팅하는 지역의 장애가 다른 지역의 시스템 가용성에 영향을 미칠 수 있으므로 권장되지 않음)

지역 간에 키를 동기화하거나 이동/복사할 수 없으며, 지역 간 접근을 허용하는 규칙만 정의할 수 있습니다.

Enumeration

aws kms list-keys
aws kms list-key-policies --key-id <id>
aws kms list-grants --key-id <id>
aws kms describe-key --key-id <id>
aws kms get-key-policy --key-id <id> --policy-name <name> # Default policy name is "default"
aws kms describe-custom-key-stores

권한 상승

AWS - KMS Privesc

포스트 익스플로잇

AWS - KMS Post Exploitation

지속성

AWS - KMS Persistence

참고 자료

HackTricks 지원

Last updated