วันจันทร์ที่ 7 พฤศจิกายน พ.ศ. 2559

OWASP Thailand Meeting : A8 Cross-Site Request Forgery (CSRF)


          เมื่อวันพฤหัสบดีที่ผ่านมา (27 ตุลาคม 2559) ผมได้ไปร่วมงานสัมนาของ OWASP Thailand ในหัวข้อ A8 Cross-Site Request Forgery (CSRF) ที่สำนักงานคณะกรรมการกำกับหลักทรัพย์และตลาดหลักทรัพย์ (ก.ล.ต.) ภายในงานมีเลี้ยงขนมจีบกุ้งกับกาแฟในระหว่างรอฟังบรรยาย


          A8 เป็น 1 ใน 10 อันดับของ OWASP Top 10 ปี 2013 ที่ทาง OWASP ได้จัดอันดับช่องโหว่ที่พบได้บ่อยในเว็บแอปพลิเคชัน 10 อันดับ โดย Cross-Site Request Forgery (CSRF) เป็นช่องโหว่ที่อาศัยพฤติกรรมของผู้ใช้งานทำให้ผู้ไม่ประสงค์ดีสามารถสั่งให้ผู้ใช้งานเว็บแอปพลิเคชันทำกิจกรรมบางอย่าง (เช่น การโอนเงิน) โดยที่ผู้ใช้งานไม่ได้ตั้งใจที่จะทำได้

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

          จากหลักการทำงานนี้ถ้าเพื่อน ๆ ยัง Log in อยู่ในระบบ แล้วเผลอไปคลิก Link จากเว็บไซต์แปลก ๆ ที่ส่ง Request ไปยังเว็บไซต์ให้ลบแอคเคาท์ของตัวเอง และเว็บไซต์นั้น ๆ ไม่ได้มีการตรวจสอบ Request ที่ดีพอ ผลที่ได้คือแอคเคาท์ของเพื่อน ๆ ก็จะถูกลบออกจากระบบโดยที่เพื่อน ๆ ไม่ได้ต้องการ หรือในตัวอย่างที่เลวร้ายกว่านี้ ถ้าเพื่อน ๆ ทำธุรกรรมผ่าน Internet Banking และไม่ได้ Log out จากระบบ แล้วไปคลิก Link ไม่น่าไว้ใจที่แอบแฝง Request โอนเงินไปให้แฮกเกอร์ เพื่อน ๆ ก็จะสูญเสียเงินทันที .....ซึ่งการป้องกันแบ่งออกได้เป็น 2 ส่วน

  1. ส่วนของผู้ใช้งาน: ให้ทำการ Log out ออกจากระบบหลังจากเลิกใช้งานเว็บไซต์ต่าง ๆ และไม่ไปคลิก Link แปลก ๆ ที่ไม่น่าไว้ใจ
  2. ส่วนของนักพัฒนา: ควรมีการสร้าง key เฉพาะและแนบไปกับ Link ทุกครั้ง เมื่อมี Request เข้ามาให้ทำการเช็ค key เฉพาะว่าตรงกับที่ระบบสร้างไว้หรือเปล่า ถ้าไม่ตรงก็ไม่ควรรับ Request นั้น ๆ


          หลังจากอธิบาย Cross-Site Request Forgery (CSRF) เสร็จ คุณพลากรก็อธิบายช่องโหว่อีกรูปแบบนึงที่มีลักษณะคล้าย ๆ กัน นั่นก็คือ Cross-Site Scripting (XSS) ซึ่งเป็นการแทรกสคริปต์ (เช่น JavaScript) เข้าไปยังเว็บไซต์แล้วทำการเปลี่ยนแปลงหรือขโมยข้อมูลภายในเว็บไซต์ โดยส่วนมากจะพบในเว็บไซต์ประเภทเว็บบอร์ดหรือเว็บที่มีการรับข้อมูลจากผู้ใช้ เมื่อผู้ใช้ทำการใส่สคริปต์ลงในช่องกรอกข้อมูลและส่งค่าไปบันทึกในฐานข้อมูล ก็จะทำให้สคริปต์ถูกเก็บไว้ในฐานข้อมูลไปด้วย ยกตัวอย่างเช่น ถ้าแฮกเกอร์ใส่สคริปต์เปลี่ยนสีพื้นหลังของเว็บไซต์เข้าไป ทุกครั้งที่เว็บมีการอ่านข้อมูลที่แฮกเกอร์กรอกเข้าไป สคริปต์ของแฮกเกอร์ก็จะทำงาน ส่งผลให้พื้นหลังของเว็บไซต์เปลี่ยนไป เป็นต้น สามารถป้องกันได้โดยการตรวจเช็คข้อมูลที่ผู้ใช้งานกรอกเข้ามาก่อนบันทึกลงฐานข้อมูล คัดกรอกไม่ให้มี tag แปลก ๆ

          หลังจากจบการบรรยาย ก็มีการแจ้งงานสัมนาใหญ่ปลายปี ซึ่งก็คืองาน OWASP Day 2016 - Let's secure!! ซึ่งจัดในวันศุกร์ที่ 11 พฤศจิกายน 2559 เวลา 08:30 - 17:00 น. ณ โรงแรมเจ้าพระยาปาร์ค รัชดา.....สำหรับอันดับอื่น ๆ ของ OWASP Top 10 ปี 2013 เพื่อน ๆ สามารถอ่านเพิ่มเติมได้ ที่นี่ เลยครับ


Share:

0 comments:

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