Level Up Your K8s Defense with Kubernetes Goat

Datafarm
4 min readSep 5, 2024

ซา-หวัด-ดี-ครับ ท่านสมาชิก เอ้ย สวัสดีครับทุกท่าน เนื่องจากอาทิตย์ที่ผ่านมาผมได้มีโอกาสนำเสนอ Security Learning Playground ตัวนึงที่ Office วันนี้ผมจึงนำเรื่องนั้นมาแนะนำอีกทีผ่านทางบทความนี้ เพื่อไว้เพิ่มมุมมองเพิ่มเติมสำหรับการทดสอบเจาะระบบของพี่ ๆ น้อง ๆ กันครับ

ซึ่งตัวนั้นก็คือ… Kubernetes Goat นั้นเองง ฮิ้ววว ถ้าพร้อมแล้วก็ไปผจญภัยกันเลย

***คำเตือน*** เนื่องจากเป็น Security Learning Playground ที่ถูกออกแบบมาให้มีช่องโหว่ เพราะฉะนั้น ควรติดตั้งในคอมพิวเตอร์เสมือน จำพวก VMware หรือ VirtualBox และเมื่อเลิกเล่นควร ปิด Service หรือลบออก เพื่อความปลอดภัยครับ

Figure 1: https://madhuakula.com/kubernetes-goat/docs

Kubernetes Goat คืออะไร

Kubernetes Goat คือ Security Learning Playground ตัวหนึ่งที่มีสถานการณ์จำลองที่ถูกออกแบบให้มีช่องโหว่โดยเจตนา เพื่อแสดงให้เห็นถึงการตั้งค่าที่ไม่เหมาะสม ช่องโหว่ที่พบในสถานการณ์จริง และปัญหาด้านความปลอดภัยในคลัสเตอร์ Kubernetes คอนเทนเนอร์ เป็นต้น

Kubernetes Goat เหมาะกับใครบ้าง

Attackers & Red Teams

เพื่อเรียนรู้วิธีโจมตี หรือค้นหาปัญหาด้านความปลอดภัย การตั้งค่าที่ผิดพลาด และช่องโหว่ที่พบได้จริงในระบบคอนเทนเนอร์ Kubernetes และสภาพแวดล้อมคลาวด์สมัยใหม่ เราจะสามารถสำรวจ หาจุดอ่อน และเข้าถึงระบบงานต่าง ๆ ได้โดยตรงจากเว็บเบราว์เซอร์ของเรา

Defenders & Blue Teams

เข้าใจวิธีคิดและการทำงานของแฮกเกอร์ รวมถึงวิธีที่พวกเขาใช้ประโยชน์จากช่องโหว่ด้านความปลอดภัย แล้วนำความรู้นี้ไปใช้ในการตรวจจับ และป้องกันภัยคุกคาม นอกจากนี้ ยังได้เรียนรู้แนวปฏิบัติที่ดีที่สุด วิธีการป้องกัน และเครื่องมือต่าง ๆ ที่ใช้ในการลดความเสี่ยง และตรวจจับภัยคุกคามในสถานการณ์จริง

Developers & DevOps Teams

เรียนรู้เทคนิคการโจมตี วิธีป้องกัน และเครื่องมือต่าง ๆ เพื่อให้เราสามารถคิดเหมือนแฮกเกอร์ได้ แล้วนำความรู้นี้ไปใช้รักษาความปลอดภัยให้กับระบบ Kubernetes คลาวด์ และคอนเทนเนอร์ของเรา โดยเริ่มตั้งแต่ขั้นตอนการออกแบบ การเขียนโค้ด และการวางโครงสร้างระบบ เพื่อป้องกันปัญหาตั้งแต่ต้น

Products & Vendor

