top 10

Top 10 อันดับความเสี่ยงของ Web Application จาก OWASP

Top 10 ปัญหา ทางด้านความปลอดภัย หรือช่องโหว่ ที่กลายเป็นความเสี่ยง ที่สามารถพบเจอได้บ่อยๆ เป็นประจำ บน Website และ Web Application เป็นเรื่องพื้นฐาน ที่คนทำเว็บ ต้องหันมาให้ความสำคัญ มากขึ้นกว่าที่เป็นอยู่ เพื่อลดปัญหาทางด้านความปลอดภัย และยกระดับความปลอดภัย ให้ข้อมูลของผู้ใช้งานสูงยิ่งขึ้น

Top 10 Web Application Risk คืออะไร

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

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

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

Risk มีอะไรบ้าง ?

ทีนี้ 10 อันดับภัยคุกคาม บนโลกอินเตอร์เน็ต ที่จะมาหาเจ้าของเว็บไซต์ได้ คืออะไร ผมขอเริ่มจากการ ไล่อันดับกันเลยแล้วกันนะครับ

  1. Injection

    คำนี้เชื่อว่า คนทำเว็บน่าจะเคย ผ่านหูผ่านตากันมาบ้าง ส่วนใหญ่ มักจะอยู่คู่กัน กับคำว่า SQL เพราะมันเป็นการ แทรก Code บางอย่าง เข้ามาในระบบ เพื่อสั่งการ หรือทำงาน ผ่านทางฐานข้อมูล ด้วยการ Query เพื่อให้ระบบเกิดการทำงาน ที่ผิดพลาด ไม่ถูกต้อง และอาจจะเลยเถิดถึงขั้น เกิดความเสียหาย (เช่น สั่งลบข้อมูล) งั้น SQL ก็เป็น ตัวปัญหาสิ!!!
    ไม่ใช่นะ…ใจเย็นๆเลย ปัญหา จะไม่ได้ตกไปอยู่ที่ SQL ตรงๆแบบนั้น แต่ปัญหาคือการที่ ผู้ใช้งาน ดันสามารถ ส่งคำสั่ง SQL เข้ามาในระบบได้ต่างหาก ความผิดเลยควรมองตั้งแต่ ตอนเขียน Code เราปล่อยให้เค้า สั่ง Query ได้อย่างไร ในเมื่อเค้าไม่มีสิทธิ แต่เรื่องมันยาว อันนี้ผมแค่เกริ่นให้รู้จักก่อน เดี๋ยวไว้มาต่อกันกับ Post ต่อๆไป

  2. Broken Authentication and Session Management

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

  3. Cross-Site Scripting (XSS)

    เป็นเรื่องของ การที่ผู้ไม่หวังดีหรือ Hacker จะพยายามเข้ามาในระบบเราเพื่อวาง Code หรือ Script ที่มุ่งร้ายต่อระบบเรา ตามช่องโหว่ต่างๆ ที่มีอยู่บนระบบ และหลังจากที่วาง Code สำเร็จ เมื่อมีผู้ใช้งาน เข้ามาทำงานตาม เงื่อนไขที่กำหนด ก็จะทำการเปลี่ยนหน้าเว็บ หรือขโมย Session หรือดักจับข้อมูลต่างๆ ปัญหานี้ มักเจอกันอยู่บ่อยจริงๆ จะเปิดเข้าหน้าปรกติ ดันไปเปิดที่อื่น หรือมีโฆษณาแปลกๆเข้ามาแทน

  4. Insecure Direct Object References

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

    ลองนึกถึงดูว่า โดยปรกติ เวลาเราเก็บข้อมูล ของผู้ใช้งาน เราจะเก็บเป็น Id และ Value ซึ่งแน่ละ ส่วนใหญ่ เราก็จะให้ ID ทำหน้าที่วิ่งผ่านไปบน Url แล้วเอามาเรียกข้อมูลดูว่า คนคนนี้มีข้อมูลอะไรบ้าง แต่ในรายงานนี้กลับพบว่า มักมีการปล่อยให้เรา สุ่ม!! หรือ Run ค่า ID ไปเรื่อยๆ เพื่อเรียกดูข้อมูลของคนอื่นได้ ทั้งๆที่ไม่มีสิทธิ์
    ดังนั้นตรงนี้ถึงได้ตกเป็น ภาระของคนเขียน Code เลยว่า เราไม่สามารถ ปล่อยให้ใคร ดูข้อมูลของคนอื่นได้แบบนั้น เรื่องนี้ยาวมาก เดี๋ยวไว้มาเขียนคุยกันต่อ

  5. Security Misconfiguration

    มาถึงคิวของ ระบบหรือการตั้งค่าระบบกันบ้าง เดี๋ยวจะหาว่า มีแต่ความผิดของ Dev หรือคนทำ Coding หรอ เปล่าๆ แต่แค่เกือบทั้งหมดเท่านั้นเอง
    Misconfiguration หรือการตั้งค่า ของทางฝั่ง Admin ผู้ดูแล Hosting หรือ Server ของเราก็เป็นอีกหนึ่งท่าน ที่ต้องเข้ามาช่วย ดูแล ไม่ให้ระบบของเรา มีปัญหา และทำให้ Software ต่างๆ ใหม่อยู่เสมอ คอยปกป้องเราก่อนจะมาถึงมือของคน Coding
    แต่ตรงนี้ขออีกนิด มีความเข้าใจผิดซะเยอะ จากเหล่าผู้บริหารทั้งหลาย ว่าถ้างั้น เราก็ใช้ cloud ในการทำ Hosting ระบบไปซะเลย จะได้ปลอดภัย คือ Cloud ปลอดภัย ในส่วนนี้ แต่ก็ขึ้นอยู่กับ เงื่อนไข และบริการต่างๆ ที่เข้าให้เรามาด้วยนะครับ ถ้าเราซื้อมาแค่พื้นที่ แต่ไม่ดูเรื่องความปลอดภัย ก็ไม่ถูกนะ

  6. Sensitive Data Exposure

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

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

  7. Missing Function Level Access Control

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

    แต่เราดันปล่อยให้ admin ทุกคนทำได้ มักจะเจอบ่อยๆ ในระบบที่มีผู้ใช้งานเยอะๆ แถมมีการแบ่ง Role ออกมาหลายๆแบบ มักพลาดกันตรงนี้

  8. Cross-Site Request Forgery (CSRF)

    คอสไซต์อีกแล้ว เหมือนเดิมนี่น่า….. ไม่ใช่ครับ คนละแบบกันน่ะ ขอเรียกย่อๆว่า CSRF แล้วกัน
    จริงๆมันคือการที่ Hacker บังคับให้ Browser ของผู้ใช้งาน ส่ง HTTP Request ที่ทำงานอันตรายออกมา เพื่อล้วงข้อมูลหรือสั่งการกระทำกิจกรรมบางอย่างเบื้องหลังเรา
    อันนี้เคยเป็นเรื่องน่ากลัวมากๆ เมื่อครั้งที่ Youtube มีการใช้เรื่องนี้ในการ subscribe อัตโนมัติและอื่นๆ

  9. Using Components with Known Vulnerabilities

    เรื่องนี้อยากพูดมานานแล้ว แต่ไม่ค่อยมีโอกาส หลายคนมักตั้งความหวังไว้กับ CMS หรือ Code library ที่เป็น Open source สูงมาก จนแทบจะไม่ระวังอะไรเลย เพราะคิดว่า เมื่อมีปัญหา Core พวกนี้ก็จะได้รับการ Update ทันที แต่ความจริงแล้ว เมื่อมีปัญหา กับระบบมักจะมาจากทาง Plugin หรือ Theme
    ซึ่งตรงนี้ เราจำเป็นจะต้องตรวจสอบอยู่เป็นประจำ ว่า Code ของเรายังปลอดภัยดีอยู่ไหม นี่เลยกลายเป็น ปัญหาใหญ่มากๆสำหรับคนทำเว็บยุคนี้ ที่มักเลือกใช้งาน CMS มากกว่าจะมานั่งเขียนให้ปลอดภัย แต่ดันละเลยเรื่องนี้ไปซะ ดังนั้นการตรวจสอบ ดูแลโดยคนที่มีความรู้และใส่ใจ จึงจำเป็นมาก กว่าการแค่ปล่อยให้ เว็บมัน Run ไปโดยปรกติ แล้วมีแค่ Web master มาค่อย Update ข้อมูล

  10. Un-validated Redirects and Forwards

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

    แต่ถ้าเกิดไปแล้ว ไป download ไฟล์ malware หรือเจอหน้าเว็บ phishing เข้าก็แย่เลย ดังนั้นเราต้องไม่ปล่อยให้ผู้ใช้งาน สามารถใส่ URL เข้ามาเพื่อ Redirect ไปไหน แจ้งเตือนผู้ใช้งานว่าคุณกำลังไปที่ไหน นอกเว็บของเรา และพยายาม ไม่ redirect ไปที่อื่นซะ

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

อ้างอิง Link: OWASP