Secured Software Development

Secured Software Development

“ปัจจุบันโลกของเรามีการเปลี่ยนแปลงเทรนด์ของเทคโนโลยีอย่างรวดเร็ว รวมถึงพฤติกรรมของผู้คนที่มีแนวโน้มหันมาใช้งาน IT Solution เช่น Internet Banking, E-Wallet หรือ E-Service ต่างๆ ที่มีการใช้งานข้อมูลส่วนตัวที่สำคัญ ไม่ว่าจะเพื่อเข้าใช้งานหรือใช้เพื่อการสั่งการทำธุรกรรมต่างๆ

 

ทำให้นักพัฒนาหรือองค์กรที่มีการให้บริการระบบดังกล่าวต้องคำนึงถึงภัยที่อาจจะเกิดขึ้นต่อระบบด้วยความรอบคอบและคำนึงถึงความปลอดภัยของข้อมูลทั้งของผู้ใช้งานและองค์กร”

 

ถ้าพูดถึงกระบวนการในการพัฒนาระบบทุกคนคงรู้จัก System/Software Development Life Cycle (SDLC) ซึ่งเป็นการพูดภาพรวมของขั้นตอนในการพัฒนาระบบเอาไว้อย่างครบถ้วน สำหรับขั้นตอนการพัฒนาระบบ SDLC แบ่งคร่าวๆ ได้ 6 ขั้นตอนดังนี้

 

 

 

  • Requirement Gathering and Analysis ขั้นตอนการวางแผนงาน โดยกำหนดรูปแบบของซอฟต์แวร์ ประมาณการต้นทุนในการพัฒนาระบบกำหนดแนวทางของการพัฒนาระบบ กำหนดระยะเวลา และค้นหาความต้องการของระบบ วิเคราะห์ความต้องการนั้น เพื่อให้เข้าใจภาพรวมและหน้าที่การทำงานของระบบ
  • Design ขั้นตอนการออกแบบส่วนประกอบต่างๆ ของซอฟต์แวร์ เพื่อให้ตรงกับความต้องการที่ได้วิเคราะห์มาแล้ว
  • Implementation or Coding ขั้นตอนการสร้างระบบโดยการเขียนโปรแกรม ตามแนวทางการออกแบบจากขั้นตอนที่ผ่านมา
  • Integration and Testing ขั้นตอนการนำระบบทที่ทำทดสอบการใช้งาน ว่าทำงานถูกต้องหรือไม่ ซึ่งการทดสอบนี้จะรวมถึงการทดสอบการเชื่อมโยงกับระบบซอฟต์แวร์อื่นๆ ที่เกี่ยวข้องด้วย และประเมินว่าระบบที่ผ่านการทดสอบแล้ว เหมาะสมที่จะนำไปใช้งานได้หรือไม่
  • Installation and Deployment ขั้นตอนการนำระบบที่พัฒนาและผ่านการทดสอบแล้วไปใช้งาน โดยทำการติดตั้ง และสอนวิธีการใช้งาน แก่ผู้ใช้ (บางระบบเป็นการพัฒนาต่อเนื่อง หรือเป็นการพัฒนาระบบใหม่มาแทนระบบเดิม อาจจะต้องมีการนำข้อมูลเก่าเข้าระบบใหม่ก่อนการนำระบบไปใช้จริง)
  • Maintenance ขั้นตอนของการให้ความช่วยเหลือต่อผู้ใช้ เมื่อพบปัญหา โดยหากปัญหาที่เกิดไม่สามารถแก้ไขได้ จะต้องทำการพัฒนาระบบเพิ่มเติม ก็จะเริ่มวนไปที่ขั้นตอนแรกใหม่

 

จากวงจรการพัฒนาระบบตามที่กล่าวมานั้น หากเราต้องการพิจารณาถึงความปลอดภัยของข้อมูลในระบบที่จะดำเนินการพัฒนาก็สามารถอ้างอิงได้จากวงจรการพัฒนาเช่นกัน แต่กระบวนการนี้จะมีชื่อเล่นใหม่ว่า

 

