ph-sanchat.github.io

Cross-Site Request Forgery Attacks

What is CSRF?

Cross-Site Request Forgery (CSRF) หรือที่เรียกว่า XSRF, Sea Surf หรือ Session Riding เป็นเวกเตอร์การโจมตีที่หลอกให้เว็บเบราว์เซอร์ดำเนินการกระทำที่ไม่ต้องการในแอปพลิเคชันที่ผู้ใช้ลงชื่อเข้าใช้ การโจมตี CSRF ที่ประสบความสำเร็จอาจสร้างความเสียหายให้กับทั้งธุรกิจและผู้ใช้ อาจส่งผลให้ความสัมพันธ์กับลูกค้าเสียหายการโอนเงินโดยไม่ได้รับอนุญาตรหัสผ่านที่เปลี่ยนแปลงและการขโมยข้อมูลรวมถึงคุกกี้เซสชันที่ถูกขโมย โดยทั่วไป CSRF จะดำเนินการโดยใช้วิศวกรรมสังคมที่เป็นอันตรายเช่นอีเมลหรือลิงก์ที่หลอกล่อเหยื่อให้ส่งคำขอปลอมไปยังเซิร์ฟเวอร์ เนื่องจากผู้ใช้ที่ไม่สงสัยได้รับการตรวจสอบสิทธิ์โดยแอปพลิเคชันของตนในขณะที่เกิดการโจมตีจึงไม่สามารถแยกแยะคำขอที่ถูกต้องจากคำขอปลอมแปลงได้

How does Cross-Site Request Forgery Work?

การโจมตีนี้มุ่งเน้นไปที่การกำหนดเป้าหมายคำขอที่เปลี่ยนแปลงสถานะซึ่งหมายถึงประเภทของคำขอที่ส่งผลให้ข้อมูลเปลี่ยนจากค่าหนึ่งไปเป็นอีกค่าหนึ่ง ตัวอย่างเช่นคำขอที่กำหนดเป้าหมายอาจทำการซื้อหรือเปลี่ยนแปลงมูลค่าในบัญชี ที่น่าสนใจนี่คือ “การโจมตีแบบตาบอด” และไม่ส่งคืนข้อมูลไปยังผู้โจมตีทำให้เป็นทางเลือกที่ไม่ดีสำหรับการบโจรกรรมข้อมูล

นี่คือตัวอย่างของ 4 ขั้นตอนในการโจมตี Cross-Site Request Forgery:

  1. ผู้โจมตีสร้างคำขอปลอมซึ่งเมื่อถูกเรียกใช้จะโอนเงิน 10,000 ดอลลาร์จากธนาคารใดธนาคารหนึ่งไปยังบัญชีของผู้โจมตี
  2. ผู้โจมตีจะฝังคำขอปลอมลงในไฮเปอร์ลิงก์และส่งออกไปในอีเมลจำนวนมากและฝังลงในเว็บไซต์ด้วย
  3. เหยื่อคลิกที่อีเมลหรือลิงก์เว็บไซต์ที่ผู้โจมตีวางไว้ส่งผลให้เหยื่อร้องขอให้ธนาคารโอนเงิน 10,000 ดอลลาร์
  4. เซิร์ฟเวอร์ของธนาคารได้รับคำขอและเนื่องจากเหยื่อได้รับอนุญาตอย่างถูกต้องจึงถือว่าคำขอนั้นถูกต้องตามกฎหมายและโอนเงิน

การโจมตี CSRF แตกต่างกันไปตามวิธีการ แต่โดยทั่วไปจะมีลักษณะดังต่อไปนี้:

  1. พวกเขาใช้ประโยชน์จากเว็บไซต์ที่อาศัยข้อมูลประจำตัวของผู้ใช้
  2. พวกเขาหลอกให้เบราว์เซอร์ของผู้ใช้ส่งคำขอ HTTP ไปยังไซต์เป้าหมาย
  3. พวกเขาเกี่ยวข้องกับการใช้คำขอ HTTP ที่มีผลข้างเคียงและไม่มีการป้องกัน CSRF ที่เหมาะสม

HTTP verbs ที่แตกต่างกันมีช่องโหว่ที่แตกต่างกันไปในการโจมตี CSRF ส่งผลให้กลยุทธ์การป้องกันตัวแปร เนื่องจากวิธีที่เว็บเบราว์เซอร์จัดการกับคำกริยาต่างกัน

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

HTTP POST ใช้เพื่อเปลี่ยนสถานะส่งผลให้มีความจำเป็นในการป้องกันเพิ่มขึ้น ด้วยเหตุนี้เว็บเบราว์เซอร์จึงใช้มาตรการรักษาความปลอดภัยที่เรียกว่านโยบายต้นทางเดียวกัน (SOP) และการแชร์ทรัพยากรข้ามแหล่งที่มา (CORS) ซึ่งมีนโยบายความปลอดภัยข้ามแหล่งที่มา SOP อนุญาตเฉพาะคำขอจากแหล่งที่มาเดียวกันและ CORS อนุญาตเฉพาะคำขอบางประเภทเท่านั้นที่มาจากแหล่งที่มาที่แตกต่างกัน การรวมกันของการใช้งานเหล่านี้ช่วยป้องกันการโจมตี CSRF (ในหมู่คนอื่น ๆ ) โดยจำกัดความสามารถของคำขอหรือหน้าเว็บในการโต้ตอบกับแหล่งที่มาอื่น

HTTP verbs อื่น ๆ เช่น PUT และ DELETE สามารถเรียกใช้โดยใช้ SOP และ CORS เท่านั้นเพื่อลดการโจมตีข้ามไซต์จำนวนมาก

แม้ว่าจะเป็นเรื่องแปลก แต่บางเว็บไซต์จะปิดใช้มาตรการรักษาความปลอดภัยเหล่านี้อย่างชัดเจนและสามารถปิดใช้งานภายในเว็บเบราว์เซอร์ได้เช่นกัน

How can Cross-Site Request Forgery be mitigated?

วิธีการทั่วไปในการบรรเทาการโจมตี CSRF เกี่ยวข้องกับการใช้โทเค็นต่อต้าน CSRF โดยใช้หนึ่งในสองวิธี แม้ว่าการใช้โทเค็นจะแตกต่างกันเล็กน้อย แต่หลักการพื้นฐานก็ยังคงเหมือนเดิม ด้วยการสร้างและเปรียบเทียบสตริงโทเค็นที่สร้างขึ้นแบบสุ่มผู้โจมตีมีโอกาสน้อยที่จะทำการโจมตีโดยไม่มีการคาดเดาที่ไม่น่าเป็นไปได้

Synchronizer token pattern:

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

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

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

ด้วยการใช้กฎที่กำหนดเองผ่าน WAF ผู้ใช้จะสามารถช่วยป้องกันการโจมตี CSRF บางอย่างได้ สำรวจ Cloudflare’s Web Application Firewall.

*Confused Deputy problem

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

References:

Author