Thứ Tư, 20 tháng 5, 2020

Cảnh báo: lỗ hổng nghiêm trọng trong ứng dụng Bluezone

Theo nguồn: https://vnhacker.blogspot.com/


Tóm tắt

Bluezone là ứng dụng truy vết tiếp xúc, giúp cảnh báo nếu bạn đã ở gần người nhiễm COVID-19. Ứng dụng này do Chính phủ Việt Nam phát hành và được thực hiện bởi các doanh nghiệp công nghệ số Việt Nam gồm: Memozone, VNPT, MobiFone và BKAV. Ngày 18/4/2020 VnExpress dẫn lời Bộ trưởng Nguyễn Mạnh Hùng:

Bluezone là bước tiến mới, có tính đột phá trong việc sử dụng công nghệ để phòng chống dịch bệnh. Đột phá ở chỗ, chính quyền không thu thập thông tin người dân [...] người dân có thể giám sát phần mềm mình đang dùng có an toàn không. Chúng ta không phải quốc gia đầu tiên dùng giải pháp này, nhưng phần mềm Việt Nam giải quyết được cơ bản các lỗi của các phần mềm trước đó.

Trong kết luận tại cuộc họp Thường trực Chính phủ về phòng, chống dịch COVID-19 ngày 23/4/2020, Thủ tướng Nguyễn Xuân Phúc cũng đã yêu cầu “khẩn trương đánh giá [...] ứng dụng Bluezone”. Tôi thấy vui mừng khi Chính phủ Việt Nam quan tâm đến quyền riêng tư của người dân. Sẵn có chút nghề trong người, thông qua một người bạn, tôi đã ngỏ ý trực tiếp với BKAV sẽ giúp họ đánh giá an ninh, nhưng cho đến nay chưa nhận được phản hồi. Ngày 24/4/2020, sau khi thấy ứng dụng Bluezone cho Android được đưa lên Google Play, tôi đã tải về coi thử.

Bằng cách dịch ngược mã phần mềm, tôi đã phát hiện nhiều lỗ hổng nghiêm trọng ảnh hưởng đến sự an toàn và riêng tư của người dùng. Tại thời điểm tôi viết những dòng này, đã có gần 10.000 người đăng ký sử dụng Bluezone và con số này tăng lên rất nhanh, chỉ riêng hôm nay đã tăng gấp 3 lần. Tôi muốn gửi lời cảnh báo đến tất cả mọi người, ai đã lỡ cài thì nên gỡ bỏ, còn ai chưa cài thì không nên cài.

Tôi đã gửi toàn bộ thông tin chi tiết về lỗ hổng đến BKAV. Tôi đề nghị BKAV và các đơn vị phát triển Bluezone tạm ngừng phát hành sản phẩm này. Thay vì tìm cách sửa chữa giải pháp hiện thời, tôi đề nghị sử dụng lại các giải pháp mở đã được thiết kế và kiểm định bởi những chuyên gia có uy tín. Giải pháp mở tốt nhất hiện tại là DP3T của Châu Âu.

Nếu việc phát triển Bluezone diễn ra trên một không gian mở như GitHub (mạng xã hội của lập trình viên), những vấn đề này đã sớm được phát hiện. Tôi đề nghị nhóm phát triển Bluezone ngay lập tức chuyển tất cả mã nguồn, tài liệu và đưa việc phát triển Bluezone lên GitHub.

Các quốc gia khi phát triển giải pháp truy vết tiếp xúc đều tham khảo ý kiến của các chuyên gia. Tôi thấy ứng dụng Bluezone có rất nhiều lỗ hổng sơ đẳng, chứng tỏ việc thiết kế và triển khai không có sự tham gia của những chuyên gia về an ninh mạng và riêng tư. Tôi đề nghị Chính phủ Việt Nam tổ chức đánh giá và phản biện độc lập trước khi giới thiệu với người dân một ứng dụng nhạy cảm như Bluezone.

Cách thức hoạt động của Bluezone


Nguồn: https://bluezone.vn


Tóm tắt những lỗ hổng nghiêm trọng


1/ Bluezone sử dụng sóng Bluetooth để phát và thu mã số ngẫu nhiên. Thay vì liên tục thay đổi mã số ngẫu nhiên như các giải pháp của Singapore, Châu Âu hay Google/Apple, mỗi người sử dụng Bluezone chỉ có một mã số duy nhất, gọi là mã ID Bluezone. Người sử dụng không thể thay đổi mã số này, trừ khi xóa và cài lại ứng dụng. Cách làm không giống ai này khiến người sử dụng có thể bị theo dõi, bị lộ thông tin vị trí, hành trình, đã gặp ai, có bị nhiễm hay phơi nhiễm hay không.

2/ Ngoài việc không thay đổi mã ID Bluezone, ứng dụng Bluezone cũng không thay đổi địa chỉ Bluetooth của thiết bị. Nếu không thay đổi địa chỉ Bluetooth người dùng sẽ bị theo dõi và lộ bị lộ thông tin vị trí, hành trình, đã gặp ai, có bị nhiễm hay phơi nhiễm hay không. Đây cũng làm một cách làm không giống ai, vì các giải pháp của Châu Âu, Singapore hay Google/Apple đều nhấn mạnh phải thay đổi địa chỉ Bluetooth.
Cập nhật 24/4/2020 7:30PM: chỗ này không công bằng với Bluezone vì muốn thay đổi địa chỉ Bluetooth thì cần sự hỗ trợ của hệ điều hành và phần cứng. Để an toàn, mã ID Bluezone và địa chỉ Bluetooth phải được đổi cùng lúc. Trên một số dòng điện thoại Android, nếu ứng dụng khởi động lại quá trình gửi quảng cáo qua Bluetooth thì địa chỉ Bluetooth sẽ thay đổi, nhưng chuyện này còn phụ thuộc vào nhà sản xuất điện thoại. Còn trên iOS hiện giờ tôi không biết có cách nào không. API mới mà Google/Apple sắp phát hành vào tháng 5 năm nay hi vọng sẽ tự động hóa việc này, các ứng dụng truy vết như Bluezone có thể dùng lại mà không cần quan tâm đến vấn đề này nữa.

