Broken Authentication

Oraphanthong T.
blog blog
Published in
2 min readMar 11, 2019
รูปภาพจาก https://blog.devolutions.net/2017/10/whats-the-difference-between-2fa-and-mfa

หลายๆระบบในปัจจุบัน จะต้องมีการยืนยันตัวตน (Authentication) ก่อนเข้าใช้งาน โดยส่วนใหญ่เลือกวิธีการกรอก Username และ Password ซึ่งก็เป็นอีกหนึ่งช่องทางที่ผู้โจมตี (Attacker) จะหาช่องโหว่เพื่อเข้าระบบ ซึ่งถ้าหากสามารถทำได้จะส่งผล
กระทบต่อผู้ใช้งานอย่างมาก จึงทำให้ Broken Authentication ถูกจัดอยู่ในอันดับ 2 ของ OWASP และเพียงโดนโจมตีแค่ไม่กี่ Account หรือ สามารถเข้าระบบด้วยสิทธิ์ Admin ได้แค่เพียงคนเดียว ก็อาจจะถูกนำไป …

  • ใช้ในการฟอกเงิน (money laundering)
  • ขโมยตัวตน (identity theft)
  • เปิดเผยข้อมูลสำคัญภายในระบบ

Attacker ทำยังไง ?

การออกแบบระบบอาจจะมีจุดอ่อนให้ attacker สามารถโจมตีเข้ามาด้วยวิธีต่างๆ …

  • Credential Stuffing Attack เป็นการโจมตี โดยที่ attacker ใช้วิธีการแฮกเข้าระบบโดยใช้ username และ password ที่ได้จากฐานข้อมูลที่ล้วงข้อมูลได้มาก่อนหน้านี้ ซึ่งถ้าหากผู้ใช้มีการใช้ username/password ซ้ำๆกันกับ website เป้าหมายก็จะสามารถเข้าระบบได้
รูปภาพจาก https://www.owasp.org/index.php/Credential_stuffing
  • Brute Force หรือทำ Automated Attack คือการพยายาม login เข้าระบบด้วยบอท
  • Weak Password ระบบมีการกำหนด password ที่ง่ายต่อการคาดเดา เช่น password1 , P@ssw0rd, 12345678
  • Ineffective Forgot Password Process ระบบมีขั้นตอนการแจ้งลืม password ที่ง่ายเกินไป เช่น การให้ตอบคำถามที่คาดเดาได้ง่าย … สัตว์เลี้ยงของคุณชื่ออะไร ?
  • Weak Hashed Password มีการเก็บ password ด้วย plain text หรือ encrypted/hash ด้วยวิธีการที่ไม่มีประสิทธิภาพ
  • Does not rotate Session IDs after successful login หลังจาก Login สำเร็จ ไม่มีการสร้าง session id ใหม่ ซึ่งอาจจะทำให้ attacker สามารถ ใช้ session id เดียวกันนี้เข้าถึงข้อมูลใน Account เป้าหมายได้
  • Does not properly invalidate Session IDs ไม่มีการ invalidate session หรือ ทำไม่ถูกต้อง เมื่อมีการ logout ออกจากระบบ หรือ session timeout ไปแล้ว ส่งผลทำให้ attacker สามารถนำ session id นั้นๆไปใช้งานต่อได้

แล้วเรา (ผู้พัฒนาระบบ) จะทำยังไงดี ?

เริ่มจากที่เราต้องมีการออกแบบและพัฒนาระบบโดยคำนึงถึงเรื่องต่อไปนี้ …

  • ควรมีการกำหนดว่า สามารถ login ผิดได้กี่ครั้งเพื่อแจ้งเตือนให้กับผู้ใช้งาน หรือ admin ทราบว่ากำลังถูกโจมตี และป้องกัน attacker ให้ไม่สามารถทำ brute force ด้วยบอทได้
  • อาจจะเพิ่ม multi-factor authentication เช่น นอกจากจะต้องกรอก password แล้ว ต้องมีการใช้ One Time Password (OTP) เป็นขั้นตอนที่ 2 ในการยืนยันตัวตนด้วย
  • ไม่ติดตั้งระบบ โดยใช้ default password … root/password << ไม่ควรทำ
  • ระบบควรกำหนดความยาว password และมีเงื่อนไขในการตั้ง password ที่ยากต่อการคาดเดา
  • ทุกครั้งที่สามารถ login ได้สำเร็จ ระบบต้องมีการสร้าง session id ใหม่อยู่เสมอ และเมื่อมีการ logout หรือ session timeout ก็ต้องมีการทำ invalid session ให้ไม่สามารถเข้าใช้งานได้อีก

แล้วเรา (ผู้ใช้งาน) จะทำยังไงดี?

คนจำนวนมากมีการตั้ง password ที่ง่ายมากๆ ซึ่ง attacker ก็จะโจมตีบุคคลเหล่านี้ก่อนเป็นอันดับแรก ทาง owasp เค้าก็มีรายชื่อ top 10000 worst password มาให้ ก็อย่าตั้งให้มันง่ายหล่ะ และถ้าเป็นไปได้ แต่ละ website ก็ไม่ควรที่จะใช้ password ซ้ำกันด้วยนะ

ถ้าหากเราไม่มั่นใจว่า email account ของเราถูกแฮกไปรึยัง สามารถเข้าไปที่ https://haveibeenpwned.com/ จะมีฐานข้อมูลว่า Email ที่คุณใช้ อยู่ในกลุ่มที่ Hacker โจมตีไปด้วยรึเปล่า ถ้าโดนละก็ รีบไปเปลี่ยน password บน website ต่างๆที่ใช้ password เดียวกันด้วยนะ … ขอให้โชคดี …

ref. https://www.owasp.org/index.php/Top_10-2017_A2-Broken_Authentication

--

--