การแจ้งเตือนแบบพุชที่ปลอดภัย: จากทฤษฎีสู่การปฏิบัติ

เฮ้ ฮับ!

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

ฉันกำลังเผยแพร่คำแปลของเรา บทความจากสื่อ พร้อมด้วยสิ่งเพิ่มเติมเล็กๆ น้อยๆ จากตัวฉันเอง ประกอบด้วยผลลัพธ์ของ “การสอบสวน” และเรื่องราวเกี่ยวกับวิธีการแก้ไขปัญหา

เราตรวจสอบวัสดุ

ในรุ่นคลาสสิก การแจ้งเตือนแบบพุชทำให้ผู้ส่งสารเสี่ยงต่อการโจมตี MITM (Man-in-the-middle) ตัวอย่างเช่น สำหรับ Google, Microsoft และ iMessage เวอร์ชันเก่า แอปพลิเคชันจะส่งคีย์การเข้ารหัสไปยังเซิร์ฟเวอร์ของ Apple - บนเซิร์ฟเวอร์ ผู้ใช้จะได้รับการตรวจสอบสิทธิ์ และส่วนหัวของข้อความ (หรือเนื้อหา) จะถูกถอดรหัส

การแจ้งเตือนแบบพุชที่ปลอดภัย: จากทฤษฎีสู่การปฏิบัติ

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

หากคุณคิดว่าเซิร์ฟเวอร์ของ Apple และ Google ปลอดภัย 100% จากการรั่วไหลของคีย์เข้ารหัสผู้ใช้ ให้พิจารณาข้อเท็จจริงที่ว่าพนักงานของพวกเขาสามารถเข้าถึงได้ และพนักงานก็เป็นคน
แม้จะมีช่องโหว่ในการแจ้งเตือนแบบพุช แต่ผู้ส่งข้อความโต้ตอบแบบทันทีที่ "ปลอดภัย" จำนวนมาก รวมถึง Signal และ Telegram ก็ใช้งานสิ่งเหล่านี้ มิฉะนั้น ผู้ใช้จะต้องตรวจสอบข้อความใหม่ "ด้วยตนเอง" โดยการลงชื่อเข้าใช้แอปพลิเคชันอย่างต่อเนื่อง ซึ่งไม่สะดวกนักและผู้ส่งสารที่แข่งขันกันจะได้เปรียบ

ความหวาดระแวงและสามัญสำนึก


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

อย่างไรก็ตาม เรามีข้อได้เปรียบที่สำคัญอยู่แล้ว: Messenger ของเรามีการกระจายอำนาจ (ข้อมูลถูกเก็บไว้ในบล็อกเชน) และพนักงานไม่สามารถเข้าถึงบัญชีได้ มีเพียงผู้ใช้เท่านั้นที่มีคีย์เข้ารหัส และคีย์สาธารณะของคู่สนทนามีอยู่ในบล็อกเชนเพื่อป้องกันการโจมตี MITM

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

การแจ้งเตือนแบบพุชที่ปลอดภัย: จากทฤษฎีสู่การปฏิบัติ
มันทำงานอย่างไร: วิดีโอ.

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

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

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

การแจ้งเตือนแบบพุชที่ปลอดภัย: จากทฤษฎีสู่การปฏิบัติ

เรายอมรับว่าเวอร์ชันนี้ใช้งานได้และนำไปใช้ในการอัปเดตล่าสุดของแอปพลิเคชัน iOS
ผู้ที่สนใจด้านเทคนิคสามารถดูซอร์สโค้ดได้: github.com/Adamant-im/adamant-notificationService.

ที่มา: will.com

เพิ่มความคิดเห็น