เพิ่งเห็นว่าทาง 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