Thông báo đẩy an toàn: từ lý thuyết đến thực hành

Này Habr!

Hôm nay tôi sẽ nói về những gì tôi và đồng nghiệp đã làm trong vài tháng nay: thông báo đẩy cho ứng dụng nhắn tin tức thời trên thiết bị di động. Như tôi đã nói, ứng dụng của chúng tôi nhấn mạnh vào tính bảo mật. Do đó, chúng tôi đã phát hiện ra liệu thông báo đẩy có “điểm yếu” hay không và nếu có thì làm cách nào chúng tôi có thể loại bỏ chúng để thêm tùy chọn hữu ích này vào dịch vụ của mình.

Tôi đang xuất bản bản dịch của chúng tôi bài viết từ Medium với một số bổ sung nhỏ từ bản thân tôi. Nó chứa kết quả của cuộc “điều tra” và câu chuyện về cách giải quyết vấn đề.

Chúng tôi kiểm tra vật liệu

Trong mô hình cổ điển, thông báo đẩy khiến người đưa tin dễ bị tấn công MITM (Người trung gian). Ví dụ: với Google, Microsoft và phiên bản cũ của iMessage, ứng dụng sẽ gửi khóa mã hóa đến máy chủ Apple - trên máy chủ, người dùng được xác thực và tiêu đề thư (hoặc nội dung của nó) được giải mã.

Thông báo đẩy an toàn: từ lý thuyết đến thực hành

Do đó, có cơ hội đọc thư bằng cách truy cập vào máy chủ thông báo đẩy. Điều này có nghĩa là mọi mã hóa thư từ đều vô ích: thông báo đẩy vẫn có khả năng bị bên thứ ba đọc được. Các tác giả của bài viết đã thảo luận về khả năng này chi tiết hơn. “Mã hóa chính xác” trên Xaker.ru, dành riêng cho các phương pháp mã hóa tin nhắn.

Nếu bạn cho rằng máy chủ của Apple và Google an toàn 100% trước việc rò rỉ khóa mã hóa của người dùng, hãy xem xét thực tế là nhân viên của họ có quyền truy cập vào chúng. Và nhân viên là con người.
Bất chấp tất cả các lỗ hổng của thông báo đẩy, nhiều ứng dụng nhắn tin tức thời “an toàn”, bao gồm Signal và Telegram, vẫn sử dụng chúng. Nếu không, người dùng sẽ phải “thủ công” theo dõi tin nhắn mới bằng cách liên tục đăng nhập vào ứng dụng. Điều này rất bất tiện và các sứ giả cạnh tranh sẽ có được lợi thế.

Chứng hoang tưởng và lẽ thường


Trong dự án của chúng tôi, chúng tôi đã xem xét kỹ vấn đề này vài tháng trước. Chúng tôi cần thêm tùy chọn thông báo đẩy để cạnh tranh. Nhưng đồng thời, đừng mở lỗ hổng bảo mật, vì bất kỳ rò rỉ dữ liệu nào cũng sẽ làm suy yếu niềm tin vào dự án.

Tuy nhiên, chúng tôi đã có một lợi thế quan trọng: trình nhắn tin của chúng tôi được phân cấp (dữ liệu được lưu trữ trên blockchain) và nhân viên không có quyền truy cập vào tài khoản. Chỉ người dùng mới có khóa mã hóa và khóa chung của người đối thoại mới có sẵn trên blockchain để bảo vệ khỏi các cuộc tấn công MITM.

Trong phiên bản đầu tiên của thông báo đẩy, chúng tôi đã quyết định đảm bảo an toàn nhất có thể và hoàn toàn không truyền tải nội dung tin nhắn. Dịch vụ đẩy không nhận được văn bản tin nhắn từ nút mà chỉ nhận được tín hiệu về thực tế đã nhận được nó. Do đó, người dùng nhìn thấy thông báo “Có tin nhắn mới”. Chỉ có thể đọc nó trong tin nhắn.

Thông báo đẩy an toàn: từ lý thuyết đến thực hành
Nó hoạt động như thế nào: video.

Sau đó, chúng tôi được biết rằng phiên bản thông báo mới nhất của Apple có các tính năng bảo mật mới. Họ phát hành UNNotificationServiceExtension, cho phép các nhà phát triển gửi dữ liệu thông báo được mã hóa hoàn toàn qua APNS. Sau đó, ứng dụng trên thiết bị của người dùng cuối sẽ thực hiện giải mã (hoặc tải xuống dữ liệu bổ sung) và hiển thị thông báo. Chúng tôi lấy nó làm cơ sở cho phiên bản thứ hai của thông báo đẩy.

Hiện chúng tôi đã phát triển phiên bản thứ hai của thông báo đẩy cho iOS, cho phép bạn hiển thị nội dung tin nhắn mà không gặp rủi ro bảo mật. Trong khái niệm mới, logic trông như thế này:

  • Dịch vụ đẩy gửi thông báo đẩy kèm theo số giao dịch (tin nhắn được mã hóa có thể rất lớn và kích thước của thông báo rất hạn chế)
  • Khi thiết bị nhận được thông báo, thiết bị sẽ khởi chạy notificationServiceExtension của chúng tôi - một ứng dụng vi mô yêu cầu giao dịch từ nút theo id, giải mã giao dịch bằng cụm mật khẩu đã lưu và gửi thông báo mới đến hệ thống. Cụm mật khẩu được lưu trữ trong bộ lưu trữ an toàn.
  • Hệ thống hiển thị thông báo có tin nhắn hoặc bản dịch được giải mã.
  • Các phím không đi đâu cả, giống như tin nhắn văn bản đơn giản. Dịch vụ đẩy không có cách nào để giải mã tin nhắn.

Thông báo đẩy an toàn: từ lý thuyết đến thực hành

Chúng tôi đã chấp nhận phiên bản này đang hoạt động và triển khai nó trong bản cập nhật mới nhất của ứng dụng iOS.
Những người quan tâm đến khía cạnh kỹ thuật có thể xem mã nguồn: github.com/Adamant-im/adamant-notificationService.

Nguồn: www.habr.com

Thêm một lời nhận xét