Chiếc điện thoại bảo mật [Phần 2] (Ứng dụng crypto như nào cho đúng?)

    Sau khi công bố bài trước, tôi chờ phản ứng của BKAV, tuy nhiên họ chọn cách IM LẶNG trước báo chí. Thay vào đó, họ cùng các GIÁO ĐỒ biện minh “không chính thống” trên CÁC GROUP CỦA HỌ:



    Tôi ẩn danh để tránh bị đội ngũ truyền thông BKAV “bỏ bóng đá người”, nhưng họ (cũng không hẳn là họ, mà là vợ của sếp Q) vẫn cố tìm được một ai đó để CÔNG KÍCH cho hả dạ, và nạn nhân bị ăn đạn lạc là bạn HiếuPC, leader của một tổ chức CHỐNG LỪA ĐẢO TRÊN MẠNG. Tôi đã hi vọng bài viết của tôi sẽ kéo BKAV trở lại mặt đất, xem xét lại những lỗ hổng, sai sót trong sản phẩm để làm cho nó BẢO MẬT CAO đúng như quảng cáo. Tuy nhiên tôi chỉ nhận lại được những lời ngụy biện, chụp mũ cho tôi cái danh bôi nhọ danh dự của những người được coi là đứng đầu tổ chức BKAV.



    Tôi đã nể nang BKAV và cũng nghĩ tới lợi ích của người dùng Bphone nên đã không công bố 100% phương thức sử dụng để vượt qua cơ chế chống trộm. Nếu chú ý có thể bạn đọc cũng nhận ra có một số thông tin của bài viết khá chung chung, không rõ ràng. Tôi không bất ngờ khi một số tín đồ của BKAV lợi dụng các sơ hở đó để tẩy đen thành trắng, thủ dâm tinh thần với nhau. Tôi đã mong chờ, một lời thừa nhận cầu thị rằng đây là một  LỖ HỔNG BẢO MẬT và một bản vá để bảo vệ người dùng, tuy nhiên tới thời điểm này tôi vẫn chưa thấy một bản cập nhật nào, chỉ toàn là những lời ngụy biện lừa lọc người dùng. Đó là lý do mà tôi tiếp tục viết bài này, cũng là để giải thích thêm một số chi tiết mà tôi đã bỏ qua trong phần trước (và cũng hy vọng mấy ông “đẻ” ra cái BMS ĐỌC KỸ bài này).

………………………………

ĐÂY LÀ PHẦN KỸ THUẬT

………………………………

    Tiếp tục với phần trước với cấu trúc của đoạn tin nhắn được gửi từ BMS server tới Bphone:

    Trong bài trước, tôi không muốn giải thích “code gì đó” vì sợ bạn đọc bị rối.  “code gì đó” được Bphone gọi là “token code”, theo mấy ông “đẻ” ra BMS thì code này được tạo riêng biệt cho từng thiết bị, và chỉ khi “token_code” này khớp thì lệnh khóa máy mới được thực hiện.

    Tôi xác nhận LÝ THUYẾT mà họ đặt ra là đúng, khớp với những gì được thể hiện trong mã nguồn BMS:


    Ở đây chúng ta có 3 nhánh:

  • Nhánh 1: Nếu “token_code” chưa tồn tại trong máy thì sẽ trực tiếp lấy “token_code” từ tin nhắn để lưu lại vào máy và tin nhắn khóa máy sẽ được chấp nhận
  • Nhánh 2.1: Nếu hash(token_code từ tin nhắn) = hash(token_code được lưu trong máy) thì tin nhắn khóa máy sẽ được chấp nhận.
  • Nhánh 2.2: Nếu hash(token_code) != hash token code trong máy thì sẽ gửi một yêu cầu tới server để lấy token_code mới. Tin nhắn khóa máy sẽ bị từ chối.