Secured System/Software Development Life Cycle (SSDLC)

ซึ่งจะเป็นการระบุว่าในแต่ละขั้นตอน ของการพัฒนาผู้ที่เกี่ยวข้องในส่วนต่างๆ จะต้องคำนึงถึงความปลอดภัยของข้อมูลอย่างไรบ้าง แต่ก็แน่นอนว่าแต่ละระบบที่ ทำการพัฒนานั้น จะมีข้อควรระวังไม่เหมือนกันตามแต่รูปแบบการพัฒนาของแต่ละระบบ

 

โดยแต่ละขั้นตอนของวงจรการพัฒนาระบบจะต้องมีการคำนึงถึงความปลอดภัยของระบบดังนี้

 

Requirement Gathering and Analysis

 

 

ในขั้นตอนนี้จะต้องมีการจัดทำ Security Requirements ของระบบ โดยมีการระบุว่าในการดำเนินการพัฒนาระบบนั้นจะต้องมีการคำนึงถึงความปลอดภัยต่างๆ ด้วยจากการทำ Risk Assessment ของระบบว่าระบบนั้นมีความเสี่ยงด้านความปลอดภัยของข้อมูลหรือระบบอย่างไรบ้าง

 

สำหรับขั้นตอนนี้นั้นนับว่าเป็นขั้นตอนที่สำคัญที่สุดในขั้นตอนทั้งหมดเพราะจะเป็นการกำหนดให้ผู้ที่รับผิดชอบในส่วนต่างๆ ของการดำเนินการพัฒนาระบบต้องคำนึงถึงความปลอดภัยของข้อมูลในระบบตลอดวงจรการดำเนินการพัฒนา

 

Design

 

 

ในขั้นตอนนี้เป็นการกำหนด Secured Design สำหรับระบบตามที่เราได้ Security Requirements จากข้อก่อนหน้าแล้ว โดยการดีไซน์ระบบให้มีความปลอดภัยนั้นจะมีการทำ Analyze Attack Surface เพื่อหาความเป็นไปได้ในการโจมตีระบบจาก Risk ต่างๆ ที่เรามีอยู่

 

เพื่อนำมาสู่การทำ Threat Modeling เพื่อดูว่าสุดท้ายแล้วเราจะต้องดำเนินการเสริมความปลอดภัยในด้านใด เพื่อให้ระบบของเรามีความเสี่ยงด้านความปลอดภัยของข้อมูลอยู่ในระดับที่รับได้

 

Implementation and Testing

 

 

ในหัวข้อนี้ขอรวบเนื้อหาทั้งส่วนการดำเนินการพัฒนาและการทดสอบระบบ เนื่องในการดำเนินการจริงทั้งสองระบบนี้มักจะทำไปควบคู่กันแบบคู่ขนานและมีการแลกเปลี่ยนข้อมูลที่ทำการทดสอบเพื่อแก้ไขระบบอยู่ตลอดเวลา

 

สำหรับการพัฒนาในปัจจุบันนั้นจะต้องคำนึงถึงความปลอดภัยของข้อมูลจากจากโจมตีต่างๆ ที่มีอยู่ในขณะนั้น โดยมักจะอ้างอิงมาจากมาตรฐานต่างๆ ที่มีความน่าเชื่อถือ เช่น NIST, SANS และ OWASP เป็นต้น

 

ตัวอย่างการพัฒนาแอปพลิเคชันโดยคำนึงถึงภัยที่อาจจะเกิดขึ้นตาม OWASP Top 10:2013 A3 – Cross-Site Scripting (XSS) ในตัวอย่างนี้จะพูดถึง Web Page ที่ผู้ไม่หวังดีสามารถใส่คำสั่งที่สามารถขโมยข้อมูล Cookies และ Sessions ID ของผู้อื่นได้โดยไม่ได้รับอนุญาต

 

ผลที่ตามมาคือผู้ใช้งานรายอื่นๆ ที่เข้ามายัง Web Page นี้นั้นถูกขโมยข้อมูลออกไปยังเครื่องของผู้ไม่หวังดีได้ ดังรูปต่อไปนี้

 

 