ใช้ Kubernetes Goat เพื่อแสดงให้เห็นถึงประสิทธิภาพของเครื่องมือ ผลิตภัณฑ์ และโซลูชันของเรา นอกจากนี้ ยังสามารถใช้เพื่อให้ความรู้แก่ลูกค้า และแบ่งปันความรู้เกี่ยวกับผลิตภัณฑ์ หรือเครื่องมือของเราในรูปแบบที่สามารถลงมือปฏิบัติได้จริง

เรามาเริ่มติดตั้งกันเลย

โดยมีวิธีการติดตั้งในหลาย ๆ ทาง ไม่ว่าจะเป็น GCP GKE, AWS EKS, Fargate, Azure AKS, K3S เป็นต้น
สามารถดูเพิ่มเติมได้ที่นี่ https://madhuakula.com/kubernetes-goat/docs/how-to-run

โดยวันนี้ที่เราจะมาเล่นกัน ผมติดตั้งผ่านตัว Kubernetes ครับ โดย Os ที่ผมใช้เล่นจะเป็นตัว Kali linux

0. ทำการติดตั้ง Docker (https://www.kali.org/docs/containers/installing-docker-on-kali/)
1. ทำการติดตั้ง Minikube (https://minikube.sigs.k8s.io/docs/start/)
2. ทำการติดตั้ง Kubectl (https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/)
3. ทำการติดตั้ง kubernetes-helm (https://www.kali.org/tools/kubernetes-helm/)

เมื่อติดตั้ง Binary เรียบร้อยแล้ว เราก็มาเริ่มกันเลยยยย

โดยเริ่มด้วยการทำการ Start service minikube

$Minikube start

ทำการ Clone Git ลงมาที่เครื่อง โดยใช้คำสั่ง

$git clone https://github.com/madhuakula/kubernetes-goat.git

ต่อมาทำการไปยัง Directory kubernetes-goat โดยใช้คำสั่ง

$cd kubernetes-goat

จากนั้นทำการใช้งาน Script setup-kubernetes-goat.sh เพื่อติดตั้ง Kubenetes goat ลงเครื่องของเรา

$bash setup-kubernetes-goat.sh

เมื่อเราทำการติดตั้ง Kubenetes goat แล้วเรามาตรวจสอบ pod กันว่ามีขึ้นมาแล้วหรือยัง โดยใช้คำสั่ง

$kubectl get pods

จากรูปเมื่อกี๊ pod เรามี STATUS คือ Running ทั้งหมดแล้ว หมายความว่าพร้อมใช้งานแล้ว จากนั้นเรามาใช้งาน Script เพื่อเข้าใช้งาน Service กันโดยใช้คำสั่งดังนี้

$bash access-kubernetes-goat.sh

เพียงเท่านี้เราก็พร้อมเล่นแล้ว โดยเข้าไปยัง http://127.0.0.1:1234 ก็สามารถลองเล่นได้แล้ว

เอาล่ะ! เรามาดูกันต่อว่า Kubenetes Goat มี สถานการณ์จำลอง อะไรกันบ้าง

โดย Kubernetes Goat มีสถานการณ์จำลองมากกว่า 20 รูปแบบ ครอบคลุมทั้งการโจมตี การป้องกัน และการวิเคราะห์ ดังนี้

  1. Sensitive keys in codebases
  2. DIND (docker-in-docker) exploitation
  3. SSRF in the Kubernetes (K8S) world
  4. Container escape to the host system
  5. Docker CIS benchmarks analysis
  6. Kubernetes CIS benchmarks analysis
  7. Attacking private registry
  8. NodePort exposed services
  9. Helm v2 tiller to PwN the cluster — [Deprecated]
  10. Analyzing crypto miner container
  11. Kubernetes namespaces bypass
  12. Gaining environment information
  13. DoS the Memory/CPU resources
  14. Hacker container preview
  15. Hidden in layers
  16. RBAC least privileges misconfiguration
  17. KubeAudit — Audit Kubernetes clusters
  18. Falco — Runtime security monitoring & detection
  19. Popeye — A Kubernetes cluster sanitizer
  20. Secure network boundaries using NSP
  21. Cilium Tetragon — eBPF-based Security Observability and Runtime Enforcement
  22. Securing Kubernetes Clusters using Kyverno Policy Engine

โดยแต่ละสถานการณ์ก็จะมี Hint และ Solution ให้โดยสามารถไปดูได้ที่
https://madhuakula.com/kubernetes-goat/docs/scenarios

วันนี้ผมจะมาลองเล่นกันสักข้อกันนะครับ นั่นคือ Sensitive keys in codebases

โดยสถานการณ์ให้เราเข้าไปยัง http://127.0.0.1:1230 จากนั้นผมทำการ Brute Force พาธไฟล์ พบว่ามีไฟล์ .git อยู่ โดยเข้าไปยัง http://127.0.0.1:1230/.git/config

จากนั้นเราทำการใช้เครื่องมือ git_dumper ในการ dump source code ออกมาโดยใช้คำสั่ง

$python3 git_dumper.py http://localhost:1230/.git k8s-goat-git

พอเรา dump source code มาแล้ว มาตรวจสอบไฟล์กัน

หลังจากตรวจสอบไฟล์แล้ว ไม่ได้มีอะไรน่าสนใจ เรามาลองดู log กันต่อ โดยใช้คำสั่ง

git log — name-status

เราพบ commit ที่น่าสนใจอันนึงคือ

Inlcuded custom environmental variables

นั่นหมายความว่ามีการเพิ่ม หรือแก้ไขตัวแปรสภาพแวดล้อมที่กำหนดเองในการ commit นั้น

จากนั้นเราใช้คำสั่ง

git checkout <<ตามด้วย commit ที่เราสนใจ>>

เพื่อทำการย้อนดูไฟล์ที่เราสนใจ

เมื่อเราตรวจสอบไฟล์อีกครั้งเราพบว่ามีไฟล์ .env อยู่

เมื่อทำการอ่านไฟล์ .env ก็พบว่ามี flag อยู่

บทสรุป

แล็บบางข้อนั้นยังมีบั๊คอยู่บ้าง อาจจะทำให้เล่นไม่ได้สมบูรณ์ แต่พอได้อ่าน Solution ก็ช่วยให้เข้าใจมากขึ้นว่าในชีวิตจริงเราควรตรวจสอบอะไรบ้าง ดูอะไรบ้าง โดยรวมถือว่าช่วยได้เยอะมากครับ

ถ้าเกิดสงสัยส่วนไหน ก็สามารถเข้าไปถามได้ที่ Community ของพวกเขา : https://rebrand.ly/Kubernetes-Goat/

ก่อนจะจากกันไป ผมอยากให้จำไว้นะครับ ทุกพลังย่อมมาพร้อมความรับผิดชอบ ใช้ความรู้นี้ในทางที่ถูก ช่วยทำให้โลกออนไลน์ปลอดภัยขึ้น อย่าลืมว่าเราเป็นฮีโร่ ไม่ใช่วายร้าย! อย่านำสิ่งที่เรียนรู้จาก Kubernetes Goat ไปใช้ในทางที่ผิดนะครับ

https://www.techupper.com/2023/11/09/the-boys-season-4-first-look-at-butcher-and-homelander/

ผมหวังว่าจากนี้ไป ไม่ว่าจะเจอเว็บไหนที่ใช้งาน Kubernetes คุณก็พร้อมที่จะตรวจสอบมันแล้ว! ขอให้โชคดีครับ และอย่าลืม:

“With great power comes great responsibility” — spiderman (2002) 😉🚀

ทั้งนี้หากข้อมูลที่นำมาเล่าผิดพลาดประการใด ทางผมก็ขออภัยมา ณ ที่นี้ด้วยครับ สามารถอ่านโดยละเอียดตามลิงก์ที่แนบไว้ข้างล่างครับ

https://madhuakula.com/kubernetes-goat/docs/

สวัสดีครับ

--

--