일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Service Mesh
- docker
- CI/CD
- deploy
- Jenkins
- sonarqube
- GitLab
- 웹 해킹
- 웹 취약점
- CD
- opentelemetry
- CI
- gitlab ci
- eks
- argocd
- gitlab cd
- Prometheus
- 크롤링
- 스크레이핑
- Monitoring
- 모의해킹
- linkerd
- Crawling
- ECR
- scraping
- Grafana
- Kubernetes
- DevOps
- Resource
- helm
- Today
- Total
ㅡ.ㅡ
[Container] PSS(Pod Security Standards) 본문
1. Privileged
가장 넓은 수준의 권한을 제공하는 정책으로 알려진 권한 상승을 허용
2. Baseline
알려진 권한 상승을 방지하는 최소 제한 정책으로 지정된 구성만을 허용
2-1. HostProcess
Windows Pod는 Windows노드에 엑세스를 가능하게하는 HostProcess 컨테이너를 실행할수 있는 기능을 기본적으로 제공하여 노드에 엑세스를 가능함
Restricted Fields
- spec.securityContext.windowsOptions.hostProcess
- spec.containers[*].securityContext.windowsOptions.hostProcess
- spec.initContainers[*].securityContext.windowsOptions.hostProcess
- spec.ephemeralContainers[*].securityContext.windowsOptions.hostProcess
Allowed Values
- Undefined/nil
- false
Kyverno Policy
WindowsOptions 내 hostProcess가 설정되어 있지 않거나 false 설정되어있는지 점검
https://kyverno.io/policies/pod-security/baseline/disallow-host-process/disallow-host-process/
2-2. Host Namespaces
Pod가 호스트 네임스페이스를 통해 공유 정보에 대한 접근 및 권한 상승에 사용할 수 있음
Restricted Fields
- spec.hostNetwork
- spec.hostPID
- spec.hostIPC
Allowed Values
- Undefined/nil
- false
Kyverno Policy
spec 내 호스트 네임스페이스 필드가 설정되어있지 않거나 false 설정되어있는지 점검
https://kyverno.io/policies/pod-security/baseline/disallow-host-namespaces/disallow-host-namespaces/
2-3. Privileged Containers
특권 모드의 컨테이너를 실행하여 호스트에서 실행되는 프로세스와 거의 동일한 접근을 허용함(네트워크 스택 조작 및 장치 접근과 같은 리눅스 기능을 사용)
Restricted Fields
- spec.containers[*].securityContext.privileged
- spec.initContainers[*].securityContext.privileged
- spec.ephemeralContainers[*].securityContext.privileged
Allowed Values
- Undefined/nil
- false
Kyverno Policy
spec 내 securityContext.privileged가 설정되어있지 않거나 false 설정되어있는지 점검
https://kyverno.io/policies/pod-security/baseline/disallow-privileged-containers/disallow-privileged-containers/
2-4. Capabilities
세분화된 root의 다양한 권한을 지정하여 사용할 수 있음
Restricted Fields
- spec.containers[*].securityContext.capabilities.add
- spec.initContainers[*].securityContext.capabilities.add
- spec.ephemeralContainers[*].securityContext.capabilities.add
Allowed Values
- Undefined/nil
- AUDIT_WRITE
- CHOWN
- DAC_OVERRIDE
- FOWNER
- FSETID
- KILL
- MKNOD
- NET_BIND_SERVICE
- SETFCAP
- SETGID
- SETPCAP
- SETUID
- SYS_CHROOT
Kyverno Policy
securityContext.capabilities.add 내 허용된 권한 외 다른 권한이 설정되어있는지 점검
(AUDIT_WRITE, CHOWN, DAC_OVERRIDE, FOWNER, FSETID, KILL, MKNOD, NET_BIND_SERVICE, SETFCAP, SETGID, SETPCAP, SETUID, SYS_CHROOT)
https://kyverno.io/policies/pod-security/baseline/disallow-capabilities/disallow-capabilities/
2-5. HostPath Volumes
호스트와 공유되는 볼륨을 설정하여 공유 데이터에 엑세스하거나 권한 을 상승시키는데 사용할 수 있음
Restricted Fields
- spec.volumes[*].hostPath
Allowed Values
- Undefined/nil
Kyverno Policy
spec.volumes 내 hostPath 볼륨이 설정되어있는지 점검
https://kyverno.io/policies/pod-security/baseline/disallow-host-path/disallow-host-path/
2-6. Host Ports
호스트 포트에 접근이되면 해당 포트를 통해 스니핑하여 데이터에 접근이 가능 해짐
Restricted Fields
- spec.containers[].ports[].hostPort
- spec.initContainers[].ports[].hostPort
- spec.ephemeralContainers[].ports[].hostPort
Allowed Values
- Undefined/nil
- Known list
- 0
Kyverno Policy
hostPort가 설정되어 있지 않거나 0으로 설정되어있는지 점검
https://kyverno.io/policies/pod-security/baseline/disallow-host-ports/disallow-host-ports/
2-7. AppArmor
특정 프로그램이나 컨테이너에서 필요한 리눅스 기능, 네트워크 사용, 파일 권한 등에 대한 접근을 허용하는 프로필로 구성됨
권한이 높은 프로필이 지정되면 권한 상승을 할 수 있음
Restricted Fields
- metadata.annotations["container.apparmor.security.beta.kubernetes.io/*"]
Allowed Values
- Undefined/nil
- runtime/default
- localhost/*
Kyverno Policy
파드에 설정된 AppArmor 프로필이 runtime/default 또는 localhost/* 외의 것으로 지정되어있는지 점검
https://kyverno.io/policies/pod-security/baseline/restrict-apparmor-profiles/restrict-apparmor-profiles/
2-8. SELinux
해당 설정을 통해 권한을 상승시킬수 있다는데.. 잘몰게씀..;;
Restricted Fields
- spec.securityContext.seLinuxOptions.type
- spec.containers[*].securityContext.seLinuxOptions.type
- spec.initContainers[*].securityContext.seLinuxOptions.type
- spec.ephemeralContainers[*].securityContext.seLinuxOptions.type
Allowed Values
- Undefined/""
- container_t
- container_init_t
- container_kvm_t
Restricted Fields
- spec.securityContext.seLinuxOptions.user
- spec.containers[*].securityContext.seLinuxOptions.user
- spec.initContainers[*].securityContext.seLinuxOptions.user
- spec.ephemeralContainers[*].securityContext.seLinuxOptions.user
- spec.securityContext.seLinuxOptions.role
- spec.containers[*].securityContext.seLinuxOptions.role
- spec.initContainers[*].securityContext.seLinuxOptions.role
- spec.ephemeralContainers[*].securityContext.seLinuxOptions.role
Allowed Values
- Undefined/""
Kyverno Policy
SELinux 옵션 내 허용된 설정 외 다른 옵션이 설정되어있는지 점검 (contain_t, contain_init_t 또는 container_contain_contain_contain_cont)
SELinux 사용자 또는 역할이 설정되어있는지 점검
https://kyverno.io/policies/pod-security/baseline/disallow-selinux/disallow-selinux/
2-9. /proc Mount Type
/proc 내 설정을 변경하여 마스킹 설정을 제거하여 데이터에 접근할 수 있음
Restricted Fields
- spec.containers[*].securityContext.procMount
- spec.initContainers[*].securityContext.procMount
- spec.ephemeralContainers[*].securityContext.procMount
Allowed Values
- Undefined/nil
- Default
Kyverno Policy
securityContext 내 procMount 값이 설정되어있지 않거나 기본 값인지 점검
https://kyverno.io/policies/pod-security/baseline/disallow-proc-mount/disallow-proc-mount/
2-10. Seccomp
해당 프로필은 기본적으로 시스템 호출에 대한 액세스를 거부하는 화이트리스트이다. 이를 변경하여 시스템 호출을 통해 권한 상승할 수 있음
Restricted Fields
- spec.securityContext.seccompProfile.type
- spec.containers[*].securityContext.seccompProfile.type
- spec.initContainers[*].securityContext.seccompProfile.type
- spec.ephemeralContainers[*].securityContext.seccompProfile.type
Allowed Values
- Undefined/nil
- RuntimeDefault
- Localhost
Kyverno Policy
securityContext 내 seccompProfile.type 값이 설정되어있지 않거나 'RuntimeDefault' 또는 'Localhost' 값인지 점검
https://kyverno.io/policies/pod-security/baseline/restrict-seccomp/restrict-seccomp/
2-11. Sysctls
sysctl값을 변경하여 다른 파드에 침범하여 데이터에 접근하거나 방화벽 정책을 수정할 수 있음
Restricted Fields
- spec.securityContext.sysctls[*].name
Allowed Values
- Undefined/nil
- kernel.shm_rmid_forced
- net.ipv4.ip_local_port_range
- net.ipv4.ip_unprivileged_port_start
- net.ipv4.tcp_syncookies
- net.ipv4.ping_group_range
Kyverno Policy
securityContext 내 sysctls 값이 설정되어있지 않거나 허용된 값인지 점검
(kernel.shm_rmid_forced, net.ipv4.ip_local_port_range, net.ipv4.ip_unprivileged_port_start, net.ipv4.tcp_syncookies, net.ipv4.ping_group_range)
https://kyverno.io/policies/pod-security/baseline/restrict-sysctls/restrict-sysctls/
3. Resticted
가장 엄격하게 제한되는 정책
3-1. Volume Types
지정된 볼륨만 사용하게하는 정책
Restricted Fields
- spec.volumes[*]
Allowed Values
- spec.volumes[*].configMap
- spec.volumes[*].csi
- spec.volumes[*].downwardAPI
- spec.volumes[*].emptyDir
- spec.volumes[*].ephemeral
- spec.volumes[*].persistentVolumeClaim
- spec.volumes[*].projected
- spec.volumes[*].secret
Kyverno Policy
spec.volumes 값이 허용된 값인지 점검
(name, configMap, csi, downwardAPI, emptyDir, ephemeral, persistentVolumeClaim, projected, secret, '')
https://kyverno.io/policies/pod-security/restricted/restrict-volume-types/restrict-volume-types/
3-2. Privilege Escalation
setuid, setgid를 통해 root로 권한 상승할 수 있음
Restricted Fields
- spec.containers[*].securityContext.allowPrivilegeEscalation
- spec.initContainers[*].securityContext.allowPrivilegeEscalation
- spec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation
Allowed Values
- false
Kyverno Policy
securityContext 내 allowPrivilegeEscalation값이 false로 설정되어있지 점검
https://kyverno.io/policies/pod-security/restricted/disallow-privilege-escalation/disallow-privilege-escalation/
3-3. Running as Non-root
루트 사용자 금지
Restricted Fields
- spec.securityContext.runAsNonRoot
- spec.containers[*].securityContext.runAsNonRoot
- spec.initContainers[*].securityContext.runAsNonRoot
- spec.ephemeralContainers[*].securityContext.runAsNonRoot
Allowed Values
- true
Kyverno Policy
securityContext 내 runAsNonRoot값이 true로 설정되어있는지 점검
https://kyverno.io/policies/pod-security/restricted/require-run-as-nonroot/require-run-as-nonroot/
3-4. Running as Non-root user
루트 사용자 금지(사용자 지정)
Restricted Fields
- spec.securityContext.runAsUser
- spec.containers[*].securityContext.runAsUser
- spec.initContainers[*].securityContext.runAsUser
- spec.ephemeralContainers[*].securityContext.runAsUser
Allowed Values
- 0
- undefined/null
Kyverno Policy
seucrityContext 내 runAsUser 값이 0보다 크거나 설정되지않았는지 점검
https://kyverno.io/policies/pod-security/restricted/require-run-as-non-root-user/require-run-as-non-root-user/
3-5. Capabilities
세분화된 root의 다양한 권한을 지정하여 사용할 수 있음
Restricted Fields
- spec.containers[*].securityContext.capabilities.drop
- spec.initContainers[*].securityContext.capabilities.drop
- spec.ephemeralContainers[*].securityContext.capabilities.drop
Allowed Values
- Any list of capabilities that includes ALL
Restricted Fields
- spec.containers[*].securityContext.capabilities.add
- spec.initContainers[*].securityContext.capabilities.add
- spec.ephemeralContainers[*].securityContext.capabilities.add
Allowed Values
- Undefined/nil
- NET_BIND_SERVICE
Kyverno Policy
capabilities에 NET_BIND_SERVICE만 허용(화이트 리스트)되어있는지 점검
https://kyverno.io/policies/pod-security/restricted/disallow-capabilities-strict/disallow-capabilities-strict/
'Security' 카테고리의 다른 글
[Security] EKS RBAC (0) | 2022.05.20 |
---|---|
[Server] 서버 점검 (0) | 2022.02.27 |
[Container] Trivy Docker image Scan (0) | 2021.10.28 |
[Code] Sonarqube Code Analysis (0) | 2021.10.23 |
[Code] Sonarqube (0) | 2021.10.23 |