บทที่ 8 WEB APPLICATION SECURITY

บทที่ 8 WEB APPLICATION SECURITY  

เว็บแอปพลิเคชั่นหมายถึง แอปพลิเคชั่นที่สามารถเข้าใช้งานผ่านเว็บบราวเซอร์ หรือ HTTP(s) agent
(พอร์ต 80 หรือ 443) องค์ประกอบของเว็บแอปพลิเคชั่นนั้นประกอบด้วย


• Web Application เป็นซอฟต์แวร์หลักที่ให้ผลลัพธ์เป็นข้อมูลและการทำงานต่างๆ ทำงานอยู่ใน
Application Server
• Web Server เป็นเซิร์ฟเวอร์ที่ให้บริการคือการตอบสนองต่อการร้องขอการทำงานต่างๆ ผ่านเว็บ
• Application Server เป็นเซิร์ฟเวอร์ที่ Web Application ทำงาน
• Database Server เป็นเซิร์ฟเวอร์ฐานข้อมูลที่เก็บข้อมูลต่างๆ ของ Web Application

นอกจากองค์ประกอบหลักของระบบแล้วอาจมีส่วนเสริมให้ระบบทำงานอย่างมีประสิทธิภาพมากขึ้น
โดยเพิ่มเติม Firewall, Load Balancer, Reverse Proxy Server, Cache System และองค์ประกอบอื่นๆ ปัญหาที่
อาจจะเกิดขึ้นในแต่ละส่วนของเว็บแอปพลิเคชั่นสามารถเกิดขึ้นได้ทุกๆ ส่วนในการทำงานตั้งแต่ web client ไป
จนถึง database sever ดังสรุปในตาราง

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

ตัวอย่างเทคนิคต่างๆ ที่ใช้ในการโจมตีเว็บแอปพลิเคชั่น
• Hidden Field Manipulation
• Cookie Poisoning
• Backdoors and debug options
• Application buffer overflows
• Stealth commanding
• 3rd party misconfigurations
• Known vulnerabilities
• Parameter tempering
• Cross site scripting
• Forceful browsing
• Hacking over SSL
• Sourcecode Disclosure
• Web Server Architecture Attack
• SQL Injection
• Java Script Injection

Hidden Field
สาเหตุเกิดจากเว็บแอปพลิเคชั่น ส่งข้อมูลส่วนหนึ่งไปเก็บไว้ที่ไคลเอนต์ โดยใช้ hidden field แล้วนำค่า
ดังกล่าวมาใช้งานอีกครั้งหนึ่งตอนโพรเซสเพื่อแสดงหน้าเพจถัดไป ในการทำงานลักษณะนี้ผู้บุกรุกสามารถ
เปลี่ยนแปลงค่า hidden field เพื่อ สร้างความเสียหาย เปลี่ยนแปลงการทำงานของเว็บแอปพลิเคชั่น หรือให้ได้
ผลลัพธ์ที่ต้องการ ในการโจมตีในลักษณะนี้ผู้โจมตีจะดูโค้ดของเว็บเพจนั้นๆ (View Source) แล้วแก้ไข Tag
HIDDEN ให้กลายเป็นค่าอื่นๆ ที่สามารถนำไปประมวลผลต่อในเซิร์ฟเวอร์ หรือ Application ได้


Cookie Poisoning
ในการเก็บข้อมูลของ Cookie สำหรับการให้บริการเว็บนั้น โดยวัตถุประสงค์คือการเก็บข้อมูล
รายละเอียดบางอย่างของผู้ใช้งานเว็บเพจนั้นๆ หรือผู้ใช้คนนั้นๆ ว่ามีความสนใจด้านใดเป็นพิเศษ ต้องการ
ปรับแต่งค่าการนำเสนอข้อมูลอย่างไร รวมถึงอาจมีการเก็บข้อมูลเกี่ยวกับ Session ของการเชื่อมต่อไปยังเว็บ
แอปพลิเคชั่น เมื่อมีการเปลี่ยนแปลงค่าใน cookie ย่อมสามารถเปลี่ยนแปลงค่าต่างๆ แม้กระทั่งการเปลี่ยนแปลง
ค่า Session ID ของการเชื่อมต่อได้ ซึ่งทำให้เกิดปัญหาการเข้าถึงทรัพยากรของบุคคลอื่นๆ ได้ สำหรับข้อมูลที่
เก็บอยู่ใน cookie นั้นจะไม่มีความปลอดภัยหากไม่มีการเข้ารหัส หรือเข้ารหัสไว้ไม่ดีพอ