Lưu đồ xử lý tóm gọn lại như sau:



    Nhánh số 1 cho ta một cơ hội tấn công: nếu như máy CHƯA CÓ “token_code” ta hoàn toàn có thể TỰ CÀI “token_code”  và khoá máy. Tôi không rõ tại sao, nhưng trước giờ khi tôi hack thử, ít nhất là với 4 máy thì token code vẫn luôn là 787863. Tôi đoán máy chủ Bphone không tạo “token_code” ngẫu nhiên mà sử dụng một thuật toán tất định nào đó.  Tuy nhiên đây chỉ là trường hợp lý tưởng, tôi không tin vào sự may rủi nhiều lắm. Let’s do this the hard way!

    Để hiểu rõ hơn phần xử lý “token_code”, ta cùng quay lại mã nguồn đã bỏ qua trong bài trước:




    tokenSig” được lấy từ phần “fd:” của tin nhắn với điều kiện “f = 100” (viết tắt: F = Feature, FD = FeatureData), như ví dụ như sau ta có “tokenSig" = uDeWa9sD27GV…:



    Nếu trong tin nhắn có “tokenSig” , thay vì đi vào nhánh lock máy, chương trình sẽ đi vào nhánh gọi tới BmsUtils.setTokenCode() với các tham số “token_code” và “tokenSig” trích ra từ  tin nhắn khóa máy . Đoạn mã nguồn xử lý phần này như sau:



    Có vẻ như người “đẻ” ra BMS cũng đã đề phòng trường hợp “token_code” có thể bị set tùy ý thông qua SMS. Trước khi chấp nhận “token_code", BMS sẽ kiểm tra một chữ ký điện tử được lưu trong “tokenSig". Hãy cùng tiếp tục xem cách mà họ đã kiểm tra “tokenSig", phần này được xử lý bởi hàm Utils.verifySignature() với tham số thứ nhất là chuỗi “token_code + chipid hoặc IMEI của máy”, tham số thứ hai là “tokenSig”:



    Ý tưởng họ muốn làm rất đúng, chữ ký điện tử “tokenSig" này CHỈ CÓ THỂ được sinh ra nếu có khóa bí mật (private key), phía client có thể xác thực chữ ký  này bằng khóa công khai (public key). 

    Ý tưởng rất tuyệt vời nhưng cách họ làm lại không được như vậy, tôi nghĩ người “đẻ” ra tính năng này cần đi học lại một khóa về mật mã ứng dụng cho đàng hoàng trước khi bắt tay vào code. 

    Nếu đã từng học qua một lớp vỡ lòng về mật mã, hoặc là từng làm về kiểm thử an toàn bảo mật có thể bạn cũng sẽ nhận ra được điều gì không đúng trong hàm Utils.verifySignature(). 

    Vâng, khóa RSA mà BMS sử dụng để xác thực nội dung QUÁ NGẮN, CHỈ DÀI 384 BITS:



    Khoá ngắn vầy thì rất dễ BỊ CRACK để giả mạo chữ ký. Gần đây hệ thống cấp giấy đi đường ở Hà Nội cũng gặp vấn đề tương tự. (Chi tiết tại: https://ctrsec.io/index.php/2021/09/17/weak-rsa-in-realworld-vietnamese/). 

    Quay trở lại với Bphone, tôi đã sử dụng cách tương tự trong bài viết của Chí Trần, và cũng không bất ngờ lắm khi private key đã BỊ CRACK chỉ sau 35 phút, tổng thiệt hại $5 thuê dịch vụ Amazon Web Services:


    
Dựa vào thông tin p và q vừa tìm được, tôi sử dụng một vài công cụ nhỏ để tạo lại khóa bí mật:



    Để kiểm tra khóa bí mật này có phải hàng thật không thì cũng đơn giản thôi, khóa công khai được tạo ra từ khóa bí mật này trùng khớp với khóa công khai được hardcoded trong mã nguồn của BMS (bạn đọc có thể tự kiểm chứng tại đây: https://tinyurl.com/2p898spy):



    Sử dụng khóa bí mật đã crack được, tôi có thể cài “token_code” bất kỳ cho một thiết bị bất kỳ, miễn sao là có được thông tin IMEI (đối với dòng A40, 50, 60, … về sau thì khỏi cần IMEI luôn, vì chip id luôn empty). Mẫu tin nhắn được dùng để set “token_code” trông như sau:




    Và khi đã set được “token_code” tùy ý thì ta chỉ cần làm tiếp các bước đã được mô tả trong bài trước để có thể mở khóa Bphone. 

    Tôi cũng lấy làm lạ khi các bác CEO liên tục thanh minh rằng với phương pháp unlock của tôi thì mỗi khi có mạng sẽ tự báo mất máy tiếp, không biết các bác ý đã nhờ đội kỹ thuật kiểm tra chưa. Tôi đã thử nghiệm trên 4 con Bphone tôi mua, và thêm vài con máy mượn được nữa, chưa có máy nào bị báo mất máy lại sau khi có mạng cả!

  • Kết

    Mỗi công ty đều có cách quảng bá chất lượng sản phẩm khác nhau và nhắm đến mục đích cuối cùng là phục vụ người dùng. Tuy nhiên, nếu không cầu thị tiếp thu ý kiến đóng góp từ người khác, mà chỉ tập trung "bỏ bóng đá người" thì sản phẩm sẽ không bao giờ tốt lên được.

    Tôi hy vọng Bkav hãy đầu tư nhiều hơn nữa vào chất lượng sản phẩm thay vì tập trung quá nhiều cho truyền thông như hiện tại.

    Chào thân ái,


Comments

  1. This comment has been removed by the author.

    ReplyDelete
  2. Đủ trình độ chuyên môn đấy :D

    ReplyDelete
  3. Gất xinh đẹp tuyệt vời

    ReplyDelete
  4. Replies
    1. Cảm ơn bạn nhiều :))
      Không nhờ tool của bạn thì còn lâu mới đkmh được với cái web củ chuối số 1 VVN :v

      Delete
  5. +1 respect. Trình độ và tâm huyết!

    ReplyDelete
  6. Thế là họ sắp gửi cho 3tr nữa rồi =)))

    ReplyDelete
  7. Bạn có thể làm cái ứng dụng esim dùng trên máy khác được không bạn

    ReplyDelete
  8. Cảm ơn cho 1 bài viết hay. Các "kĩ sư" BKAV vẫn không thừa nhận.

    Mình tò mò anh Khuc Duy Nam là ai. Vô tình xem được bài đáp trả của him 1 lần nữa tại đây https://www.facebook.com/groups/gocnhinbphone/posts/1246588485824621/

    ReplyDelete
  9. Bài viết tôi mới đọc được cho ai muốn biết cách lấy imei https://blog.manhtuong.net/lam-the-nao-de-lay-duoc-imei-cua-dien-thoai-bat-ky/

    ReplyDelete
  10. This comment has been removed by the author.

    ReplyDelete
  11. Ủng hộ bác chủ thread, cái người dùng BP và người ủng hộ hàng VN cần là sự cầu thị và cố gắng vì người dùng.
    Cứ như Vin đã làm với Vsmart có ai nói gì đâu

    ReplyDelete
  12. Cảm ơn ngài đã cho anh em chúng tôi có chuyện cười để đọc hàng ngày :D

    ReplyDelete
  13. cám ơn bài viết, qua đây thấy được quảng nổ yếu về chuyên môn lẫn đạo đức

    ReplyDelete
  14. với dân kĩ thuật như chúng tôi thì nhìn vào biết ngay bảo mật của Bkav rất an toàn, an toàn tới nỗi data khách hàng trong vòng 5 6 tháng bị 2 3 ông hacker lấy được. Vâng, rất bảo mật

    ReplyDelete
  15. máy đã unlock rồi thì cần gì báo mất máy tiếp, bms đã thấy đc máy đã nhập mã đúng thì sẽ mở rồi thì cần gì kiểm tra lại nhỉ? Hay kiểm tra lại trùng pass nhỉ?

    ReplyDelete
  16. Drama nào không hít chứ drama công nghệ phải xem :v

    ReplyDelete
  17. Cái này có phải dân chơi game hay nhận xét là: "Ao Chình" (out trình) ko nhỉ? :D

    ReplyDelete

Post a Comment

Popular posts from this blog

Tôi đã hack điện thoại bảo mật hàng đầu VN như thế nào?