LINE Authenticate Reverse Engineering

October 5, 2015 5:53 pm Hack, Private, Review

เมื่อวานเกิดความคิดอยากทำของเล่นใหม่จาก Product ของ LINE แต่ปัญหาคือ บริการนี้จะต้องมีการ Login หรือ Authenticate ก่อนใช้บริการ เลยจำเป็นที่จะต้องไล่ Reverse ระบบเข้ารหัสของ LINE ที่ใช้ในการ Authenticate โดยมีประเด็นหลักๆ ดังนี้

  • LINE ใช้งาน OAuth ในการเข้าสู่ระบบบริการของตัวเอง
  • LINE ป้องกันการ Strip SSL Connection ระดับนึง ด้วยการเข้ารหัสก่อนส่งข้อมูลไปยัง Server ด้วย Public Key ที่ไม่ซ้ำกัน
  • LINE ใช้กระบวนการเข้ารหัส Public  Key ด้วย RSA รูปแบบ PKCS1
  • หลังจากเข้าสู่ระบบเรียบร้อยแล้ว Line จะใช้วิธีการส่ง Token ไปหา Web Service API Callback เพื่อยืนยันการเข้าสู่ระบบ

ผมจะพูดถึงการทำงานจุดนึง ที่น่าสนใจมากๆ ในการรักษาความปลอดภัยของข้อมูลผู้ใช้ คือ “การเข้ารหัส Password ก่อนจะดำเนินการส่งข้อมูลไปยัง Server” โดยกระบวนการทำงานโดยสรุปสั้นๆ มีดังนี้

  1. LINE จะใช้ URL บางอย่าง (ไม่ขอเปิดเผย URL นะครับ) ในการเข้าไปขอ Public Key จาก Server เพื่อใช้ในการเข้ารหัสที่เรากรอกเข้ามา หลังจากนั้นแล้ว เราจะได้เข้าข้อมูลมา 2 ชุดคือ session_key และ rsa_key
  2. กระบวนการเข้ารหัสจะเริ่มขึ้น โดยการเอา session_key ไปรวมกันกับ E-Mail และ Password ที่เรากรอกเข้ามา โดยจะมีการแทรก Spacial Character ระหว่างชุดข้อมูล เพื่อใช้ในการแบ่งข้อมูลออกจากกัน หลังจากถอดรหัสแล้ว
  3. หลังจากที่มีการขอ Public Key จาก Server ของ LINE มาแล้ว ก็จะต้องทำการกรองเอา Public Key แท้ๆ ออกมาก่อน (สิ่งที่ Server ส่งมา ยังไม่สามารถนำมาเข้ารหัสได้)
  4. หลังจากนั้นก็จะมีการนำข้อมูลที่ผ่านการรวมแล้วและกรองเอา Public Key แท้ๆ ออกมาแล้ว ก็จะมีการเอาข้อมูลที่รวมกันตอนแรก มาเข้ารหัสกับ Public Key ที่ผ่านการกรองมา จะได้ Password ที่ผ่านการเข้ารหัสเรียบร้อยแล้ว ส่งไปยัง Server  ของ LINE

โดยชุดรหัสที่ระบบ Login ขอมาจาก Server LINE จะไม่เหมือนกันในแต่ละช่วงเวลา เพียงแค่วินาทีเดียว Key ที่ถูกส่งมาจะถูกเปลี่ยนทันที

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