Secure Coding
สำหรับปัญหาที่นอกเหนือจากปัญหาการตั้งค่าต่างๆ ในเว็บเซิร์ฟเวอร์ และปัญหาเกี่ยวกับเครือข่ายก็คือ
ปัญหาในการเขียนโค้ดในเว็บแอปพลิเคชั่น ซึ่งสาเหตุที่ทำให้เกิดปัญหานี้ได้นั้นก็อยู่ที่โปรแกรมเมอร์ที่พัฒนา
เว็บแอปพลิเคชั่นยังไม่ได้คำนึงถึงการป้องกันการทำงานที่ไม่ได้อยู่ในการควบคุมของโปรแกรม เช่นการควบคุม
พารามิเตอร์บางอย่างและการตรวจสอบข้อมูลที่รับเข้ามาว่าเป็นข้อมูลที่ถูกต้องและเป็นปกติหรือไม่
ในการเขียนโค้ดให้เกิดความปลอดภัยนั้นเราจะต้องเพิ่มเติมการทำงานจากการทำงานปกติคือ
• การทำ input & output validation
• การใช้ SSL
• การใช้ HTML forms
• การใช้ Cookies
• การใช้ HTTP REFERER Header
• การใช้ POST & GET method
• มีกระบวนการในการทำ logout (logout machanism)
• Error Handling

การใช้ Cookies
Cookies เป็นเนื้อที่ในการเก็บข้อมูลในการทำงานบางส่วนไว้ที่ไคลเอนต์โดย Cookie มีอยู่ 2 ประเภทคือ
persistent : เป็น Cookie ที่ไม่มีการลบข้อมูลออกแม้ว่าจะปิดแอปพลิเคชั่นไปแล้วก็ตาม
non-persistent : เป็น Cookie ที่จะลบข้อมูลออกจากไคลเอนต์เมื่อหมดเวลา หรือเมื่อปิดแอปพลิเคชั่นไปแล้ว
Cookies นั้นมีประโยชน์สำหรับเว็บแอปพลิเคชั่นในการทำงาน 3 ลักษณะคือ
• User Authentication
• State Management
• Saving user preference
หลักการในการใช้งาน Cookies เพื่อความปลอดภัย
• ไม่ควรเก็บข้อมูลใน Cookies เป็น Plaintext หรือเข้ารหัสข้อมูลแบบหลวมๆ
• ควรคำนึงไว้เสมอๆ ว่าข้อมูลใน Cookies นั้นไม่ปลอดภัย
• ถ้าใช้งาน Cookies ควรระมัดระวังสองกรณีคือ ไม่ควรมีคนอื่นๆ มาใช้งาน Cookies ได้ และไม่ควรมี
ใครรู้ข้อมูลใน Cookies ไม่ว่ากรณีใดๆ
• ควรมีการเซต restrictive path ใน Cookies
• ในการตรวจสอบ Authentication นั้นไม่ควร valid ถ้าทำงานเกินช่วงเวลาที่ตั้งไว้
• ข้อมูลที่เก็บไว้ใน Cookies ควรเป็นข้อมูลที่ใช้ชั่วคราวเท่านั้น
• ในการสร้าง Token ID ควรใช้อัลกอริทึมที่มีประสิทธิภาพ ไม่สามารถคาดเดาได้
• ใช้ Cookies Timeout สำหรับลบ Cookies ที่ไม่มีการใช้งานออกจากระบบ
• การทำ Authentication ควรใช้ข้อมูลของไอพีแอดเดรสมาประกอบด้วยโดย สำหรับ Business Intranet
ควรใช้ไอพีแอดเดรสทั้ง 32 บิต สำหรับการใช้งานเว็บทั่วๆ ไป ควรใช้ข้อมูล 16 บิต มาประกอบการทำ
authentication ด้วย
• ในการทำ Authentication ควรใช้ข้อมูลเกี่ยวกับไคลเอนต์มาประกอบด้วยเช่นการใช้ header ที่เป็น
ค่าคงที่และแตกต่างกันในแต่ละไคลเอนต์เช่น User-Agent , Accept-Language , Etc.

