การศึกษาด้าน DevSecOps ในการพัฒนาของระบบและซอฟต์แวร์
ผู้จัดทำ: นาย ธีรภัทร์ ม่วงจั่น
อาจารย์ที่ปรึกษา: อาจารย์ กฤษฎา เล่งเวหาสถิต
ที่มาและความสำคัญ
ในกระบวนการพัฒนาซอฟต์แวร์สมัยใหม่ จำเป็นต้องมีการบริหารจัดการเพื่อปิดช่องโหว่ด้านความปลอดภัยที่ปรากฏขึ้นอย่างสม่ำเสมอ เพื่อป้องกันไม่ให้ผู้ไม่ประสงค์ดีโจมตีระบบได้โดยง่าย ซึ่งความเสี่ยงส่วนใหญ่มักเกิดจากภายในส่วนประกอบซอฟต์แวร์ (Dependency) ที่ล้าสมัย ขาดการอัปเดต หรือขาดการ Patch อย่างต่อเนื่อง รวมถึงความจำเป็นในการตรวจสอบโค้ดเพื่อให้มั่นใจว่านักพัฒนาสามารถเขียนโค้ดได้อย่างปลอดภัย กระบวนการดังกล่าวจำเป็นต้องอาศัยความร่วมมือและบูรณาการการทำงานร่วมกันระหว่างทีมนักพัฒนา (Development) ทีมปฏิบัติการ (Operations) และทีมความปลอดภัย (Security) จึงเกิดเป็นแนวคิด "DevSecOps" ขึ้นสำหรับวงจรการพัฒนาซอฟต์แวร์ในปัจจุบัน
วัตถุประสงค์
เครื่องมือที่ใช้ (Tools)
-
Visual Studio Code: เครื่องมือสำหรับเขียนซอร์สโค้ด
-
snyk.io: เครื่องมือสำหรับตรวจสอบช่องโหว่และ Dependency
-
Jest: เฟรมเวิร์กสำหรับการทดสอบระดับหน่วย (Unit Testing)
-
Atlassian BitBucket: ระบบควบคุมเวอร์ชันและจัดการซอร์สโค้ด
-
SonarQube for IDE: เครื่องมือสำหรับตรวจสอบคุณภาพและความปลอดภัยของโค้ดขณะพัฒนา
-
GitHub Copilot: เครื่องมือปัญญาประดิษฐ์ช่วยสนับสนุนการเขียนโค้ด
วิธีการดำเนินงาน (Methodology)
โครงงานนี้ศึกษาและจำลองการทำงานผ่านแนวคิด DevSecOps Workflow (Plan, Code, Build, Test, Release, Deploy) โดยแบ่งประเภทเทคนิคการตรวจสอบความปลอดภัยและประสิทธิภาพซอฟต์แวร์ออกเป็น 4 รูปแบบหลัก ดังนี้:
-
Software Composition Analysis (SCA): ทำหน้าที่ตรวจสอบส่วนประกอบซอฟต์แวร์หรือโอเพนซอร์สไลบรารีที่ระบบพึ่งพา (Dependency) เพื่อระบุช่องโหว่ความปลอดภัยที่แฝงอยู่ภายใน (กระบวนการขั้น Plan)
-
Automate Unit Testing: การทดสอบส่วนประกอบย่อย ๆ ของซอฟต์แวร์แบบแยกเฉพาะส่วน โดยไม่มีการทดสอบระบบการทำงานร่วมกัน (กระบวนการขั้น Code)
-
Static Application Security Testing (SAST): กระบวนการตรวจสอบและวิเคราะห์ซอร์สโค้ดแบบอัตโนมัติ เพื่อประเมินว่ามีจุดเสี่ยงต่อการถูกโจมตีหรือมีจุดที่ยากต่อการบำรุงรักษาซอฟต์แวร์หรือไม่ (กระบวนการขั้น Build)
-
Dynamic Application Security Testing (DAST): กระบวนการทดสอบซอฟต์แวร์ในขณะที่ระบบกำลังทำงาน (Runtime) โดยการจำลองเทคนิคการโจมตีตัวซอฟต์แวร์ในรูปแบบต่างๆ อย่างต่อเนื่อง (กระบวนการขั้น Test)
ผลการดำเนินงาน (Results)
คณะผู้จัดทำได้นำเทคนิคและเครื่องมือ DevSecOps ไปประยุกต์ใช้ทดสอบกับแอปพลิเคชันต้นแบบ React-based ในระบบจำลองจำนวน 2 แอปพลิเคชัน โดยมีผลลัพธ์การตรวจสอบเชิงเทคนิคดังนี้:
สรุปผล (Conclusion)
จากการดำเนินโครงงานประยุกต์ใช้เครื่องมือ DevSecOps (snyk.io, SonarQube, OWASP ZAP และ Jest) พบว่าการดำเนินงานประสบความสำเร็จในการช่วยยกระดับประสิทธิภาพความปลอดภัยและการทำงานของซอฟต์แวร์ได้บางส่วน โดยสามารถจำแนกปัญหาภายในซอฟต์แวร์ออกเป็น 2 ประเด็นสำคัญ คือ:
-
ปัญหาจาก Dependency ที่ล้าสมัย: ปัญหานี้เป็นส่วนที่ผู้ดูแลระบบหรือนักพัฒนาสามารถเข้ามาดำเนินการแก้ไขปรับปรุงได้โดยง่าย ผ่านกระบวนการอัปเดตเวอร์ชันของซอฟต์แวร์และไลบรารีอย่างสม่ำเสมอ
-
ปัญหาจากคุณภาพซอร์สโค้ดที่ไม่ดี: ปัญหานี้มีความยากและความซับซ้อนในการแก้ไข เนื่องจากนักพัฒนาจำเป็นต้องทำ Code Refactoring ในหลาย ๆ ส่วนเพื่อให้โค้ดง่ายต่อการดูแลรักษา ซึ่งในทางปฏิบัติการรีแฟคเตอร์ระบบที่รันอยู่แล้วจะมีความเสี่ยงค่อนข้างสูงที่อาจส่งผลกระทบให้ระบบซอฟต์แวร์หยุดชะงักหรือไม่สามารถทำงานตามปกติได้