Phá certificate pinning của Messenger của Meta (macOS)
- Ứng dụng Messenger cho macOS của Meta tương tự mô hình của Texts.com, một ứng dụng desktop độc lập.
- Batuhan İçöz, người dẫn dắt dự án nền tảng Meta tại Texts.com, cho rằng bước đầu tiên quan trọng là chặn các yêu cầu mạng.
- Meta tăng cường bảo mật bằng cách áp dụng certificate pinning và ngăn việc phân tích các yêu cầu máy chủ thông qua tấn công MITM (man-in-the-middle).
Certificate pinning là gì?
- Khi cấu hình một proxy client, cần thiết lập để tin cậy "certificate authority".
- Có thể chặn và giải mã thông tin của các yêu cầu bằng cách sử dụng chứng chỉ do certificate authority cấp.
- Nếu dịch vụ triển khai certificate pinning, nó chỉ chấp nhận các chứng chỉ được cấp bởi những certificate authority cụ thể, khiến không thể dùng chứng chỉ do certificate authority của người dùng cấp.
Hành vi mặc định
- Nếu không vô hiệu hóa certificate pinning, mọi yêu cầu đều trả về "lỗi nội bộ", và phần mềm proxy hiển thị "SSL handshake failed".
- Vì yêu cầu không thể hoàn tất vòng đời, không thể suy luận thông tin về yêu cầu đó.
Hành vi mong muốn
- Có thể dùng tấn công MITM để đọc thành công request, response và header trong công cụ debug mạng.
Các cách tiếp cận khả thi
- Một trong những cách từng hoạt động là thay đổi chuỗi URL trong binary sang một endpoint tự host không an toàn, không triển khai TLS.
- Có thể dùng thư viện dynamic instrumentation như Frida, nhưng Messenger đặc biệt dễ bị crash, nhất là khi hooking.
- Việc dùng Frida đi kèm một quy trình triển khai phức tạp.
Cách tiếp cận
- Tải Messenger, chuyển nó vào thư mục Applications, rồi import binary ARM vào Hopper.
- Hopper có thể dùng để disassemble, decompile, recompile, debug và trực quan hóa binary.
- Tìm các chuỗi như "SSL pinning validation failed" để cố gắng giảm thiểu số lượng chỉnh sửa.
- Phát hiện chuỗi "Using custom sandbox -> turn off SSL verification" rồi tìm và sửa hàm liên quan.
- Thiết lập hàm IsUsingSandbox luôn trả về true để vô hiệu hóa certificate pinning.
Kết quả
- Sau khi export file thực thi mới và gỡ chữ ký, thay thế binary Messenger gốc bằng binary mới.
- Khi khởi động lại Messenger, công cụ proxy hiển thị header, response body và toàn bộ thông tin request.
- Đã chặn request thành công chỉ với việc sửa đúng 4 byte trong tổng số 97,477,728 byte của binary.
Triển khai
- Sau khi biên dịch binary, gửi nó cho Batuhan.
- Batuhan nhận chứng chỉ ký, cài đặt nó và ký ứng dụng.
- Sau khi ký xong, anh ấy có thể dùng binary trên hệ thống của mình để xem các request của chính mình.
Ý kiến của GN⁺
- Bài viết này cung cấp một ví dụ thú vị về cách các nhà nghiên cứu bảo mật vượt qua certificate pinning trong ứng dụng Messenger của Meta.
- Certificate pinning là một tính năng bảo mật quan trọng để ngăn tấn công man-in-the-middle, nhưng việc các nhà nghiên cứu tìm ra cách vượt qua nó mang lại những góc nhìn quan trọng cho cộng đồng bảo mật.
- Kỹ thuật này có thể giúp các nhà phát triển tăng cường bảo mật cho ứng dụng hoặc dịch vụ của mình, đồng thời hỗ trợ phát hiện và khắc phục lỗ hổng bảo mật.
- Tuy nhiên, cũng cần thận trọng khi chia sẻ kết quả nghiên cứu vì chúng có thể bị sử dụng với mục đích xấu.
- Các công cụ khác cung cấp chức năng tương tự bao gồm công cụ phân tích mạng như Wireshark hoặc Burp Suite, vốn được sử dụng rộng rãi để giám sát và phân tích lưu lượng mạng.
1 bình luận
Ý kiến trên Hacker News
Thắc mắc về khía cạnh pháp lý
Nỗ lực và sự kiên trì khi thử decompile rồi recompile
Sự mai một của kỹ năng kỹ thuật ngày xưa
Nhận xét liên quan đến cơ chế phòng thủ RE của Meta
IsUsingSandbox()trong bản build production có lẽ sẽ khá đơn giản.Certificate pinning trong chế độ sandbox
Tính hữu ích của checksum nhị phân lúc runtime
Câu hỏi về việc sử dụng công cụ proxy
Bảo mật của ứng dụng từ các công ty lớn
Khả năng chặn bắt lưu lượng của ứng dụng Meta
Tầm quan trọng của việc giám sát lưu lượng