• สำหรับ Authentication Cookies ถ้านำมาใช้งานครั้งหนึ่งแล้ว ก็ไม่ควรนำมาใช้งานอีก
การใช้ HTTP REFERER Header
การป้องกัน script attack อีกทางหนึ่งที่สามารถป้องกัน script attack ได้บ้างคือการใช้ HTTP
REFERER header แต่ก็ไม่สามารถป้องกันได้ทั้งหมด เนื่องจาก HTTP REFERER นั้นก็ยังเป็นข้อมูลในฝั่ง
ไคลเอนต์ที่สามารถปลอมแปลงได้เช่นกัน
การใช้ POST & GET method
ไม่ควรใช้ method GET ในการส่งข้อมูลที่มีความสำคัญ เนื่องจากข้อมูลจะไปปรากฏในอุปกรณ์หลายๆ
อย่างในเส้นทางที่แพ็กเก็ตผ่านไปเช่น Proxy Server, Firewall , Web Servers log เป็นต้น ในกรณีที่เว็บ
แอปพลิเคชั่นมีการใช้งาน POST เท่านั้น ก็ควรตั้งค่าให้เว็บเซิร์ฟเวอร์ตอบสนองเฉพาะ POST เท่านั้น และไม่
ตอบสนองต่อ method อื่นๆ เลย การทำเช่นนี้สามารถป้องกันการโจมตีโดยใช้ client side script ได้ ถึงแม้ว่า
POST method จะใช้งานได้ดีและปลอดภัยมากกว่า GET แต่ก็ยังไม่สามารถป้องกันการดักจับข้อมูลได้
มีกระบวนการในการทำ logout (logout machanism)
การเพิ่มกระบวนการในการ logout ในการทำงานต่างๆ ในเว็บแอปพลิเคชั่นนั้น มีประโยชน์ในการ
ลบ Cookies หรือทำให้ Cookies ที่ฝั่งไคลเอนต์ไม่สามารถทำงานได้ จัดการกับ session ทางฝั่งเซิร์ฟเวอร์เพื่อ
ป้องกันการขโมย session ในกรณีที่ Cookies ที่ไคลเอนต์ยังไม่หมดอายุ


Error Handling Mechanism
การทำ Error Handling ที่มีการแจ้ง Error Description นั้นเป็นประโยชน์ในการดีบักปัญหาต่างๆ แต่ไม่
ควรส่ง Error Description ต่างๆ ไปให้ยูสเซอร์ เนื่องจากจะทำให้ผู้บุกรุกสามารถรู้รายละเอียดในระบบได้ ใน
กรณีที่จำเป็นต้องส่ง Error Desciption ต่างๆ ไปให้ยูสเซอร์ ก็ควรมีการกรองข้อมูลก่อนที่จะส่งด้วย ในการแจ้ง
Error Desciption ก็ไม่ควรแจ้งลงรายละเอียดมากเกินไปจนทำให้ผู้บุกรุกสามารถคาดเดาได้ว่าระบบมีข้อมูล และ
การทำงานอย่างไร เช่น การแจ้งปัญหาในการลอกอินสู่ระบบ ถ้ามียูสเซอร์ป้อนรหัสผ่านผิด ก็ควรแจ้งว่ามีปัญหา
ในการลอกอิน โดยปัญหาอาจเกิดจาก Username หรือ Password แต่ไม่ควรแจ้งว่าปัญหาอยู่เฉพาะ Password
เพราะจะทำให้ผู้บุกรุกระบบทราบว่าในระบบมี Username นี้อยู่ในระบบทันที

ไม่มีความคิดเห็น:

แสดงความคิดเห็น