The Ten Best Practices for Secure Software Development
วิธีการพัฒนาโปรแกรมประยุกต์ (Application Software) ภายในองค์กรโดยการนำเทคโนโลยีสารสนเทศมาประยุกต์ใช้ให้มีความมั่นคงปลอดภัยตามมาตรฐานสากลนั้น ในความเป็นจริงแล้วถือได้ว่า เป็นความรับผิดชอบของทุกคนที่อยู่ในกระบวนการพัฒนาโปรแกรมประยุกต์ดังกล่าว ในขณะที่หลายคนมีเข้าใจที่ยังไม่ถูกต้องว่า ความมั่นคงปลอดภัยของระบบสารสนเทศนั้นมีที่มาจากการเลือกใช้เทคโนโลยีและกระบวนการที่เหมาะสมและถือเป็นความรับผิดชอบของผู้พัฒนา และ การทดสอบความแข็งแกร่งของระบบด้านความมั่นคงปลอดภัยยังกลายเป็นกระบวนการสุดท้ายของการพัฒนาระบบงาน เช่น เมื่อพัฒนาระบบเสร็จแล้วค่อยมาจัดทำ Vulnerability Assessment และ Penetration Testing ในภายหลัง เนื่องจากหลายคนคิดว่าหากนำเรื่องความมั่นคงปลอดภัยมาเป็นประเด็นตั้งแต่การเริ่มพัฒนา Application Software แล้ว อาจทำให้การพัฒนาระบบงานล่าช้า เนื่องจากโดยปกติแล้ว เพียงลำพังการพัฒนาให้ระบบงานให้ตรงตามความต้องการของผู้ใช้งาน (users) ก็เป็นเรื่องที่ลำบากพอควรอยู่แล้ว แต่จริงๆแล้วเรื่องของความมั่นคงปลอดภัยระบบสารสนเทศนั้น ถือว่าเป็นองค์ประกอบที่สำคัญที่สุดอย่างยิ่งยวดที่จะทำให้องค์กรปลอดภัยจากภัยคุกคามระบบสารสนเทศต่างๆ เนื่องจากภัยคุกคามทางอินเทอร์เน็ต หรือ Cyber Attack นั้นมีอยู่มากมายหลากหลายรูปแบบในปัจจุบันและอนาคต การพัฒนาระบบสารสนเทศที่ไม่คำนึงถึงความมั่นคงปลอดภัยอย่างเพียงพอย่อมเป็นสาเหตุหนึ่งที่จะทำให้องค์กรไม่สามารถดำเนินธุรกิจได้อย่างต่อเนื่องและมีประสิทธิภาพได้ตามเป้าหมายของ Stake Holder
โดยทั่วไปแล้วการพัฒนาโปรแกรมประยุกต์จะมีผู้เกี่ยวข้องจำนวนมาก ดังในรูปที่ 1 ตั้งแต่ ผู้วิเคราะห์ระบบตามความต้องการของลักษณะธุรกิจ ผู้ออกแบบสถาปัตยกรรมระบบ โปรแกรมเมอร์ ผู้ทดสอบคุณภาพของระบบงาน เจ้าหน้าที่ปฏิบัติการ ทีมบริหารและทีมพัฒนาระบบงานซึ่งประกอบไปด้วย ผู้จัดการโครงการ ผู้จัดการฝ่าย และ ผู้บริหารระดับสูงก็ต้องมีส่วนร่วมด้วยเช่นกัน และ ที่ขาดไม่ได้ก็คือ ทีมผู้ตรวจสอบและทีมผู้เชี่ยวชาญด้านความมั่นคงปลอดภัย
ผู้เชี่ยวชาญด้านการพัฒนาระบบงานโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยตามมาตรฐานสากล หรือ Certified Secure Software Lifecycle Professional : CSSLP) เป็นบุคลากรที่องค์กรมีความจำเป็นต้องมีตำแหน่งงานประจำ หรือจำเป็นต้องจ้างผู้เชี่ยวชาญจากภายนอกมาเป็นที่ปรึกษาขององค์กร เนื่องจากการพัฒนาระบบงานโปรแกรมประยุกต์ในปัจจุบันจำเป็นต้องมีผู้เชี่ยวชาญด้านการพัฒนาระบบงานโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยมาช่วยให้คำแนะนำว่าควรทำอย่างไรให้ระบบงานโปรแกรมประยุกต์ที่ถูกพัฒนาขึ้นมานั้นมีช่องโหว่น้อยที่สุดเท่าที่จะทำได้ เพราะเป็นไปไม่ได้ที่ระบบสารสนเทศจะมีความมั่นคงปลอดภัย 100% แต่เราสามารถออกแบบระบบสารสนเทศให้มีความมั่นคงปลอดภัยที่ได้มาตรฐานในระดับหนึ่ง พัฒนาและนำไปใช้งานด้วยความตระหนักด้านความมั่นคงปลอดภัยประกอบกับการควบคุมที่เหมาะสมย่อมเป็นปัจจัยหลักที่จะทำให้ผลกระทบที่อาจเกิดขึ้นกับระบบ เมื่อมีการบุกรุกลดลงได้ ดังนั้นวิธีการปฏิบัติดังต่อไปนี้ 10 ประการจะช่วยให้ท่านสามารถพัฒนาระบบสารสนเทศให้มีความมั่นคงปลอดภัยได้อย่างถูกต้อง
ทางบริษัท ACIS Professional Center นำโดย อาจารย์ นิพนธ์ นาชิน ผู้เชี่ยวชาญ Penetration Testing ของACIS ซึ่งอาจารย์ นิพนธ์ ถือเป็นคนไทยคนแรกที่ได้รับการรับรองความรู้ความสามารถด้านการพัฒนาโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยตามมาตรฐานสากล หรือ CSSLP (Certified Secure Software Lifecycle Professional) จากสถาบัน (ISC)2 โดยอาจารย์ได้นำข้อมูลจากประสบการณ์ในการทำงานร่วมกับทีม Penetration Testing ของ ACIS Professional Center กว่า 5 ปี มาทำการสรุปปัญหาภาพรวมในมุมมองของการพัฒนาระบบงานโปรแกรมประยุกต์ว่าเราควรจะพัฒนาระบบงานอย่างไรให้มีความมั่นคงปลอดภัยที่ได้ตามมาตรฐานสากล ซึ่งสรุปได้เป็นบทความวิชาการ “บัญญัติ 10 ประการ ในการพัฒนาโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยตามมาตรฐานสากล”
“บัญญัติ 10 ประการ” ในการพัฒนาโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยตามมาตรฐานสากล
- รักษาชื่อเสียงขององค์กร
- เข้าใจธุรกิจและป้องกันระบบงานธุรกิจด้วยวิธีการที่เหมาะสมและปลอดภัย
- เข้าใจเทคโนโลยีในการพัฒนาโปรแกรมประยุกต์
- เข้าใจหลักการ GRC, Information Classification และ Data Privacy
- เข้าใจหลักการด้านความมั่นคงปลอดภัยในการพัฒนาโปรแกรมประยุกต์
- ป้องกันข้อมูลที่มีความสำคัญ
- ออกแบบโปรแกรมประยุกต์โดยคำนึงถึงความมั่นคงปลอดภัย
- พัฒนาโปรแกรมประยุกต์โดยคำนึงถึงความมั่นคงปลอดภัย
- นำโปรแกรมประยุกต์ไปใช้งานโดยคำนึงถึงความมั่นคงปลอดภัย
- หมั่นศึกษาหาความรู้ด้านการพัฒนาโปรแกรมประยุกต์อย่างมั่นคงปลอดภัย
1. รักษาชื่อเสียงขององค์กร
Harvard Business Review รายงานว่าในปี ค.ศ. 2008 มีธุรกิจแบบใหม่เกิดขึ้น เรียกว่า Cybercrime service โดยเป็นธุรกิจที่รับจ้างเจาะระบบโดยเฉพาะการขโมยข้อมูลและการขโมยความเป็นตัวตน (Identity Theft) หรือ การขโมย username และ password ของบุคคลนั่นเอง Scott Berinatorบรรณาธิการของ CSO magazine กล่าวว่าวัตถุประสงค์ของ แฮกเกอร์ในยุคปัจจุบันไม่ใช่เป็นเพียงการโจมตีให้ระบบหยุดทำงานเท่านั้น หากแต่ยังเป็นการลักลอบขโมยข้อมูลที่เป็นความลับและทำลายความเชื่อถือของลูกค้าที่มีต่อองค์กรอีกด้วย โดย Scott Berinatorได้กล่าวสรุปในตอนท้ายว่า แท้จริงแล้ว หากเกิดเหตุการเจาะระบบขึ้นกับองค์กรของเรา เมื่อมองในมุมของลูกค้าองค์กรควรเป็นผู้ที่ต้องรับผิดชอบความเสียหายที่เกิดขึ้น ไม่ใช่แฮกเกอร์ที่กระทำการเจาะระบบ ความเสียหายที่ว่านั้นก็คือ ชื่อเสียงที่องค์กรสั่งสมมาเป็นระยะเวลาอันยาวนานสามารถพังย่อยยับในเวลาอันสั้นด้วยน้ำมือของแฮกเกอร์ได้
การรักษาความมั่นคงปลอดภัยเป็นกิจกรรมที่ต้องกระทำอย่างต่อเนื่อง การเกิดขึ้นของภัยและอาชญากรรมทางCyber ทำให้ทุกองค์กรจำต้องเตรียมมาตรการเพื่อรับมือกับภัยดังกล่าว ภัยที่อาจก่อให้เกิดความเสียหายแก่องค์กร ซึ่งประกอบไปด้วย การเปิดเผยความลับข้อมูลของลูกค้า การโจมตีระบบจนทำให้ระบบไม่สามารถใช้งานได้ หรือ ภัยคุกคามอื่นๆที่ทำให้ธุรกิจไม่สามารถดำเนินต่อไปได้ ล้วนสร้างผลกระทบให้แก่สถานะภาพทางการเงินขององค์กรอย่างรุนแรง นอกจากนี้องค์กรยังอาจสูญเสียความเชื่อมั่นและความเชื่อถือจากลูกค้าที่มีต่อองค์กรอย่างประเมินมูลค่าไม่ได้
ดังนั้นผู้เชี่ยวชาญด้านการพัฒนาโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยตามมาตรฐานสากล หรือ CSSLP ควรสามารถให้คำแนะนำวิธีการป้องกันไม่ให้องค์กรเสียชื่อเสียงและเสียความเชื่อมั่นของลูกค้า โดยให้รายละเอียด และ แนะนำการนำ Best Practices หรือ Framework มาใช้ในการพัฒนาโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยให้ได้ตามมาตรฐานสากล
2. เข้าใจธุรกิจและป้องกันระบบงานธุรกิจด้วยวิธีการที่เหมาะสมและปลอดภัย
ผู้เชี่ยวชาญด้านความมั่นคงปลอดภัยส่วนใหญ่มีความเห็นว่า ความรู้และความเชี่ยวชาญในด้านเทคโนโลยีตลอดจนความรู้ความเข้าใจในระบบธุรกิจเป็นสิ่งสำคัญอย่างยิ่งในการรักษาความมั่นคงปลอดภัยสำหรับองค์กร แต่หลายคนยังมีความเข้าใจว่าความมั่นคงปลอดภัยอาจเป็นอุปสรรคในการดำเนินธุรกิจเนื่องจากมีการตัดทอนความยืดหยุ่นในบางประการออกไปหรือบางคนมองว่าเป็นความสิ้นเปลืองเนื่องจากต้องใช้การลงทุนค่อนข้างสูง แต่ในความเป็นจริง ความมั่นคงปลอดภัยมีไว้เพื่อสนับสนุนธุรกิจ ยกตัวอย่างเช่น ทำไมรถยนต์ต้องมีเบรค คำตอบของคำถามนี้อาจตอบได้ 2 คำตอบคือ หนึ่งมีไว้เพื่อป้องกันเราจากอุบัติเหตุหรือหากเกิดอุบัติเหตุขึ้นจริงๆก็จะช่วยให้บรรเทาความรุนแรงลงได้ คำตอบที่สอง คือ เบรกมีไว้เพื่อให้เราสามารถขับรถได้เร็วยิ่งขึ้น หากเราขับรถโดยไม่มีเบรก แน่นอนเราต้องขับรถช้าๆไปเรื่อยๆ ซึ่งก็ไปถึงจุดหมายเหมือนกันก็อาจจะถึงช้ากว่าคนอื่น แต่หากเรามีเบรกในขณะที่คนอื่นไม่มี เราก็จะสามารถขับรถได้เร็วขึ้น หากเกิดปัญหาก็สามารถเบรกได้ ซึ่งจะทำให้เราไปถึงจุดหมายได้เร็วขึ้นและเร็วกว่าคนอื่นที่ไม่มีเบรก เปรียบได้กับความมั่นคงปลอดภัยของระบบซึ่งจะช่วยในกรณีที่ระบบมีปัญหาและป้องกันระบบ หากระบบเกิดล่มก็จะทำให้สามารถกู้ระบบกลับคืนกลับมาได้อย่างรวดเร็ว และ ทำให้ธุรกิจดำเนินไปได้อย่างต่อเนื่องโดยไม่ติดขัด
นอกจากผู้เชี่ยวชาญด้านการพัฒนาโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยตามมาตรฐานสากลควรมีความเข้าใจในระบบธุรกิจแล้ว ผู้เชี่ยวชาญฯ ควรมีความเข้าใจในเรื่อง กฎหมาย กฎเกณฑ์ข้อบังคับ ความเสี่ยง การควบคุมที่เหมาะสม และ การฝึกอบรมผู้ใช้งาน ยกตัวอย่าง เช่น ธนาคารที่มีระบบ Internet Banking ต้องดำเนินธุรกิจให้สอดคล้องกับ Regulatory Compliance ของธนาคารแห่งประเทศไทย เช่น Basel II ดังนั้น ธนาคารจึงจำเป็นต้องมีการจัดทำมาตรการป้องกันการขโมยข้อมูลทางด้านการเงิน ข้อมูลส่วนบุคคลของลูกค้า ซึ่งอาจจำเป็นต้องมีการใช้เทคโนโลยีด้านการพิสูจน์ตัวตนเช่น Two-Factor Authentication การเข้ารหัสข้อมูล การตรวจสอบการควบคุม และ ควรต้องมีการฝึกอบรมผู้ใช้งานหรือลูกค้าให้รู้จักป้องกันตนเองจากภัยที่เรียกว่า “Social Engineering” เช่น Phishing
3. เข้าใจเทคโนโลยีในการพัฒนาโปรแกรมประยุกต์
นอกจากผู้เชี่ยวชาญด้านการพัฒนาโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยตามมาตรฐานสากล หรือ CSSLP มีความจำเป็นที่ต้องเข้าใจธุรกิจแล้ว ยังมีความจำเป็นที่ต้องเข้าใจในเทคโนโลยีอีกด้วย เพื่อให้เกิดประสิทธิภาพในการพัฒนาระบบโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัย เพราะความไม่เข้าใจถึงเทคโนโลยีที่ใช้ในการพัฒนาระบบโปรแกรมประยุกต์อย่างลึกซึ้งนั้นอาจทำให้ระบบโปรแกรมประยุกต์ที่พัฒนาหรือจัดซื้อมาใช้นั้นไม่มีความมั่นคงปลอดภัยที่เพียงพอ
เมื่อมีการพัฒนาโปรแกรมประยุกต์ในองค์กร การทำความเข้าใจในโครงสร้างและองค์ประกอบต่างๆที่มีอยู่ เช่น การแบ่งแยกเครือข่าย (Segregation of Networks) การปิดช่องโหว่เซิร์ฟเวอร์และอุปกรณ์เครือข่าย (Network & Server Hardening) จุดอ่อนและจุดแข็งของภาษาที่ใช้ในการพัฒนาโปรแกรมประยุกต์หรือแม้กระทั่งเทคโนโลยีที่เรากำลังจะนำมาใช้งาน ย่อมเป็นปัจจัยสำคัญที่จะช่วยในการตัดสินใจเลือกเทคโนโลยีที่เหมาะสมมาใช้ในการพัฒนาโปรแกรมประยุกต์และเมื่อมีการจัดซื้อโปรแกรมประยุกต์ คุณสมบัติด้านความมั่นคงปลอดภัยที่ผู้จำหน่ายโปรแกรมประยุกต์อ้างว่าตนมีนั้น จำเป็นต้องมีการตรวจสอบเพื่อพิสูจน์ว่าเหมาะสมกับความต้องการขององค์กรรวมทั้งความต้องการทางด้านกฎหมายหรือไม่ ซึ่งในบางครั้งอาจจะมากหรือน้อยจนเกินไป ซึ่งการพิจารณาความเหมาะสมถึงคุณสมบัติด้านความมั่นคงปลอดภัยของโปรแกรมประยุกต์จะทำให้การพัฒนาโปรแกรมประยุกต์มีความมั่นคงปลอดภัยและมีประสิทธิภาพเพิ่มมากขึ้น
4. เข้าใจหลักการ GRC (Governance, Risk Management and Compliance), Information Classification และ Data Privacy
การใช้งานระบบสารสนเทศในยุคปัจจุบันมีกฏหมายกฎเกณฑ์ข้อบังคับมากมายเพื่อให้ทุกองค์กรต้องปฏิบัติตาม ดังนั้น การปฎิบัติตามหลักการแนวคิด GRC นั้นจึงไม่ใช่เป็นเพียงสิ่งที่ต้องทำเพียงชั่วระยะเวลาใดเวลาหนึ่งเท่านั้น แต่องค์กรต้องทำอย่างต่อเนื่อง การพัฒนาโปรแกรมประยุกต์ควรพัฒนาให้สอดคล้องไปกับกฏหมายโดยอัตโนมัติ ดังนั้นองค์กรควรต้องเข้าใจถึงกฏหมายและกฎเกณฑ์ต่างๆ ทั้งภายนอกและภายในองค์กร เพื่อมีประโยชน์ในการกำกับดูแลธุรกิจ และการควบคุมทางด้านความมั่นคงปลอดภัย และ เพื่อลดความเสี่ยงจากการพัฒนาโปรแกรมประยุกต์ รวมทั้งเพื่อให้สอดคล้องกับกฏหมายและกฎเกณฑ์ข้อบังคับทั้งในปัจจุบันและในอนาคต
5. เข้าใจหลักการด้านความมั่นคงปลอดภัยในการพัฒนาโปรแกรมประยุกต์
เมื่อองค์กร ต้องการพัฒนาระบบสารสนเทศและระบบโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยนั้น เราจำเป็นต้องทำความเข้าใจกับหลักการด้านความมั่นคงปลอดภัยบางประการ ซึ่งประกอบไปด้วย การป้องกันความลับของสารสนเทศ (Confidentiality Protection) การป้องกันการแก้ไขของสารสนเทศ (integrity Protection) การป้องกันการถูกทำลาย (Availability Protection) การพิสูจน์ตัวตน (Authentication) การให้สิทธิ์ (Authorization) การเก็บข้อมูลเพื่อการตรวจสอบ (Auditing) และ การบริหารจัดการ Configuration, Sessions และ Exceptions ของระบบ การที่เรามีความเข้าใจในหลักการดังกล่าว จะทำให้เรารู้ถึงวิธีการที่จะนำไปใช้งานได้อย่างมีประสิทธิภาพและมีประสิทธิผลมากขึ้น
กลไกการควบคุมบางอย่างที่เราสามารถนำหลักการดังกล่าวข้างต้นมาใช้งานจริง เช่น การเข้ารหัสข้อมูล ซึ่งสามารถใช้ควบคุมความลับได้ ขณะที่การทำ “Hashing” สามารถป้องกันการแก้ไขข้อมูลได้ การเข้ารหัสคือการแปลงข้อมูลที่สามารถอ่านได้ด้วยมนุษย์อย่างง่ายๆ (plain text) มาเป็นข้อมูลที่ไม่สามารถอ่านได้ (cipher text) การถอดรหัสเป็นการแปลงข้อมูลที่ถูกเข้ารหัส (cipher text) เป็นข้อมูลที่สามารถอ่านได้ (plain text) การเข้าและถอดรหัสจำเป็นต้องใช้กุญแจที่เป็นความลับ (secret key) ในการทำงาน เราจึงควรจัดเตรียม Infrastructure สำหรับการเข้าและถอดรหัสสารสนเทศ เช่น ระบบ PKI (Public Key Infrastructure)
6. ป้องกันข้อมูลที่มีความสำคัญ
การที่เราจะมั่นใจได้ว่าเราสามารถรักษาชื่อเสียงขององค์กรเราได้เป็นอย่างดี นั่นคือ การที่ข้อมูลที่มีความสำคัญสูงที่เก็บอยู่ในระบบสารสนเทศได้มีการป้องกันไว้อย่างปลอดภัย ข้อมูลที่มีความสำคัญสูง อาจหมายถึง ข้อมูลส่วนบุคคล ข้อมูลสุขภาพ ข้อมูลด้านการเงิน หรือ แม้กระทั่งข้อมูลจราจรทางคอมพิวเตอร์ที่เราต้องจัดเก็บเพื่อให้สอดคล้องกับหลักเกณฑ์การเก็บรักษาข้อมูลจราจรทางคอมพิวเตอร์ของผู้ให้บริการ พ.ศ.2550 ก็ถือว่าเป็นข้อมูลที่มีความสำคัญเช่นกัน ข้อมูลดังที่กล่าวมานี้หากถูกเปิดเผยไปสู่ที่สาธารณะย่อมจะส่งผลเสียให้กับองค์กรอย่างแน่นอน
การกำหนดให้ข้อมูลมีระดับความสำคัญสูงหรือต่ำไม่เท่ากันนั้น เรียกว่า “Data Classification” ซึ่งต้องพิจารณาจาก กฎเกณฑ์ กฎหมาย และ นโยบายขององค์กรร่วมกับเจ้าของข้อมูล (Owner) เพื่อให้ได้ระดับความสำคัญของข้อมูลที่ถูกต้องที่สุด และใช้เพื่อพิจาณาการควบคุมที่เหมาะสมตามระดับความสำคัญต่อไป ตลอดจนต้องเข้าใจถึงหลักการพิจารณาระดับความสำคัญของข้อมูลและวิธีการในการควบคุมและป้องกันข้อมูล ทั้งในขณะที่ข้อมูลถูกจัดเก็บ (Data at Rest) และ ขณะที่ข้อมูลมีการเคลื่อนไหวไปยังระบบอื่นๆ (Data in Transit)
7. ออกแบบโปรแกรมประยุกต์โดยคำนึงถึงความมั่นคงปลอดภัย
หลายคนเข้าใจผิดคิดว่าการพัฒนาโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยนั้น ต้องเน้นไปที่การเขียนโค้ดให้ปลอดภัย ซึ่งจริงๆ แล้วการเขียนโค้ดให้ปลอดภัยนั้น เป็นเพียงปัจจัยหนึ่งเท่านั้นที่จะทำให้ระบบสารสนเทศมีความมั่นคงปลอดภัยได้ ที่ถูกต้องคือ ควรพิจาณาเรื่องความมั่นคงปลอดภัยตั้งแต่ต้นจนจบกระบวนการพัฒนาโปรแกรมประยุกต์ หากเราเน้นเพียงการเขียนโค้ดให้ปลอดภัยนั้นจะทำให้ระบบของเราสามารถป้องกันภัยคุกคามได้เพียงบางประเภท เท่านั้น เช่น SQL Injection และ Cross-site scripting (XSS) จัดอยู่ในประเภท Technical Logic แต่ภัยคุกคามในประเภทอื่นๆ เช่น ช่องโหว่ด้าน Business Logic จะไม่สามารถป้องกันได้ ดังนั้นจำเป็นที่จะต้องมีการทำ Threat Modeling และ Abuse case modeling ก่อนการออกแบบและการพัฒนาโปรแกรมประยุกต์เสมอ เพื่อทำให้เราสามารถพิจาณาได้ว่ามีภัยคุกคามทั้งทางด้าน Business Logic และ Technical Logic ประเภทใดบ้าง ที่จะเข้ามาคุกคามระบบของเราได้
การทำ Threat Modeling เป็นกระบวนที่ใช้ในการพิจารณาภัยคุกคามที่มีโอกาสจะคุกคามระบบของเราได้ โดยเริ่มต้นจากการกำหนดวัตถุประสงค์ด้านความมั่นคงปลอดภัยของโปรแกรมประยุกต์ และ วิเคราะห์ถึงภัยคุกคามใดบ้างทั้งทางด้าน Logical และ Physical รวมทั้งด้าน Business Logic และ Technical Logic ทำให้เราเห็นภาพรวมของภัยที่ทำให้เราไม่สามารถบรรลุวัตถุประสงค์ด้านความมั่นคงปลอดภัยที่กำหนดไว้ได้ ในการทำ Threat modeling นั้น จำเป็นต้องใช้แผนผังต่างๆ เข้ามาช่วยในการวิเคราะห์ เช่น Data flow diagram, End-to-end deployment scenario, เส้นทางเข้าออกของระบบ , โปรโตคอลที่ใช้ในการติดต่อสื่อสาร , Component และ Service ต่างๆที่ใช้ในการพัฒนาระบบ
นอกจากนั้นแล้วจะต้องมีการวิเคราะห์ Attack Surface ซึ่งเป็นส่วนหนึ่งของการทำ Threat Modeling เพื่อพิจาณาทางเข้าที่มีทั้งหมดของระบบและกำหนดมาตการควบคุมและป้องกันการเข้าถึงสำหรับผู้ใช้งานระดับต่างๆ หรือ หากเป็นไปได้ ก็ควรที่จะลดจำนวนทางเข้าระบบให้น้อยที่สุดก็จะเป็นการลด Attack Surface ได้อีกวิธีหนึ่ง การทำ Threat Modeling นั้นเป็นกระบวนการที่จะต้องทำระหว่างขั้นตอนการออกแบบเพื่อส่งต่อข้อมูลผลการวิเคราะห์และการควบคุมที่จำเป็นให้กับทีมงานพัฒนาโปรแกรมประยุกต์ ดำเนินการพัฒนากระบวนการควบคุมให้มีประสิทธิภาพต่อไป
8. พัฒนาโปรแกรมประยุกต์โดยคำนึงถึงความมั่นคงปลอดภัย
การพัฒนาโปรแกรมประยุกต์ให้มีความมั่นคงปลอดภัยนั้นจะไม่เกิดผลเลยถ้าหากเราไม่คิดเรื่องความมั่นคงปลอดภัยตั้งแต่กระบวนการออกแบบโปรแกรมประยุกต์ในขั้นตอน “Design Phase” เรียกว่า “Secure by Design” เป็นการนำแนวคิดด้านความมั่นคงปลอดภัยมาประยุกต์ใช้ในวงจรการพัฒนาโปรแกรมประยุกต์ตั้งแต่ช่วงแรกๆ การเขียนโปรแกรมในทุกครั้งต้องนำตัวควบคุมด้านความมั่นคงปลอดภัยที่ได้ออกแบบไว้ในระยะของการออกแบบมาเขียนเป็นชุดคำสั่งหรือโปรแกรมที่ตัวแปลภาษาเข้าใจในขั้นตอนการพัฒนาโปรแกรม (Development Phase) ซึ่งสามารถกล่าวได้ว่าการพัฒนาโปรแกรมให้มีความมั่นคงปลอดภัยที่ได้มาตรฐานก็คือ การเขียนโปรแกรมให้สามารถใช้งานได้ตอบสนองความต้องการของผู้ใช้และความต้องการทางธุรกิจขององค์กร (Usable) และ ต้องมีความเสถียร (Reliable) รวมทั้งมีความยืดหยุ่นง่ายต่อการเพิ่มเติมแก้ไขในอนาคต (Scalable)
การควบคุมที่ถือว่าเป็นหลักการสำคัญของความมั่นคงปลอดภัยในการพัฒนาโปรแกรมประยุกต์ได้แก่ การตรวจสอบโปรแกรมโดยการทำกระบวนการ “Security Code Review” และ กระบวนการ “Security Testing” การทดสอบในลักษณะนี้ ควรมีการสอบทาน (review) ขณะที่อยู่ในขั้นตอนการพัฒนาโปรแกรมและก่อนที่จะมีการนำโปรแกรมไปใช้งาน (Release) การทำ Security Code Review อาจทำได้โดยวิธีการแบบ Automated หรือ วิธีการแบบ Manual ก็ได้ อย่างไรก็ตามเครื่องมือในการทำกระบวนการ Security Code Review ก็ไม่สามารถช่วยในการ review ได้ทั้งหมด 100 % เนื่องจากการใช้เครื่องมือดังกล่าวอาจทำให้เกิดผลที่เป็น False positive หรือ False negative ได้ ซึ่งอาจจะทำให้พบช่องโหว่มากหรือน้อยกว่าความเป็นจริง แต่อย่างไรก็ตามเครื่องมือสอบทาน Source Code ก็สามารถทำให้เรารู้ได้ว่าส่วนไหนของโปรแกรมมีข้อบกพร่องที่ควรได้รับการแก้ไข หากเราพยายามลดอัตราการเกิด False positive หรือ False negative ได้มากขึ้นก็อาจจะทำให้เครื่องมือไม่สามารถตรวจหาช่องโหว่ได้ไม่ครบถ้วน ดังนั้นเครื่องมือจึงไม่อาจสามารถทำแทนมนุษย์ซึ่งเปรียบเสมือนเป็นเครื่องมือที่ดีที่สุดได้ และ ที่สำคัญที่สุดการกำหนด ขอบเขต เนื้อหา Coding Standard วิธีการในการเขียน Code ให้ปลอดภัย ขั้นตอนในการ Review Code ด้วยการแบ่งแยกหน้าที่ที่เหมาะสม (Separation of Duties) ต้องมีการนำมาบังคับใช้เพื่อให้การทำ Security Code Review เป็นไปอย่างมีประสิทธิภาพ
การทดสอบด้านความมั่นคงปลอดภัย (Security Testing) ก็เป็นสิ่งสำคัญนอกเหนือไปจากการทดสอบด้าน Functionality ที่มีการทดสอบกันโดยปกติอยู่แล้ว อย่างน้อยที่สุดควรมีการทดสอบช่องโหว่ (Vulnerability) ที่ถือว่าเป็นช่องโหว่ขั้นพื้นฐานที่เป็นช่องโหว่ที่พบกันมากที่สุดในการพัฒนาโปรแกรมประยุกต์ เช่น Buffer Overflow และ SQL Injection หรืออาจจะใช้เทคนิคใหม่ที่เรียกว่า “Fuzzing” เพื่อทดสอบการสุ่มค่า input ที่แปลกปลอมในหลากหลายรูปแบบที่อาจจะทำให้ระบบทำงานผิดพลาดได้ การทดสอบควรมีการทดสอบในระบบที่มีไว้เพื่อการทดสอบโดยเฉพาะ นอกจากนั้นแล้วควรมีการทดสอบด้านความเสถียรและประสิทธิภาพโดยรวมของโปรแกรมประยุกต์ (Stress and Performance Test) ซึ่งหมายถึงความพร้อมใช้งานของโปรแกรมประยุกต์ (Availability) ด้วย
9. นำโปรแกรมประยุกต์ไปใช้งานโดยคำนึงถึงความมั่นคงปลอดภัย
นักพัฒนาโปรแกรมประยุกต์หลายคนยอมรับว่า โปรแกรมประยุกต์ที่ผ่านการพัฒนาและทดสอบมาอย่างดี กลับมีปัญหาเมื่อนำไปใช้งานจริง จริงๆ โดยปัญหานี้เกิดขึ้นจากระบบที่ทำการทดสอบ (develop and test environment) เปรียบเทียบกับระบบงานจริง (production environment) นั้นไม่เหมือนกัน 100% เหตุเพราะขาดเรื่อง Configuration Management และ Change Management (ITIL concept) การเปลี่ยนแปลงที่เกิดขึ้นกับระบบงานจริงก็ควรมีการนำไปปรับปรุงในระบบงานทดสอบด้วย โดยกระบวนการนี้ควรมีการพัฒนาขึ้นมาผนวกเข้ากับกระบวนการพัฒนาโปรแกรมประยุกต์ด้วย
นอกจากนั้น ยังมีสาเหตุมาจาก Release management ซึ่งประกอบไปด้วยการควบคุม Source Code และเวอร์ชั่นของโปรแกรมประยุกต์ ซึ่งสาเหตุดังกล่าวนี้มักจะก่อให้เกิดเหตุการณ์ที่เรียกว่า regenerative bugs ซึ่งหมายถึงมี bug เกิดเพิ่มขึ้นเรื่อยๆ โดยไม่รู้ว่า bug นั้นมาจากไหน ซึ่งจริงๆแล้วก็เกิดมาจากการที่ไม่มีการบริหารจัดการ Release ที่เหมาะสมนั่นเอง regenerative bug เกิดขึ้นเนื่องจาก bug ที่ตรวจพบในระหว่างการทดสอบโดยผู้ใช้งานในช่วง User Acceptance Test (UAT) ถูกแก้ไขในระบบทดสอบ (test environment) และนำขึ้นไปใช้งานจริงเลย แต่เวอร์ชั่นของโปรแกรมประยุกต์ล่าสุดที่อยู่ในระบบเพื่อการพัฒนา (development environment) ยังไม่ได้รับการแก้ไขตามระบบทดสอบ
การจะนำโปรแกรมประยุกต์ไปใช้งานได้อย่างมั่นคงปลอดภัยนั้น จำเป็นที่ต้องมีการตรวจสอบช่องโหว่ (Vulnerability Assessment) และการทดสอบเจาะระบบ (Penetration Testing) ก่อนที่จะนำไปใช้งานจริงทั้ง Pre-Production และ Real Production (with tight control) เพราะจะทำให้ทีมพัฒนารู้ว่าโปรแกรมประยุกต์มีช่องโหว่หลงเหลือที่จุดใดบ้างเพื่อที่จะใช้เป็นข้อมูลเทคนิคเชิงลึกในการปรับปรุงโปรแกรมประยุกต์เพื่อปิดช่องโหว่ก่อนนำโปรแกรมประยุกต์ไปใช้งานจริง
การนำโปรแกรมประยุกต์ไปใช้งานอย่างปลอดภัยนั้นทำให้เรามั่นใจได้ว่าโปรแกรมประยุกต์สามารถทำงานได้จริง (functionality) และ มีความมั่นคงปลอดภัย (secure) ในขณะเดียวกันก็เรายังสามารถมั่นใจได้อีกว่าโปรแกรมประยุกต์ถูกนำไปใช้งานโดยมีการป้องกันแบบหลายชั้น (defense-in-depth) และ ปิดช่องทางที่อาจจะถูกโจมตีโดยผู้บุกรุกไม่ให้เข้ามาโจมตีโดยง่าย (minimize attack surface)
10. หมั่นศึกษาหาความรู้ด้านการพัฒนาโปรแกรมประยุกต์อย่างปลอดภัย
ต้องยอมรับว่าในโลกปัจจุบัน เมื่อโปรแกรมประยุกต์ถูกนำมาใช้งานในชีวิตประจำวันก็ย่อมจะต้องมีการปรับปรุงอย่างต่อเนื่องอยู่เสมอ หนึ่งในการปรับปรุงนั้นก็คือ การออก “patch” จากผู้พัฒนาโปรแกรมประยุกต์ซึ่งเป็นส่วนเล็กๆของโปรแกรมประยุกต์ที่ให้ผู้ใช้นำไปปรับปรุงโปรแกรมของตนทั้งด้านความมั่นคงปลอดภัยและด้านการทำงานของโปรแกรม เนื่องจากช่องโหว่และวิธีการโจมตีใหม่ๆเกิดขึ้นทุกวัน อย่างไรก็ตามหากมีการออก patch เพื่อให้ผู้ใช้งานติดตั้ง แต่ผู้ใช้งานไม่รู้และไม่คำนึงถึงประโยชน์ที่ได้จากการติดตั้ง patch ก็จะทำให้ patch นั้นๆ ไม่มีความหมายใดๆเลย ในที่สุดก็จะส่งผลทำให้ระบบเกิดช่องโหว่เพิ่มขึ้นมากมาย ดังนั้นเพื่อให้ทั้งทีมผู้พัฒนาโปรแกรมประยุกต์ตลอดจนผู้ใช้งานสามารถที่จะพัฒนาโปรแกรมประยุกต์ที่มีความมั่นคงปลอดภัยและใช้โปรแกรมประยุกต์ได้อย่างปลอดภัยนั้น จำเป็นต้องมีการพัฒนาความรู้ตลอดเวลาและมีการพัฒนาการศึกษาให้เป็นวัฒนธรรมขององค์กร เพื่อให้ทุกคนที่เกี่ยวข้องในการพัฒนาโปรแกรมประยุกต์เข้าใจถึงภัยคุกคามที่อาจจะเกิดขึ้นกับระบบหรือนั่นอาจหมายความว่า เมื่อระบบถูกบุกรุกหรือถูกโจมตีแล้วนั้นอาจทำให้เกิดผลกระทบกับธุรกิจและสุดท้ายก็จะส่งผลกระทบกับทุกคนภายในองค์กรได้ ทางแก้ปัญหาที่ดีที่สุด คือ การจัดอบรม Information Security Awareness Training ให้แก่ทุกคนในองค์กรเป็นประจำในทุกปี โดยเฉพาะผู้ใช้โปรแกรมประยุกต์ ดังนั้นทุกคนในองค์กรจำเป็นต้องศึกษาหาความรู้และแบ่งปันความรู้ให้แก้ผู้อื่นและสุดท้ายก็จะเกิดเป็นวัฒนธรรมและสังคมความมั่นคงปลอดภัยในองค์กรขึ้นในที่สุด