เว็บ se-ed.com เก็บรหัสผ่านสมาชิกของร้านเป็น plaintext!

เมื่อวานนั่งหาหนังสือ กะว่าจะสั่งหนังสือสัก 2-3 เล่ม แต่ลืมรหัสผ่าน se-ed.com เลยเข้า https://www.se-ed.com/forgot-password.aspx เพื่อขอขั้นตอนการปลดล็อคผ่านทางอีเมลเพื่อเข้าระบบ

2014-09-08_110337

 

แต่สิ่งที่ได้กลับมาทำให้ตกใจไม่น้อยเพราะ….

2014-09-08_110831

 

ก็ไม่รู้จะว่ายังไงดี ความอยากได้หนังสือหายไปในทันที เลิกสั่งตั้งรหัสผ่านใหม่ที่ยาวกว่าเดิม แล้วลาก่อนเว็บนี้

ส่วนเหตุผลว่าทำไมอ่านจากของเก่าได้ที่ อย่าไว้ใจเว็บแบรนด์ระดับโลกให้เก็บรหัสผ่านที่สำคัญของคุณ

อย่าไว้ใจเว็บแบรนด์ระดับโลกให้เก็บรหัสผ่านที่สำคัญของคุณ

จากกระทู้ต้นเรื่อง Starbucks Thailand ทำแบบนี้ได้ไง

ผมเลยลองทดสอบดูตามข้อมูลที่ https://www.starbuckscard.in.th/cards/forgot-password.aspx

2014-03-04_101523แล้วกรอกอีเมลที่ตัวเองได้ลงทะเบียนไว้แล้วพบว่ารหัสผ่านที่ส่งมานั้น ทาง Starbucks ส่งมาเป็น plaintext จริงๆ ตามข้อมูลด้านล่างนี้ (ผมขอนำรหัสผ่านจริงๆ ออกเพื่อประกอบการนำเสนอ และใส่ข้อความอื่นๆ แทน)

2014-03-04_101432แน่นอนว่าไม่ใช่แค่เว็บเท่านั้น เมื่อเกือบ 2 เดือนที่แล้ว Starbucks ก็ได้ทำพลาดแม้แต่ใน App ของตัวเองใน App Store เช่นกัน ตามรายการข่าวบางส่วน เช่น Starbucks: We Stored Your Passwords in Plaintext หรือ Starbucks App Saves Usernames, Passwords in Plain Text 

ซึ่งในความเป็นจริงแล้ว ระบบเว็บ หรือซอฟต์แวร์ต่างๆ โดยทั่วไปที่ใส่ใจต่อข้อมูลรหัสผ่าน ซึ่งเป็นข้อมูลที่อ่อนไหวง่ายที่สุด มักจะนำรหัสผ่านผู้ใช้งานไปผ่านกรรมวิธี hash ทางเดียว (one-way hashing; หรือลายเซ็นของข้อมูล) และใช้ salt ร่วมด้วย (ชุดอักขระสุ่มเฉพาะ) เพื่อความปลอดภัยสูงสุด การที่เว็บแบรนด์ดังจัดเก็บรหัสผ่านแบบ plain text หรือแม้แต่จัดเก็บแบบเข้ารหัสแต่สามารถย้อนกลับรหัสผ่านใดๆ ให้เป็น plain text ได้ ถือเป็นเรื่องที่ยอมรับไม่ได้ในวงการ Security ในด้านระบบยืนยันสิทธิ์ในการเข้าใช้ระบบ โดยสำหรับใครที่ไม่เข้าใจกรรมวิธี hash และใช้ salt ร่วมด้วย แนะนำให้อ่าน Hash: ไม่รู้ว่ามันคืออะไรแต่มันใช่ เผื่อจะเข้าใจมากขึ้น ว่าสิ่งที่ Starbucks กำลังทำอยู่นั้นเป็นสิ่งที่ยอมรับไม่ได้ และสามารถดูตัวอย่างเว็บที่ไม่ใส่ใจกับข้อมูลอ่อนไหวเหล่านี้ได้ที่ Plain Text Offenders