3/ Mã ID Bluezone quá ngắn, dễ dẫn đến trùng mã. Tổng số lượng mã ngẫu nhiên là ở khoảng 36^6, tức lớn hơn 2^31 một chút. Theo nghịch lý ngày sinh, chỉ cần 2^16 người đăng ký sử dụng, tức là khoảng 65 ngàn người, thì sẽ có hai người có mã ID Bluezone trùng nhau với xác suất cao. Khi đó, nếu một trong hai người bị nhiễm (phơi nhiễm), người kia cũng sẽ bị tính là nhiễm (phơi nhiễm)!

4/ Thuật toán tạo mã ID Bluezone rất dễ đoán. Chỉ cần biết thời điểm bạn đăng ký sử dụng app, người khác có thể đoán được mã ID của bạn. Tôi có thể tính được mã ID Bluezone của tất cả người dùng. Nếu bị lộ mã ID Bluezone, người dùng có thể bị kẻ xấu quy kết là đã nhiễm bệnh hoặc phơi nhiễm, dẫn đến bị cách ly, mặc dù hoàn toàn khỏe mạnh.

5/ Khi chạy app Bluezone lần đầu tiên, Bluezone đăng ký để nhận tin nhắn từ máy chủ BKAV qua dịch vụ Firebase Cloud Messaging. Quá trình đăng ký dựa vào ID Bluezone, nhưng vì ID Bluezone có thể bị đoán trước, kẻ xấu có thể dễ dàng đăng ký để nhận mã ID Bluezone của tất cả người dùng, hoặc của một nhóm người dùng. Khi đó tất cả tin nhắn mà máy chủ BKAV gửi xuống người dùng đều sẽ bị lộ.

6/ Ứng dụng Bluezone Android yêu cầu người dùng cấp quyền truy cập thông tin vị trí, hình ảnh, tài liệu lưu trên điện thoại. Bluezone không cần sử dụng những thông tin này để thực hiện truy vết. Nhóm phát triển ứng dụng nên gỡ bỏ những yêu cầu này.
Cập nhật 3PM 24/4/2020: Bluezone phải yêu cầu người dùng cấp quyền truy cập thông tin vị trí vì Android bắt buộc (nguồn). Đây là một tính năng privacy của Android, vì thông qua Bluetooth có thể định vị vị trí của người dùng. Cảm ơn bạn Triệu Minh Khôi đã chỉ ra (nhưng không hiểu sao lại xóa comment rồi àh đã post còm mới rồi). Bluezone yêu cầu quyền đọc và ghi external storage, đây là nơi Android lưu hình ảnh, tài liệu. Bạn Triệu Minh Khôi có nói sở dĩ Bluezone làm vậy là vì muốn backup các ID Bluezone đã thu thập được. Tôi nghĩ không nên backup thông tin nhạy cảm ra external storage, vì đây là nơi ai cũng có thể đọc.
Cập nhật 8:30PM 24/4/2020: Tôi đã xác nhận Bluezone ghi xuống external storage những ID Bluezone và địa chỉ của các thiết bị mà nó đã thấy. Tất cả các ứng dụng khác trên cùng điện thoại có thể đọc được dữ liệu này và qua đó có thể biết được người dùng đã gặp ai, ở đâu, vào lúc nào. Các ứng dụng này cũng có thể xóa hay ngụy tạo dữ liệu để khiến người dùng bị false positive (không bị phơi nhiễm nhưng bị quy là có) và false negative (bị phơi nhiễm nhưng tưởng là không).
Để hiểu rõ tác hại của những vấn đề này, xin tham khảo phân tích an ninh và riêng tư cho các giải pháp truy vết tiếp xúc của DP3T.

Chi tiết lỗ hổng


Toàn bộ thông tin chi tiết về tất cả lỗ hổng đã được chuyển cho BKAV và sẽ được công bố rộng rãi sau 7 ngày nữa. Thời gian biểu này tuân theo chính sách công bố lỗ hổng bảo mật của Google, nhưng xin lưu ý tôi làm việc này hoàn toàn trên danh nghĩa cá nhân, với tư cách một người Việt Nam, không liên quan gì đến nơi tôi làm việc.

(Xem phản hồi của Bluezone)

Lịch sử thay đổi
(3AM 24/4/2020) Công bố báo cáo.
(3PM 24/4/2020) Điều chỉnh lại một chỗ chưa chính xác, giải thích tại sao Bluezone phải cần quyền truy cập thông tin vị trí mặc dù không dùng đến vì đây là yêu cầu của Android. Cảm ơn bạn Triệu Minh Khôi đã chỉ ra chỗ sai này.
(24/4/2020 7:30PM) Thêm một đoạn giải thích hiện giờ Bluezone không thể tự thay đổi địa chỉ Bluetooth mà phải phụ thuộc vào hệ điều hành và phần cứng.
(8:30PM 24/4/2020) Thêm một lỗ hổng mới: Bluezone lưu dữ liệu thu thập được vào external storage, đây là phần bộ nhớ mà các app khác cài trên cùng điện thoại có thể thoải mái đọc/ghi.

Không có nhận xét nào:

Đăng nhận xét