Business Logic Vulnerabilities

Datafarm
2 min readFeb 1, 2023

สวัสดีครับคุณผู้อ่านทุกท่าน ในวันนี้ผมจะมาพูดถึงอีกหนึ่งเรื่องที่มีความสำคัญ และใกล้ตัวเรามาก ๆ อย่าง “Business Logic Vulnerabilities” กันครับ

ก่อนอื่นเลย ขออธิบายถึงความหมายของคำว่า Business Logic กันก่อน

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

เพื่อให้เข้าใจมากยิ่งขึ้น (หรือเปล่า?) กระผมขออนุญาตเปรียบ Business Logic คือ Business Flow เพื่อที่หลาย ๆท่านจะได้เห็นภาพว่า Business Logic ก็คือ Flow การทำงานของระบบนั่นเอง

ยกตัวอย่างเช่น เมื่อเราต้องการถอนเงินเป็นจำนวน 1,000 บาท จากตู้ ATM โดยใช้บัตร

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

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

ref : https://www.pngitem.com/pimgs/m/34-345200_transparent-withdrawal-clipart-cartoon-atm-machine-png-png.png

แล้วอะไรคือสิ่งที่ “กำหนด” รูปแบบการดำเนินการของแต่ละขั้นตอนกันล่ะ?

ซึ่งถ้าหากมีเพียงแค่ Business Logic แล้ว ระบบจะรู้ได้อย่างไร? ว่าควรมี “เงื่อนไข” หรือ “กฎ” อะไร เพื่อนำไปกำหนดแนวทางการดำเนินการหรือ Flow เพราะหน้าที่หลัก ๆ ของ Business Logic คือดำเนินการตามขั้นตอนที่มี “กำหนด” ไว้ก่อนแล้ว จึงจำเป็นต้องมีสิ่งที่เรียกว่า “กฎ” หรือ “Business Rules” เพื่อเป็นการกำหนดว่า ถ้าเจอแบบนี้ต้องดำเนินการแบบนี้ และเจอแบบนั้นต้องดำเนินการแบบนั้น ให้กับระบบนั่นเอง

ยกตัวอย่างเช่น จากที่เราต้องการจะถอนเงิน

ขั้นตอนที่ 1 : ทำการสอดบัตร และใส่รหัส

  • เงื่อนไขก็คือ : ตรวจสอบบัตรว่าใช่บัตรที่สามารถดำเนินการกับเครื่องมือ (ATM) นี้ได้หรือไม่
  • หากดำเนินการได้ : ระบบดำเนินการต่อโดยจะให้ผู้ใช้งานทำการกรอกรหัสเพื่อตรวจสอบ
  • หากไม่สามารถดำเนินการได้ : ระบบจะแสดงข้อผิดพลาดและดีดบัตรออกพร้อมกับหยุดการทำงาน

ขั้นตอนที่ 2 : หลังจากที่ตรวจสอบบัตรแล้วจะถึงขั้นตอนการใส่รหัส

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

หรือสรุปง่ายๆก็คือ

Business Rules คือ กฎ หรือเงื่อนไข เพื่อกำหนดขั้นตอนการทำงานและสิ่งที่ระบบต้องดำเนินการต่อ

Business Logic คือ กระบวนการทำงานที่ผ่านขั้นตอนการตรวจเช็คตามเงื่อนไขจาก “เงื่อนไข” ที่ได้กำหนดไว้

เพราะฉะนั้น ทั้ง Business Rules และ Business Logic จึงมีความจำเป็นและต้องทำงานร่วมกัน เพื่อให้กระบวนการทั้งหมดครบถ้วนสมบูรณ์

หลังจากที่เกริ่นอารัมภบทมาเนิ่นนาน ทุกท่านน่าจะพอเข้าใจและเห็นภาพกันแล้วว่า Business Logic คืออะไร แล้วมันสำคัญอย่างไรกันล่ะ?

ลองนึกภาพว่า หากขั้นตอนการทำงานของระบบ หรือ Business Flow ดั้งเดิมที่ถูกวางไว้ ถูกข้ามขั้นตอน หรือ Bypass จะเป็นอย่างไร?

จากตัวอย่าง การถอนเงินจากตู้ ATM

ในขั้นตอนแรกและขั้นตอนที่สอง ที่จะมีการตรวจสอบบัตรกับรหัส

หากเราสามารถข้ามการกรอกรหัสบัตร แล้วสามารถเข้าไปถึงการทำธุรกรรมภายในได้เลย แสดงว่าถ้ามีเพียงบัตรเราก็สามารถดำเนินการต่าง ๆ ได้เลยโดยที่ไม่จำเป็นต้องผ่านกระบวนการยืนยันตัวตน (Authentication) หรือแม้แต่การที่สามารถถอนเงินในปริมาณมาก แม้ในความเป็นจริงบัญชีจะมีจำนวนเงินที่น้อยกว่า สิ่งต่าง ๆ ที่เกิดขึ้นเหล่านี้เรียกว่า “Business Logic Vulnerabilities”

ซึ่งก็คือ ช่องโหว่หรือข้อบกพร่องที่เกิดจากการออกแบบหรือการสร้างระบบที่ไม่ดีเพียงพอ มักจะเกิดจากการที่ไม่ได้มีการตรวจสอบการรับค่า (Input Validation) ที่ไม่รอบคอบ รัดกุม และครบถ้วน ทำให้ผู้ไม่หวังดีสามารถใช้ช่องโหว่นี้ใส่ในค่า Input ที่แปลกประหลาดจากความเป็นจริงหรือไม่ควรจะเป็น เช่น ในช่องที่สามารถกรอกปริมาณตัวเลข เมื่อทำการกรอกด้วยจำนวนที่ติดลบ (Negative Number) ส่งผลให้กระบวนการคำนวณย้อนกลับ

จากรูปตัวอย่าง

มีช่องโหว่ที่เมื่อเราทำการแก้ไข “Quantity” เป็นจำนวนติดลบ ส่งผลให้ราคาสินค้าเป็นราคาที่ติดลบแทน

ref : https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-high-level

เมื่อทำการซื้อสินค้าอื่นเพิ่มเติม ส่งผลให้ราคาของสินค้าลดลงเป็นจำนวนเท่ากับที่ปริมาณที่ติดลบก่อนหน้า ส่งผลให้เราสามารถใส่ปริมาณสินค้าติดลบจนสามารถซื้อสินค้าที่มีราคาสูงกว่าจำนวนเงินที่มีได้

ref : https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-high-level

ในบทความนี้จะเป็นเพียงแค่เนื้อหาเบื้องต้นเกี่ยวกับ Business Logic แต่เพื่อจะให้เห็นถึงความร้ายแรงและวิธีการมากยิ่งขึ้นนั้น จำเป็นต้องลงมือทำหรือปฏิบัติ ซึ่งผมขอแนะนำแล็บของ Port Swigger ในหัวข้อ Business Logic โดยเนื้อหาภายในแล็บนี้ค่อนข้างครบถ้วนและมีตัวอย่างมากมายที่สามารถนำไปประยุกต์ต่อได้ สุดท้ายนี้ ขอให้ผู้อ่านทุกท่านสนุกกับการทำแล็บและขอต้อนรับเข้าสู่โลกของ Cybersecurity ครับ

--

--

No responses yet