หลังจากได้ทำ Training ไป เรามาดูกันว่า Secure Coding Compliance คืออะไร มีประโยชน์อย่างไรบ้าง
Secure Coding Compliance คือกระบวนการและแนวทางปฏิบัติที่มุ่งมั่นให้การเขียนโค้ดเป็นไปตามมาตรฐานความปลอดภัย เพื่อป้องกันช่องโหว่ทางด้านความปลอดภัย (security vulnerabilities) ที่อาจถูกแฮกเกอร์หรือผู้ไม่ประสงค์ดีโจมตีในระบบซอฟต์แวร์ขององค์กร
องค์ประกอบหลักของ Secure Coding Compliance
-
มาตรฐานและกรอบการทำงาน (Standards & Frameworks)
มีมาตรฐานที่นิยมใช้เพื่อควบคุมและตรวจสอบ เช่น
- OWASP Secure Coding Practices (แนะนำแนวทางป้องกันช่องโหว่ที่พบบ่อย)
- ISO/IEC 27001 (มาตรฐานการจัดการความปลอดภัยของข้อมูล)
- NIST Guidelines (แนวปฏิบัติสำหรับการพัฒนาซอฟต์แวร์ปลอดภัย)
-
การเขียนโค้ดอย่างปลอดภัย (Secure Coding Practices)
การปฏิบัติตามแนวทางการเขียนโค้ดที่ปลอดภัย เช่น:
- การตรวจสอบ input validation (การกรองข้อมูลจากผู้ใช้)
- การหลีกเลี่ยง hardcoding ข้อมูลสำคัญ เช่น รหัสผ่าน
- การใช้ฟังก์ชันที่ปลอดภัย เช่น การจัดการ memory อย่างเหมาะสม
-
การทดสอบความปลอดภัย (Security Testing)
ใช้เครื่องมือและกระบวนการเพื่อค้นหาและแก้ไขจุดบกพร่อง เช่น:
- Static Application Security Testing (SAST)
- Dynamic Application Security Testing (DAST)
- การทำ Penetration Testing
-
การปฏิบัติตามข้อกำหนดกฎหมายและอุตสาหกรรม (Compliance Requirements)
ซอฟต์แวร์ต้องเป็นไปตามกฎระเบียบที่เกี่ยวข้อง เช่น:
- GDPR (การปกป้องข้อมูลส่วนบุคคลในยุโรป)
- PCI-DSS (มาตรฐานความปลอดภัยสำหรับข้อมูลการชำระเงิน)
-
การฝึกอบรมและสร้างวัฒนธรรมความปลอดภัย (Training & Culture)
- ให้ทีมพัฒนาซอฟต์แวร์เข้าร่วมโปรแกรมฝึกอบรม เช่น Secure Code Warrior
- สร้างวัฒนธรรมที่เน้นความสำคัญของการพัฒนาซอฟต์แวร์อย่างปลอดภัย
ประโยชน์ของ Secure Coding Compliance
- ลดความเสี่ยงในการโจมตีทางไซเบอร์
- เพิ่มความเชื่อมั่นของผู้ใช้ในระบบ
- ลดค่าใช้จ่ายในการแก้ไขข้อบกพร่องในระยะยาว
- สอดคล้องกับกฎระเบียบและมาตรฐานของอุตสาหกรรม
ตัวอย่างของแนวทางหัวข้อการเขียนโค้ดที่ปลอดภัย โดยแบ่งเป็นดังนี้
- Security Misconfiguration Vulnerability:
- เช่น Attacker เจอ admin page, แสดงรายละเอียดของ Error ให้ User เห็น ข้อมูลภายในรั่วไหล
- แนวทางแก้ไข ต้อง config ให้ถูกต้อง ให้ software มีการ update version ล่าสุดสม่ำเสมอ
- Authentication - Insufficiently Protected Credentials:
- เช่น hard-coded password
- แนวทางแก้ไข เก็บ password ใน services เช่น password manager ปกป้องการมองเห็น password
- Sensitive Data Storage - Plain Text Storage of Sensitive Information:
- เช่น Clear text format
- แนวทางแก้ไข Blur or Blind Data by using strong encryption prior security communities or storage
- Insecure Cryptography - Exposed Key:
- เช่น Key ไว้ใน public, ใช้ weak encryption หรือ hard-coded key
- แนวทางแก้ไข Blur or Blind Data by using strong encryption prior security communities, key in private folder
- Unprotected Transport of Credentials:
- เช่น ไม่ใช้ SSL TLS version ล่าสุด
- แนวทางแก้ไข ใช้ SSL TLS version ล่าสุด
- Unprotected Transport of Sensitive Information:
- เช่น ไม่ใช้ SSL TLS version ล่าสุด และโดน Man in the middle ดักข้อมูล
- แนวทางแก้ไข ใช้ SSL TLS version ล่าสุด
- Weak Algorithm or Protocol Use:
- เช่น ใช้ TLS เวอร์ชั่นเก่า มี Weak Algorithm และโดน Man in the middle ดักข้อมูล
- แนวทางแก้ไข ใช้ SSL TLS version ล่าสุด, ไม่ใช้ Weak Algorithm
- Using Known Vulnerable Component/Untrusted Source:
- เช่น ไม่ใช้ Component หรือ Package ที่เชื่อถือได้และเป็น version ล่าสุด
- แนวทางแก้ไข ใช้ Component หรือ Package ที่เชื่อถือได้และเป็น version ล่าสุด
- SQL/NoSQL Injection:
- เช่น ไม่ป้องกัน Statement Query จาก SQL/NoSQL Injection
- แนวทางแก้ไข ใช้ ORM ตรวจสอบ Query เขียน Query ที่ป้องกัน Injection
- Stored/ Reflected Cross-Site Scripting:
- เช่น การเปิดช่องโหว่หน้าเว็บไซต์ให้สามารถฝัง Script เข้ามาใน Platform ได้ และลิ้งเอา DOM cookie ของ Users ไป
- แนวทางการแก้ไข ปิดช่องโหว่หน้าเว็บไซต์ที่สามารถฝัง Script เข้ามาใน Platform เช่น Sanitize Data ก่อน Store in Platform
- Information Exposure - Error Details:
- เช่น แสดงรายละเอียดของ Error ให้ User เห็น ข้อมูลภายในรั่วไหล เช่น Web Server/ Software OS Version ทำให้สามารถรู้ช่องโหว่จาก Version และทำการโจมตีช่องโหว่นั่นๆได้
- แนวทางการแก้ไข นำ Error Message ออกไม่ให้ Users เห็น, Log Error มีการจัดการที่ถูกต้องเพื่อให้ Monitor และแก้ไขปัญหาได้
- Missing Function Level Access Control:
- เช่น ไม่มีการแบ่งแยก Level Access Control ของ Application
- แนวทางการแก้ไข มีการแบ่งแยก Level Access Control ของ Application
- Insecure Direct Object Reference:
- เช่น การมี UserId =1 แต่ UserId = 1 สามารถข้ามและเข้า UserId = 2 ได้ ทั้งที่ไม่มี Access
- แนวทางการแก้ไข มีการแบ่งแยก Level Access Control ของ Application
- Access Control - Using input from untrusted sources:
- เช่น ใช้ source of cookie input
- แนวทางการแก้ไข หลีกการใช้ sources ที่ input เป็นช่องโหว่ เช่น input cookie ซึ่งสามารถเปลี่ยนแปลง value ได้ ทำให้เปลี่ยน Access ไปเข้า UserId อื่นๆได้
- Injection Flows - Path Traversal:
- เช่น การที่ User ได้ Access เข้าถึง Path ที่ไม่ควรเข้าได้ เช่น Folder รูปภาพซึ่งไม่ใช้รูปภาพของตนเอง หรือ config files
- แนวทางการแก้ไข ป้องกันการเข้าถึง Path ที่ User ไม่ควรเข้า, กำหนดรูปแบบ format ไฟล์ใดๆอย่างหนึ่งเท่านั้นในการ save หรือ open ให้ถูกต้อง
- Improper Authentication:
- เช่น การไม่ตรวจความถูกต้องของ Permission/Access ของ Users ที่ควรจะต้องได้รับ - Application Error กล่าวคือ User A bypass เข้าถึงข้อมูลของ User B ได้ ยกตัวอย่างเช่น การ set หรือ เปลี่ยน cookie session-id ซึ่งสามารถ bypass ได้ง่าย
- แนวทางการแก้ไข ปรับแก้ Application Logic ให้ครอบคลุมไม่สามารถ bypass ข้าม User ได้เช่นใช้การ random secure session-id
- Weak Password Policy:
- เช่น อนุญาตให้ User ใช้ Weak Password
- แนวทางแก้ไข ใช้ High Policy Password
- User of Single-factor Authentication:
- เช่น Login Password ขั้นเดียว
- แนวทางแก้ไข มี Multi-factor Authentication
- Insufficient Session Expiration
- เช่น ไม่มีการกำหนด Session Timeout กรณี User ลืม logout จาก Public Computer จะทำให้ผู้อื่นเข้าถึง Account ได้ง่ายๆ
- แนวทางแก้ไข กำหนด Session Timeout
- Insufficient Anti-Automation:
- เช่น Attacker ทำการ Flood Post ใน Application หรือ Brute Force Password ในการ Login เข้า User Account อื่นๆ
- แนวทางแก้ไข กำหนด Captcha หรือ มีระบบป้องกันการทำ Automation ซ้ำ เช่นกรอก Password Login ผิดได้มากสุด 3 ครั้ง เป็นต้น
- Insecure Password Change Function:
- คือ เวลาเปลี่ยน Password ต้องมีให้ User กรอก Current Password ก่อนเปลี่ยนเป็น New Password ป้องกันในกรณี Hacker ได้ Access เข้าไป User Account แล้ว Hacker จะไม่สามารถเปลี่ยน Password ได้เพราะ Hacker ไม่รู้ Current Password
- Insecure Password Reset Function:
- คือ มี pattern key ในการ reset password ทำให้ Attacker ได้ token และสามารถอดรหัสและสามารถ reset password แล้วก็ควบคุม User Account ที่ Hacker ไปจู่โจมได้
- แนวทางแก้ไข เพิ่ม Anti Phishing Phrase ใน Flow reset password ในเนื้อหา Email Reset Password ที่ส่งให้ User
- Insufficient Logging and Monitoring:
- คือ มีการจัดการ Logging และ Monitoring Log ในกรณีที่เจอ Suspicious Log เช่น cd rm หรือ mkdir ให้มี process banned user เป็นต้น
หวังว่าแนวทาง Security หัวข้อทั้งหมดที่ได้กล่าวมานั้นจะเป็นพื้นฐานที่สามารถนำไปปรับใช้กับ Software หรือ Website ให้ปลอดภัยได้มากยิ่งขึ้นครับ :)