ฉะนั้นจากเหตุการณ์นี้ หลายคนอาจจะยังไม่เข้าใจปัญหาที่อาจจะเกิดขึ้นในอนาคต ผมจึงขอยกตัวอย่างง่ายๆ ว่าในอนาคตหากเว็บ Starbucks ถูก hack และเหล่าผู้ไม่ประสงค์ดีได้ทำการ dump ข้อมูลลูกค้าพร้อมรหัสผ่านออกไป การไม่คงสภาพรหัสผ่านที่สามารถย้อนกลับมาเป็น plain text ได้ จะช่วยปกป้องให้รหัสผ่านต่างๆ ของลูกค้าของตัวเองยังคงปลอดภัยอยู่สักระยะจากการใช้วิศวกรรมย้อนกลับ เพราะต้องใช้เวลาในการคำนวณ และกู้สภาพย้อนกลับผ่าน rainbow table (หรือการทำ rainbow hash cracking) แน่นอนว่าการใช้ salt ร่วมด้วยก็ช่วยได้ในระดับที่น่าพอใจ ซึ่งดีกว่าการจัดเก็บรหัสผ่านเป็นข้อมูล plain text ซึ่งผู้ไม่ประสงค์ดีสามารถนำไปใช้ได้เลยโดยไม่จำเป็นต้องใช้เทคนิคพิเศษใดๆ

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

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

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

ข้อคิดบางอย่างที่ได้หลังจากเหตุการณ์ Drupal.org ถูกแฮก

จาก

Important Security Update: Reset Your Drupal.org Password

Drupal.org ถูกแฮก รีเซ็ตรหัสผ่านผู้ใช้ทุกคน

เหตุการณ์ที่ Drupal.org ถูกแฮกนั้น เกิดจากเครื่องมือของผู้ให้บริการระบบที่ Drupal.org ที่ใช้บริการอยู่นั้นมีช่องโหว่ ทำให้ผู้เจาะระบบสามารถเข้าถึงฐานข้อมูลได้ โดยปัญหาที่เกิดขึ้นนี้ไม่ใช่ช่องโหว่ของ Drupal โดยตรงแต่อย่างใด ผู้ใช้งาน Drupal อยู่ตอนนี้สบายใจได้ (แต่ยังแนะนำให้ upgrade ตัว Drupal 7 ให้ไปใช้ Drupal 7.22 ซึ่งเป็นตัวล่าสุด)

สำหรับคนที่เป็นสมาชิก Drupal.org แบบผม ถึงแม้จะเอาข้อมูลผู้ใช้งานไปได้ แต่รหัสผ่านที่บันทึกไว้นั้นยังถูกนำไปผ่านกรรมวิธี hash และใช้ salt ร่วมด้วยเพื่อให้ได้ชุดข้อมูลเชิงเปรียบเทียบทางเดียว (ไม่สามารถแปลงกลับเป็นรหัสผ่านจริงๆ ได้อีก) แต่ก็มีรหัสผ่านบางส่วน (ที่เก่ามากๆ) มีแต่ hash อย่างเดียว (เป็นส่วนน้อย) จึงยังคงมีความปลอดภัยอยู่

แต่ทาง Drupal.org ยังแนะนำให้เข้าไปตั้งรหัสผ่านใหม่ เพื่อทำการสร้างชุด hash และ salt ใหม่อีกครั้งเพื่อความปลอดภัยและเพื่อป้องกันการใช้ชุดข้อมูลรหัสผ่านที่ถูกขโมยไปแล้ว ถูกนำไปผ่านกรรมวิธี rainbow hash cracking หรือการนำรหัสผ่านที่ได้จาก hash function ที่ยอดนิยมอย่าง md5 หรือ sha1 มาเปรียบเทียบกับ rainbow table แล้วย้อนกลับเป็นรหัสผ่านจริงๆ ได้อีกครั้ง โดยมักจะมีปัญหากับการใช้ hash กับรหัสผ่านโดยไม่มี salt มาช่วยในการ hash ตัวรหัสผ่านอีกรอบ

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