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는 지역별 서비스입니다.

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

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

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

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

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

  • 고객 관리 CMK: 유연성, 회전, 구성 가능한 접근 및 키 정책. 키를 활성화 및 비활성화할 수 있습니다.

키 관리 서비스(KMS)에서의 봉투 암호화: 데이터 키로 데이터를 암호화한 다음 마스터 키로 데이터 키를 암호화하는 2단계 계층 시스템입니다.

키 정책

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

기본적으로:

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

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

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

  • 키 정책 외에도 KMS 키에 대한 접근을 허용하기 위해 IAM 정책을 사용할 수 있도록 계정에 허용합니다.

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

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

기본 정책 예:

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

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

정책 세부정보

정책의 속성:

  • JSON 기반 문서

  • 리소스 --> 영향을 받는 리소스 ("*"일 수 있음)

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

  • 효과 --> 허용/거부

  • 주체 --> 영향을 받는 arn

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

부여:

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

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

접근:

  • 키 정책을 통해 -- 이 정책이 존재하면 IAM 정책보다 우선합니다.

  • IAM 정책을 통해

  • 부여를 통해

키 관리자

기본적으로 키 관리자:

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

  • IAM 사용자와 역할만 키 관리자 목록에 추가할 수 있습니다 (그룹은 불가능).

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

CMK 회전

  • 동일한 키가 오랫동안 유지될수록 해당 키로 암호화되는 데이터가 많아지고, 그 키가 침해되면 데이터의 폭발 범위가 더 넓어집니다. 또한 키가 활성 상태로 유지될수록 침해될 확률이 증가합니다.

  • KMS는 고객 키를 매 365일마다 회전합니다 (원하는 경우 수동으로 프로세스를 수행할 수 있음) 및 AWS가 관리하는 키는 매 3년마다 회전하며 이때는 변경할 수 없습니다.

  • 오래된 키는 회전 이전에 암호화된 데이터를 복호화하기 위해 보존됩니다.

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

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

수동 회전

  • 새 CMK를 생성해야 하며, 그 후 새 CMK-ID가 생성되므로 응용 프로그램업데이트하여 새 CMK-ID를 참조해야 합니다.

  • 이 프로세스를 쉽게 하기 위해 키-ID를 참조하기 위해 별칭을 사용할 수 있으며, 그런 다음 별칭이 참조하는 키를 업데이트하면 됩니다.

  • 구형 키를 보존하여 이를 사용하여 암호화된 이전 파일을 복호화해야 합니다.

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

기타 관련 KMS 정보

KMS는 모든 서비스에서 수신한 암호화/복호화 요청 수에 따라 가격이 책정됩니다.

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

KMS 정책을 사용하여 다음을 수행할 수 있습니다:

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

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

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

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

열거

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

Privesc

Post Exploitation

Persistence

References

HackTricks 지원하기

Last updated