จากตัวอย่างเราจะสามารถพิจารณาถึงการพัฒนาที่ต้องคำนึงถึงการป้องกันการไม่ให้ผู้ที่ไม่ได้รับอนุญาตใส่คำสั่งไม่พึงประสงค์ใน Web Page เช่น การทำ Input Validation ในทุกๆ ช่องทาง มีการทำ Blacklist และ Whitelist ของข้อมูลที่เราสามารถรับได้ เป็นต้น และการทดสอบที่ต้องมีการดำเนินการตรวจสอบความปลอดภัยตามมาตรฐานต่างๆ เช่นการทำ Vulnerability Assessment หรือ Penetration Testing ก่อนการใช้งานจริง เป็นต้น

 

Installation and Deployment

 

 

ในขั้นตอนนี้เป็นการนำไปใช้งานจริง ซึ่งหลายๆ ท่านอาจจะคิดว่าไม่น่าจะมีอะไรที่เกี่ยวข้องกับความปลอดภัยของข้อมูล แต่จริงๆ แล้วในขั้นตอนนี้นั้นถือเป็นการตรวจสอบและยืนยันผลว่าสิ่งที่เราได้ทำไปแล้วในขั้นตอนทั้งหมดนั้นได้ดำเนินการตาม Security Requirement จริงๆ

 

ส่วนที่สำคัญคือการนำข้อมูลทดสอบออกจากระบบก่อนใช้งานจริง ไม่ว่าจะเป็นข้อมูลที่เป็นส่วนการปฏิบัติงานหรือข้อมูลที่เป็นส่วนของการบริหาร เช่น ข้อมูล User ที่เข้าระบบในการทดสอบ เป็นสิ่งที่หลายๆ ท่านมักลืมแล้วอาจจะเป็นภัยที่ไม่คาดคิดได้ในอนาคต

 

Maintenance

 

 

ในขั้นตอนนี้เป็นขั้นตอนในการรักษาระบบให้ข้อมูลมีความปลอดภัยอยู่เสมอ เช่น การทำ Business Continuity Plan (BCP) เพื่อป้องกันเหตุที่อาจจะทำให้ระบบไม่สามารถใช้งานได้ตามปกติหรือ Backup Plan ในกรณีเหตุฉุกเฉินที่ทำให้ข้อมูลในระบบไม่สมบูรณ์หรือศูนย์หาย และสุดท้ายการทำ Incident Response Management เพื่อคอยเฝ้าระวังเหตุต่างๆ ที่อาจจะเกิดขึ้น ทำให้ป้องกันภัยที่จะเกิดขึ้น หรือทำให้ระบบสามารถกลับมาทำงานได้ในระยะเวลาอันสั้น

 

ที่กล่าวมาทั้งหมดนั้นหากท่านได้นำหลักการของ SSDLC ไปใช้ในการทำ SDLC ปกติ จะทำให้โครงการของท่านมีความปลอดภัยทางข้อมูลมากยิ่งขึ้น เพราะในปัจจุบันผู้ที่ไม่หวังดีซึ่งคอยมุ่งโจมตีระบบของท่านนั้นมีจำนวนเพิ่มมากขึ้นและวิธีการโจมตีในปัจจุบันก็ง่ายมากขึ้น ทำให้การนำ SSDLC ไปใช้เพิ่มเติมต่อยอดในการดำเนินการพัฒนานั้นมีประโยชน์ต่อโครงการของท่านอย่างแน่นอน

 

สุดท้ายนี้ที่กล่าวมานั้นเป็นเพียงโครงสร้างของการดำเนินการพัฒนาโครงการโดยรวม ทำให้ยังมีรายละเอียดปลีกย่อยอื่นๆ ที่ยังไม่ได้กล่าวถึงอีกมากมาย ทั้งนี้ทีมผู้เขียน จะนำความรู้เชิงเทคนิเกี่ยวกับ OWASP มานำเสนอให้ท่านในครั้งถัดไป

Top