เพิ่งเห็นว่าทาง OWASP นั้นได้ทำ project ด้าน security ของ CI/CD ออกมา นอกจากจะมี Web, API, Mobile และ Docker Security เนื่องจาก CI/CD ได้รับความนิยม หรือ เรียกได้ว่าเป็นสิ่งที่ต้องทำเป็นปกติ ทั้ง environment ทั้ง process การทำงาน ทั้งระบบงาน และ pipeline การทำงาน เพื่อให้สามารถส่งมอบระบบงานได้อย่างรวดเร็ว และ มีคุณภาพ
แต่ในการสร้าง CI/CD ขึ้นมานั้น พบว่าต้องมี
Technology stack ที่หลากหลายวิธีการ ทั้งจากภาษาโปรแกรม framework ต่าง ๆ ที่อยู่ในการสร้าง pipeline หลัง ๆ ก็มีพวก GitOps เข้ามา หรือไปในทาง container อีก ทั้ง docker และ Kubernetes เป็นต้น ในส่วนของ Infrastructure ก็ต้องทำ automation ผ่านพวก Infrastrure as Code (IoC) อีก มีการใช้งาน 3-party library/service/system เพื่อให้สามารถทำงานร่วมกับระบบอื่น ๆ ได้ มีพวก Pipeline as Code มาอีก เขียน code อีกแล้ว
จากสิ่งต่าง ๆ เหล่านี้ทำให้สามารถทำงาน ส่งมอบได้อย่างรวดเร็ว ยืดหยุ่น และ หลากหลาย แต่ก็ทำให้มีจุดอ่อนทางด้าน security ซึ่งทำให้โดนโจมตีหรือบุกรุกได้ง่ายขึ้น ยิ่งเป็นระบบ CI/CD ที่เป็นพวก public service ยิ่งมีความเสี่ยงสูง
ดังนั้นจึงทำการสรุป Top 10 ออกมาให้ ดังนี้
CICD-SEC-1: Insufficient Flow Control Mechanisms CICD-SEC-2: Inadequate Identity and Access Management CICD-SEC-3: Dependency Chain Abuse CICD-SEC-4: Poisoned Pipeline Execution (PPE) CICD-SEC-5: Insufficient PBAC (Pipeline-Based Access Controls) CICD-SEC-6: Insufficient Credential Hygiene CICD-SEC-7: Insecure System Configuration CICD-SEC-8: Ungoverned Usage of 3rd Party Services CICD-SEC-9: Improper Artifact Integrity Validation CICD-SEC-10: Insufficient Logging and Visibility
CICD-SEC-1: Insufficient Flow Control Mechanisms
ว่าด้วยเรื่องของ permission ของระบบต่าง ๆ ใน pipeline ของ CI/CD ว่ามีสิทธิ์เข้าใช้งานอย่างไรบ้าง ทั้ง Source Control Management (SCM) ทั้ง CI system ทั้ง Artifact server ทั้ง server ต่าง ๆ เป็นต้น
หรือบ่อยครั้งทำการ push code ที่มีปัญหาเข้ามา ดังนั้นอาจจะต้องมีกระบวนการ scan code และ approval process เพิ่มเข้ามา
CICD-SEC-2: Inadequate Identity and Access Management
ว่าด้วยเรื่องของการระบุตัวตนและการเข้าถึงส่วนการทำงานต่าง ๆ เพราะว่าจะต้องมีระบบมากมายทำงานร่วมกัน ตั้งแต่ source code ยังการ deploy ไปยัง environment ต่าง ๆ จนถึง production ยิ่งถ้ามีการจัดการแบบ manual และ program ช่วยด้วยกัน ยิ่งทำให้ยากลำบากต่อการจัดการ ส่งผลให้เกิดความเสี่ยงสูงขึ้นมาก
หนักกว่านั้นการเข้าถึงระบบต่าง ๆ มีหลายแบบอีก ยิ่งทำให้ซับซ้อนไปกันใหญ่ เช่น
Local user Username/Password LDAP OAuth SSH Plugins RBAC ที่หลากหลาย ใช้ user ส่วนตัว Shared user/account
CICD-SEC-3: Dependency Chain Abuse
ขั้นตอนการ build ใน CI/CD จะต้องทำการ download dependency ที่ใช้งานและเกี่ยวข้อง บ่อยครั้งมักจะไปใช้ dependency ที่อาจจะมีปัญหา และสุ่มเสี่ยงต่อปัญหาทางด้าน security เช่นไป download จาก remote repository เป็นต้น ดังนั้นต้องระวังอย่างมาก
ต้องสร้าง local repository ในองค์กรขึ้นมาไหม การตรวจสอบ checksum ของ dependency ระบุ version ของ dependency ที่ต้องการใช้งานเสมอ มีการ scan dependency เสมอ
CICD-SEC-4: Poisoned Pipeline Execution (PPE)
ในการเขียน pipeline ปัจจุบันจะเป็น Pipeline as Code เป็นหลัก ทำการเก็บไว้ใน source control เลย ดังนั้นถ้าสามารถเข้าถึง source control server ได้แล้ว ก็สามารถแก้ไข pipeline ให้ไป run code ที่ต้องการได้ จากนั้นก็รอดูผลงาน !!
เช่นให้ทำการอ่าน credential และส่งออกไปยังที่กำหนด แสดงดังรูป
CICD-SEC-5: Insufficient PBAC (Pipeline-Based Access Controls)
ปัญหาต่อเนื่องคือ กำหนดการเข้าถึง pipeline ไม่ดี ในแต่ละขั้นตอนควรต้องกำหนดสิทธิ์การทำงานให้ชัดเจน ทั้งการอ่าน เขียน และ execute ตั้งแต่
การเข้าถึง source code การ build การ test การดึง secret/credential จากที่ต่าง ๆ ทั้ง local และ remote การสร้าง และ deploy artifact ใน environment ต่าง ๆ
CICD-SEC-6: Insufficient Credential Hygiene
ปัญหาเรื่องจัดการการเข้าถึง secret/credential ต่าง ๆ ใน pipeline ไม่ดี เช่น
hard code ไว้ใน code เก็บไว้ใน version control ที่เดียวกับ code อาจจะมีในบาง branch ระบบการจัดการ secret/credential ที่ไม่ปลอดภัย มีการ print secret/credential ออกมาทาง console เลย ไม่ทำการ rotate ส่วนมากใช้แบบ static เป็นหลัก
CICD-SEC-7: Insecure System Configuration
ส่วนการทำงานต่าง ๆ configuration ไม่ดี ยิ่งด้าน security ยิ่งแย่ รวมทั้งไม่ทำ hardening ของระบบต่าง ๆ อีกด้วย ทำให้ถูกเจอะและโจมตีได้ง่ายมาก ๆ ทั้ง OS, Network, Software เป็นต้น
CICD-SEC-8: Ungoverned Usage of 3rd Party Services
ปัญหาในการกำหนดการเข้าถึงพวก 3-party services หรือ external service ต่าง ๆ เนื่องจากใน pipeline มีการใช้งาน service ต่าง ๆ เหล่านี้บ่อยมาก เช่น
GitHub/GitLab/Bitbucket OAuth application การสร้าง Access token ในการเข้าถึง การสร้าง SSH key ในการเข้าถึง
CICD-SEC-9: Improper Artifact Integrity Validation
ทั้ง code และ artifact ที่มีในระบบ ควรต้องทำการตรวจสอบเสมอ เพราะว่ามีหลายคน หลายระบบที่เกี่ยวข้อง และ ทำงาน ทั้งจากภายในและภายนอก ดังนั้นทั้ง code และ artifact ที่มี อาจจะถูกโจมตีได้ ส่งผลให้การทำงานผิดพลาดได้ หรือหนักกว่านั้นคือ การส่งมอบระบบงานที่มีปัญหาเชิง security ออกไปยังผู้ใช้งาน แน่นอนว่า ไม่ดีแน่นอน
ดังนั้นควรทำเรื่องของ code signing, artifact verification และ configuration drift detection เป็นต้น
CICD-SEC-10: Insufficient Logging and Visibility
ปัญหาเกิดจากการจัดเก็บ log ที่ไม่เพียงพอหรือไม่ดีของ CI/CD ที่จะช่วย detect และ investigate ปัญหาด้าน security ได้ ต่างจาก Server, Network และ Application ที่มีครบ !!
สามารถอ่านเพิ่มเติมได้ที่ GitHub :: Top 10 CI/CD Security Risks Other resource