การรักษาความปลอดภัยเป็นพื้นฐานของการปกป้องทรัพย์สิน เช่น เว็บเพจหรือข้อมูลลูกค้าในฐานข้อมูล ขณะที่คุณวิเคราะห์โครงสร้างพื้นฐานและแอปพลิเคชันของคุณ คุณจะสามารถระบุภัยคุกคามที่อาจเกิดขึ้นได้ และสามารถเข้าใจได้ว่าว่าภัยคุกคามแต่ละรายการมีความเสี่ยงในระดับใด การรักษาความปลอดภัยเป็นเรื่องเกี่ยวกับการจัดการความเสี่ยงและการใช้มาตรการที่มีประสิทธิภาพ
รากฐานของความปลอดภัย (The Foundations of Security)
ความปลอดภัยขึ้นกับองค์ประกอบดังต่อไปนี้
การรับรองความถูกต้อง (Authentication)
Authentication เป็นกระบวนการระบุไคลเอ็นต์ของแอปพลิเคชันของคุณ เป็นสิ่งที่ระบุว่าคุณเป็นใคร สิ่งเหล่านี้อาจเป็นผู้ใช้ปลายทาง บริการ กระบวนการ หรือคอมพิวเตอร์ ไคลเอ็นต์ที่รับรองความถูกต้องเรียกว่าตัวการ
Authorization เป็นกระบวนการที่ควบคุมทรัพยากรและการดำเนินการที่ไคลเอ็นต์ที่ผ่านการรับรองความถูกต้องได้รับอนุญาตให้เข้าถึง หรือการระบุว่าคุณสามารถทำอะไรได้บ้าง ทรัพยากรประกอบด้วยไฟล์ ฐานข้อมูล ตาราง แถว และทรัพยากรระบบ เช่น รีจิสตรีคีย์และข้อมูลการกำหนดค่า การดำเนินการรวมถึงการดำเนินการธุรกรรม เช่น การดำเนินการ CRUD
การตรวจสอบบัญชี (Auditing )
การตรวจสอบและการบันทึกที่มีประสิทธิภาพเป็นกุญแจสำคัญในการไม่ปฏิเสธ ซึ่งรับประกันว่าผู้ใช้ไม่สามารถปฏิเสธการดำเนินการได้
Confidentiality คือกระบวนการทำให้แน่ใจว่าข้อมูลยังคงเป็นส่วนตัวและเป็นความลับ และไม่สามารถดูได้โดยผู้ใช้ที่ไม่ได้รับอนุญาตหรือผู้ที่ติดตามทราฟฟิกผ่านเครือข่าย การเข้ารหัสมักใช้เพื่อบังคับใช้การรักษาความลับ รายการควบคุมการเข้าถึง (ACL) เป็นอีกวิธีหนึ่งในการบังคับใช้การรักษาความลับ
คือการรับรองว่าข้อมูลจะไม่ถูกกระทำการใด ๆ อันมีผลให้เกิดการ เปลี่ยนแปลงหรือแก้ไขจากผู้ซึ่งไม่มีสิทธิ ไม่ว่าการกระทำนั้นจะมีเจตนาหรือไม่ก็ตาม
Availability คือการรับรองได้ว่าข้อมูลหรือระบบเทคโนโลยีสารสนเทศ ทั้งหลายพร้อมที่จะให้บริการในเวลาที่ต้องการใช้งาน
หากยังไม่ทราบถึงภัยคุกคามที่จะเกิดขึ้น ก็จะยังไม่สามารถออกแบบ web application ที่ปลอดภัยได้ กฏหนึ่งที่สำคัญเป็นอย่างมากและแนะนำให้เป็นส่วนหนึ่งของขั้นตอนการออกแบบแอปพลิเคชันของคุณคือ วัตถุประสงค์ของการสร้างแบบจำลองภัยคุกคามคือการวิเคราะห์สถาปัตยกรรมและการออกแบบของแอปพลิเคชัน ที่จะช่วยระบุพื้นที่ที่อาจเสี่ยงซึ่งอาจเกิดจากความผิดพลาดของผู้ใช้งานเอง หรือผู้โจมตีที่มีเจตนาร้าย เพื่อการนั้นแล้ว การออกแบบด้วยความปลอดภัยโดยใช้หลักการความปลอดภัยที่ถูกพิสูจน์แล้ว ในฐานะนักพัฒนา คุณควรปฏิบัติตามเทคนิคการเข้ารหัสที่ปลอดภัยเพื่อพัฒนาโซลูชันที่ปลอดภัยและแข็งแกร่ง โดยการออกแบบและพัฒนาซอฟต์แวร์ชั้นแอปพลิเคชันต้องได้รับการสนับสนุนโดยเครือข่ายที่ปลอดภัย โฮสต์ และการกำหนดค่าแอปพลิเคชันบนเซิร์ฟเวอร์ที่จะปรับใช้ซอฟต์แวร์แอปพลิเคชัน
แนวทางการออกแบบเพื่อความปลอดภัย
โครงสร้างเครือข่ายนั้ประกอบไปด้วย routers firewall และ switch โดยบทบาทของเครือข่ายที่ปลอดภัยไม่เพียงป้องกันตัวเองจากการโจมตีตาม TCP/IP แต่ยังสามารถใช้มาตรการตอบโต้ได้ เช่น อินเทอร์เฟซการดูแลระบบที่ปลอดภัยและรหัสผ่านที่รัดกุม นอกจากนี้แล้วเครือข่ายที่ปลอดภัย ยังมีหน้าที่รับผิดชอบในการตรวจสอบข้อมูลที่กำลังถูกส่งอยู่ว่ามีความสมบูรณ์ดีหรือไม่ หากคุณทราบถึงเกี่ยวกับ port protocal หรือการสื่อสารที่อาจเป็นอันตรายที่ที่ระดับชั้นของเครือข่ายใด ให้ทำการตอบโต้ภัยคุกคามที่อาจเกิดขึ้นที่ระดับชั้นนั้น
หมวดหมู่
คำอธิบาย
Router
เราเตอร์เป็นวงแหวนเครือข่ายชั้นนอกสุด มีหน้าที่ส่งแพ็กเก็ตไปยัง Port และ Protocal ที่แอปพลิเคชัน ช่องโหว่ด้าน TCP/IP ทั่วไปมักถูกบล็อกที่วงแหวนนี้
Firewall
Firewall จะทำการบล็อค protocol และ ports ที่ applicationไม่ได้ใช้ นอกจากนี้ ไฟร์วอลล์ยังบังคับให้ใช้ทราฟฟิกเครือข่ายที่ปลอดภัยด้วยการกรองเฉพาะแอปพลิเคชันเพื่อบล็อกการสื่อสารที่เป็นอันตราย
Switch
Switch ใช้เพื่อแยกส่วนของเครือข่าย มักถูกมองข้ามหรือเชื่อถือมากเกินไป
สำหรับปัญหาด้านความปลอดภัยของ web application อันดับต้นๆ ในบทนี้จะรวบรวมไว้เป็นหมวดหมู่เอาไว้
ตารางหมวดหมู่ช่องโหว่ของแอปพลิเคชัน
หมวดหมู่
คำอธิบาย
การตรวจสอบค่าที่ถูกป้อน (Input Validation)
คุณจะไม่มีทางทราบเลยว่าข้อมูลที่กรอกลงมาในแอปพลิเคชันของคุณนั้นถูกต้องและปลอดภัย การตรวจสอบอินพุตหมายถึงวิธีที่แอปพลิเคชันของคุณกรอง ขัด หรือปฏิเสธอินพุตก่อนดำเนินการเพิ่มเติม
การตรวจสอบตัวตน (Authentication)
การรับรองความถูกต้อง (Authentication) เป็นกระบวนการที่เอนทิตีพิสูจน์ตัวตนของเอนทิตีอื่น โดยทั่วไปจะใช้ข้อมูลประจำตัว เช่น ชื่อผู้ใช้และรหัสผ่าน
การอนุญาต (Authorization)
Authorization เป็นวิธีที่แอปพลิเคชันของคุณจัดเตรียมการควบคุมการเข้าถึงสำหรับทรัพยากรและการดำเนินการต่างๆ
การจัดการการตั้งค่า (Configuration Management)
ตรวจสอบว่าแอปพลิเคชันของคุณทำงานอย่างไร เชื่อมต่อกับฐานข้อมูลใด ใครคือผู้ดูแลระบบของแอป และการรักษาความปลอดภัยถูกตั้งค่าไว้อย่างไร หัวข้อเหล่านี้คือ การจัดการการตั้งค่า ซึ่งเป็นวิธีที่แอปพลิเคชันของคุณจัดการกับปัญหาการดำเนินงานเหล่านี้
ข้อมูลที่อ่อนไหว (Sensitive Data)
วิธีการที่แอปพลิเคชันของคุณจัดการกับข้อมูลใดๆ ที่ต้องได้รับการปกป้องทั้งในหน่วยความจำ ผ่านสาย หรือในที่จัดเก็บถาวร
การจัดการข้อมูลการใช้งานเครือข่าย (Session Management)
เซสชันหมายถึงชุดของการโต้ตอบที่เกี่ยวข้องระหว่างผู้ใช้และเว็บแอปพลิเคชันของคุณ การจัดการเซสชันหมายถึงวิธีที่แอปพลิเคชันของคุณจัดการและปกป้องการโต้ตอบเหล่านี้
การเข้ารหัส (Cryptography)
ตรวจสอบว่าแอปพลิเคชันคุณเก็บชุดข้อมูลที่ควรถูกรักษาเป็นความลับอย่างไร และหากมีการแก้ไขชุดข้อมูลนั้นจะต้องทำอย่างไร ใน การเข้ารหัสนี้จะเป็นการพูดถึงการจัดการชุดข้อมูลที่ควรเป็นความลับ ทั้งในการจัดเก็บและการแก้ไข
การจัดการตัวแปร (Parameter Manipulation)
ฟิลด์ฟอร์ม อาร์กิวเมนต์ของสตริงข้อความค้นหา และค่าคุกกี้มักถูกใช้เป็นพารามิเตอร์สำหรับแอปพลิเคชันของคุณ การจัดการพารามิเตอร์หมายถึงวิธีที่แอปพลิเคชันของคุณป้องกันการดัดแปลงค่าเหล่านี้ และวิธีที่แอปพลิเคชันของคุณประมวลผลพารามิเตอร์อินพุต
ด้านการจัดการข้อผิดพลาด
(Exception Management)
การจัดการข้อผิดพลาดคือการตอบสนองเมื่อมีการเรียกใช้งานบางอย่างในแอปพลิเคชันเกิดความล้มเหลว แล้วแอปพลิเคชันนั้นมีการตอบสนองไปยังผู้ใช้งานที่ทำให้ผู้ใช้งานยังใช้งานส่วนอื่นของแอปพลิเคชันได้หรือไม่
(การตรวจสอบและการบันทึก) Auditing and Logging
เป็นการตรวจสอบว่าใครกำลังทำอะไร และมีการบันทึกแต่ละการกระทำหรือไม่ ซึ่งเป็นการทำเพื่อเมื่อเกิดเหตุการณ์ที่ไม่คาดฝันซึ่งเกี่ยวข้องกับความปลอดภัย เราจะสามารถตรวจสอบภายหลังได้
สรุป
มีการโจมตีทางเครือข่ายมากมายที่อาจมุ่งเป้ามาที่แอปพลิเคชันของคุณ ซึ่งพวกเขาอาจผ่านเข้ามาทาง HTTP ดังนั้น การแยกใช้การป้องกันแบบ fortress firewall และ ตัวป้องกัน host นั้นอาจไม่เพียงพอ เพื่อป้องกันแอปพลิเคชันของคุณ คุณควรใช้งานร่วมกันทั้ง 3 ส่วน เพื่อป้องกันทั้งในชั้นเครือข่าย (Network layor) ชั้นโฮสต์ (Host layer) และชั้นแอปพลิชัน นอกจากนี้แล้ว เครือข่ายที่ปลอดภัยและโครงสร้างพื้นฐานของแพลตฟอร์มโฮสต์นั้นเป็นสิ่งจำเป็น ดังนั้น แอปพลิเคชันของคุณจึงควรออกแบบและสร้างโดยใช้แนวทางการออกแบบและการพัฒนาที่ปลอดภัยตามหลักการความปลอดภัย (security principles)
แหล่งอ้างอิง [1] Microsoft, "Microsoft Pattern & Practices proven practices for predictable results", Web Application Security Fundamentals, Chapter 1, Network Component Categories, Table 1.1: Avaliable: https://msdn.microsoft.com/en-us/library/ff648636.aspx#c01618429_008. [Accessed Nov 14, 2017]. [2] Microsoft, "Microsoft Pattern & Practices proven practices for predictable results", Web Application Security Fundamentals, Chapter 1, Rationale for Host Configuration Categories, Table 1.2: Avaliable: https://msdn.microsoft.com/en-us/library/ff648636.aspx#c01618429_008. [Accessed Nov 14, 2017]. [3] Microsoft, "Microsoft Pattern & Practices proven practices for predictable results", Web Application Security Fundamentals, Chapter 1, Application Vulnerability Categories, Table 1.3: Avaliable: https://msdn.microsoft.com/en-us/library/ff648636.aspx#c01618429_008. [Accessed Nov 14, 2017].