Tutoriales

Una aparejo para escanear el clúster de Kubernetes en pesquisa de permisos riesgosos

Una aparejo para escanear el clúster de Kubernetes en pesquisa de permisos de aventura en el maniquí de permisos RBAC de Kubernetes (Control de ataque basado en roles). La aparejo se publicó como parte del estudio «Protección de clústeres de Kubernetes mediante la exterminio de permisos riesgosos» en https://www.cyberark.com/threat-research-blog/securing-kubernetes-clusters-by-elimulating-risky-permissions/.

Información universal

KubiScan ayuda a los administradores de clústeres a identificar los permisos que los atacantes podrían usar para comprometer los clústeres. Esto puede ser especialmente útil en entornos grandes donde hay muchos permisos que pueden ser difíciles de rastrear. KubiScan recopila información sobre roles riesgosos roles de clúster, vinculaciones de roles vinculaciones de roles de clúster, usuarios y pods, automatiza los procesos manuales tradicionales y brinda a los administradores la visibilidad que necesitan para mitigar el aventura.

¿Qué puedo hacer?

  • Identificar roles riesgosos ClusterRoles
  • Identificar RoleBindings ClusterRoleBindings de aventura
  • Identificar temas de aventura (usuarios, grupos y cuentas de servicio).
  • Identificar vainas / contenedores de aventura
  • Soltar tokens de pods (todos o por espacio de nombres)
  • Obtenga RoleBindings ClusterRoleBindings asignados al rol, ClusterRole o asunto (adjudicatario, camarilla o cuenta de servicio)
  • Enumere los temas de un tipo específico (‘Sucesor’, ‘Montón’ o ‘Cuenta de servicio’).
  • Enumere las reglas para RoleBinding o ClusterRoleBinding
  • Ver pods que tienen ataque a datos secretos a través de un convexidad o variable compartida
  • Obtenga tokens de puesta en marcha para el clúster

usar

Envase

Con ~/.kube/config expediente

Esto debe hacerse interiormente del Experto Nodo en el que se encuentra el archivo de configuración:

Docker ejecutar -it -rm -e CONF_PATH = ~ / .kube / config -v /: / tmp cyberark / kubiscan

  • CONF_PATH – La ruta del archivo de configuración del clúster

Adentro del contenedor el comando kubiscan es equivalente a python3 /KubiScan/KubiScan.py.
Tenga en cuenta que en este caso el Todo el sistema de archivos está montado. Esto se debe al hecho de que los archivos de configuración contienen rutas a otras ubicaciones en el sistema de archivos que son diferentes en otros entornos.

Con token de cuenta de servicio (bueno desde remoto)

Algunas funciones requieren un privilegiado Cuenta de servicio con los siguientes permisos:

  • capital:: ["roles", "clusterroles", "rolebindings", "clusterrolebindings", "pods", "secrets"]
    Verbos:: ["get", "list"]
  • capital:: ["pods/exec"]
    Verbos:: ["create", "get"]

Sin incautación, la mayoría de las funciones no están disponibles. Por lo tanto, puede utilizar esta configuración para una cuenta de servicio restringida:
Se puede crear ejecutando:

kubectl apply -f – << EOF
apiVersion: v1
Tipo: Cuenta de servicio
Metadatos:
Nombre: kubiscan-sa
Espacio de nombres: normalizado
—–
Tipo: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
Metadatos:
nombre: kubiscan-clusterrolebinding
Asignaturas:
– Tipo: ServiceAccount
Nombre: Kubiscan-Sa
Espacio de nombres: normalizado
apiGroup: «»
roleRef:
Tipo: ClusterRole
Nombre: Rol de clúster de Kubiscan
apiGroup: «»
—–
Tipo: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
Metadatos:
Nombre: Rol de clúster de Kubiscan
Regular:
– apiGroups: [“*”]Medios: [“roles”, “clusterroles”, “rolebindings”, “clusterrolebindings”, “pods”]Verbos: [“get”, “list”]EOF

Guarde el token de la cuenta de servicio en un archivo:

kubectl obtiene secretos $ (kubectl obtiene sa kubiscan-sa -o json | jq -r ‘.secrets[0].nombre ‘) -o json | jq -r ‘.token.data’ | base64 -d> token

Ejecute el contenedor desde cualquier zona:

docker run -it --rm -v $PWD/token:/token cyberark/kubiscan

En el shell, puede utilizar Kubiscan de la próximo forma:

kubiscan -ho <master_ip:master_port> -t /token <command>

Por ejemplo:

kubiscan -ho 192.168.21.129:8443 -t /token -rs

Tenga en cuenta que asimismo puede utilizar la Autoridad de certificación (ca.crt) para realizar la conexión SSL:

docker run -it --rm -v $PWD/token:/token -v <ca_path>/ca.crt:/ca.crt cyberark/kubiscan

En el contenedor:

kubiscan -ho <master_ip:master_port> -t /token -c /ca.crt <command>

Ejecute los siguientes comandos para eliminar la cuenta de servicio con privilegios:

kubectl delete clusterroles kubiscan-clusterrole
kubectl delete clusterrolebindings kubiscan-clusterrolebinding
kubectl delete sa kubiscan-sa

Directamente con Python3

Requerimientos:

Ejemplo de instalación en Ubuntu:

apt-get update
apt-get install -y python3 python3-pip
pip3 install kubernetes
pip3 install PTable

Valer seudónimo kubiscan='python3 /<KubiScan_folder/KubiScan.py' usar kubiscan.

Una vez que haya instalado todos los requisitos anteriores, hay dos formas diferentes de hacerlo:

Desde el nodo experto:

En el nodo experto donde ~/.kube/config disponibles y todos los certificados relevantes, simplemente ejecute:
kubiscan <command>

Por ejemplo: kubiscan -rs muestra todos los temas de aventura (usuarios, cuentas de servicio y grupos).

Desde un host remoto:

Para utilizar esta aparejo desde un host remoto, necesitará un privilegiado Cuenta de servicio como se explica en la sección Contenedor.
Posteriormente de velar el token en un archivo, puede hacer lo próximo:

kubiscan -ho <master_ip:master_port> -t /token <command>

Ejemplos de

Haga lo próximo para ver todos los ejemplos python3 KubiScan.py -e o del contenedor kubiscan -e.

Roles arriesgados YAML

Hay un archivo llamado risky_roles.yaml. Este archivo contiene plantillas para roles de aventura prioritarios.
Aunque el tipo está en todos los roles RoleEstas plantillas se comparan con cada ClusterRole del clúster.
Cuando cada uno de estos roles se compara con un rol en el clúster, se realiza una comprobación para determinar si el rol en el clúster contiene las reglas del rol de aventura. Si es así, se marcará como riesgoso.
Hemos complemento todos los roles que consideramos riesgosos. Sin incautación, poliedro que todos pueden explicar «riesgoso» de diferentes maneras, puede modificar el archivo para asociar o eliminar roles que considere menos riesgosos.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba