Search
× Search




ผลงานสหกิจ

การศึกษาด้าน DevSecOps ในการพัฒนาของระบบและซอฟต์แวร์

ผู้จัดทำ: นาย ธีรภัทร์ ม่วงจั่น

อาจารย์ที่ปรึกษา: อาจารย์ กฤษฎา เล่งเวหาสถิต 

ที่มาและความสำคัญ

ในกระบวนการพัฒนาซอฟต์แวร์สมัยใหม่ จำเป็นต้องมีการบริหารจัดการเพื่อปิดช่องโหว่ด้านความปลอดภัยที่ปรากฏขึ้นอย่างสม่ำเสมอ เพื่อป้องกันไม่ให้ผู้ไม่ประสงค์ดีโจมตีระบบได้โดยง่าย ซึ่งความเสี่ยงส่วนใหญ่มักเกิดจากภายในส่วนประกอบซอฟต์แวร์ (Dependency) ที่ล้าสมัย ขาดการอัปเดต หรือขาดการ Patch อย่างต่อเนื่อง รวมถึงความจำเป็นในการตรวจสอบโค้ดเพื่อให้มั่นใจว่านักพัฒนาสามารถเขียนโค้ดได้อย่างปลอดภัย กระบวนการดังกล่าวจำเป็นต้องอาศัยความร่วมมือและบูรณาการการทำงานร่วมกันระหว่างทีมนักพัฒนา (Development) ทีมปฏิบัติการ (Operations) และทีมความปลอดภัย (Security) จึงเกิดเป็นแนวคิด "DevSecOps" ขึ้นสำหรับวงจรการพัฒนาซอฟต์แวร์ในปัจจุบัน

วัตถุประสงค์

  • เพื่อศึกษาหลักการทำงานของ DevSecOps และแนวคิดการบูรณาการด้านความปลอดภัยเข้ากับวงจรการพัฒนาซอฟต์แวร์

  • เพื่อฝึกฝนปฏิบัติทักษะการใช้เครื่องมือที่เกี่ยวข้องในระบบนิเวศของ 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 รูปแบบหลัก ดังนี้:

  1. Software Composition Analysis (SCA): ทำหน้าที่ตรวจสอบส่วนประกอบซอฟต์แวร์หรือโอเพนซอร์สไลบรารีที่ระบบพึ่งพา (Dependency) เพื่อระบุช่องโหว่ความปลอดภัยที่แฝงอยู่ภายใน (กระบวนการขั้น Plan)

  2. Automate Unit Testing: การทดสอบส่วนประกอบย่อย ๆ ของซอฟต์แวร์แบบแยกเฉพาะส่วน โดยไม่มีการทดสอบระบบการทำงานร่วมกัน (กระบวนการขั้น Code)

  3. Static Application Security Testing (SAST): กระบวนการตรวจสอบและวิเคราะห์ซอร์สโค้ดแบบอัตโนมัติ เพื่อประเมินว่ามีจุดเสี่ยงต่อการถูกโจมตีหรือมีจุดที่ยากต่อการบำรุงรักษาซอฟต์แวร์หรือไม่ (กระบวนการขั้น Build)

  4. Dynamic Application Security Testing (DAST): กระบวนการทดสอบซอฟต์แวร์ในขณะที่ระบบกำลังทำงาน (Runtime) โดยการจำลองเทคนิคการโจมตีตัวซอฟต์แวร์ในรูปแบบต่างๆ อย่างต่อเนื่อง (กระบวนการขั้น Test)

ผลการดำเนินงาน (Results)

คณะผู้จัดทำได้นำเทคนิคและเครื่องมือ DevSecOps ไปประยุกต์ใช้ทดสอบกับแอปพลิเคชันต้นแบบ React-based ในระบบจำลองจำนวน 2 แอปพลิเคชัน โดยมีผลลัพธ์การตรวจสอบเชิงเทคนิคดังนี้:

  • ผลการสแกน React-based application #1:

    • SCA (snyk.io): ตรวจพบช่องโหว่ระดับวิกฤต (Critical) จำนวน 1 จุด และระดับสูง (High) จำนวน 2 จุด

    • SAST (SonarQube): พบจุดบกพร่องทางโครงสร้างโค้ดหลายรายการ เช่น ตรวจพบ Unexpected negated condition 24 รายการ, มีซอร์สโค้ดเก่าที่ถูกคอมเมนต์ทิ้งไว้ (Remove this commented out code) 15 รายการ, การใช้ดัชนีอาร์เรย์เป็นคีย์ (Do not use Array index in keys) 8 รายการ และฟังก์ชันมีความซับซ้อนเชิงพุทธิปัญญา (Cognitive Complexity) สูงเกินเกณฑ์ 3 รายการ

  • ผลการสแกน React-based application #2:

    • SCA (snyk.io): ตรวจพบช่องโหว่ระดับวิกฤต (Critical) จำนวน 1 จุด และระดับสูง (High) จำนวน 1 จุด

    • DAST (OWASP ZAP): ตรวจพบปัญหาช่องโหว่เชิงรันไทม์ เช่น การตั้งค่า CORS ไม่เหมาะสม (CORS Misconfiguration Systemic), ไม่ได้กำหนดนโยบายความปลอดภัยของเนื้อหา (Content Security Policy Header Not Set), ปัญหา Cross-Domain Misconfiguration และความเสี่ยงระดับปานกลาง (Medium) จากการขาด Header ป้องกันการคลิกแจกไฮแจก (Missing Anti-clickjacking Header)

    • SAST (SonarQube): ตรวจพบ Unexpected negated condition 37 รายการ, มีซอร์สโค้ดเก่าถูกคอมเมนต์ทิ้งไว้ 31 รายการ และมีโครงสร้างเงื่อนไขที่ซ้ำซ้อน

    • Unit Testing (Jest): จากการเขียนสคริปต์ทดสอบระดับหน่วย พบว่าบางไฟล์เกิดข้อผิดพลาดไม่ผ่านเกณฑ์การทดสอบ (Failed) เช่น AccountSetting.js (Failed 15 รายการ) และ Food.js (Failed 10 รายการ) เป็นต้น

สรุปผล (Conclusion)

จากการดำเนินโครงงานประยุกต์ใช้เครื่องมือ DevSecOps (snyk.io, SonarQube, OWASP ZAP และ Jest) พบว่าการดำเนินงานประสบความสำเร็จในการช่วยยกระดับประสิทธิภาพความปลอดภัยและการทำงานของซอฟต์แวร์ได้บางส่วน โดยสามารถจำแนกปัญหาภายในซอฟต์แวร์ออกเป็น 2 ประเด็นสำคัญ คือ:

  1. ปัญหาจาก Dependency ที่ล้าสมัย: ปัญหานี้เป็นส่วนที่ผู้ดูแลระบบหรือนักพัฒนาสามารถเข้ามาดำเนินการแก้ไขปรับปรุงได้โดยง่าย ผ่านกระบวนการอัปเดตเวอร์ชันของซอฟต์แวร์และไลบรารีอย่างสม่ำเสมอ

  2. ปัญหาจากคุณภาพซอร์สโค้ดที่ไม่ดี: ปัญหานี้มีความยากและความซับซ้อนในการแก้ไข เนื่องจากนักพัฒนาจำเป็นต้องทำ Code Refactoring ในหลาย ๆ ส่วนเพื่อให้โค้ดง่ายต่อการดูแลรักษา ซึ่งในทางปฏิบัติการรีแฟคเตอร์ระบบที่รันอยู่แล้วจะมีความเสี่ยงค่อนข้างสูงที่อาจส่งผลกระทบให้ระบบซอฟต์แวร์หยุดชะงักหรือไม่สามารถทำงานตามปกติได้

Previous Article การพัฒนาระบบการจองห้องซ้อมดนตรี
Next Article ระบบตรวจจับท่านั่งและวิเคราะห์ท่าทางด้วยปัญญาประดิษฐ์จากภาพและวิดีโอ
Print
8 Rate this article:
No rating

Documents to download

Terms Of UsePrivacy StatementCopyright 2026 by My Website
Back To Top