0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng Dẫn Bypass SSL Pinning Trong Ứng Dụng Twilio Chat Trên Android

Đăng vào 3 tuần trước

• 3 phút đọc

Giới thiệu

Gần đây, tôi đã thử nghiệm một số ứng dụng di động để tìm hiểu về công nghệ và kỹ thuật mới trên thị trường. Trong lúc này, một người bạn đã gửi cho tôi một ứng dụng Android và cho biết rằng ứng dụng này không sử dụng SSL Pinning, có thể dễ dàng được thử nghiệm bằng Burp Suite.

Mặc dù vậy, khi kiểm tra chức năng chat trong ứng dụng, không có bất kỳ yêu cầu nào xuất hiện trong Burp Suite. Do đó, tôi đã quyết định tải ứng dụng và nghiên cứu thêm.

Tại Sao Không Bắt Được Yêu Cầu Chat?

Dựa trên kinh nghiệm của mình trong việc kiểm tra an ninh ứng dụng di động, tôi có thể suy đoán hai khả năng có thể xảy ra:

  1. Chức năng chat không sử dụng giao thức HTTP, do đó Burp không thể bắt được yêu cầu.
  2. Ứng dụng sử dụng dịch vụ từ bên thứ ba, và dịch vụ đó có SSL Pinning riêng.

Giả thuyết đầu tiên có thể sẽ không khả thi, vì vậy tôi đã tiếp tục tìm hiểu theo giả thuyết thứ hai. Nếu lập trình viên đã triển khai SSL Pinning cho một ứng dụng, họ có thể đã làm điều này trên toàn bộ ứng dụng, không chỉ cho từng phần.

Tìm Kiếm Thư Viện

Để củng cố giả thuyết của mình, tôi đã decompile tệp APK bằng apktool:

Copy
java -jar apktool.jar d redacted.apk

Sau khi decompile, tôi đã tìm kiếm trong thư mục lib, nơi chứa các thư viện bên thứ ba. Nhờ vào các kỹ năng tìm kiếm và dò tìm, tôi xác định rằng thư viện chính thực hiện tính năng chat là Twilio.

Twilio Là Gì?

Twilio là một nền tảng cung cấp các dịch vụ giao tiếp, đặc biệt là cho các ứng dụng chat và nhắn tin. Nó mang lại trải nghiệm xử lý tin nhắn trực tiếp và tương tác giữa người dùng.

Bypass SSL Pinning Trên Twilio

Bây giờ tôi sẽ thử nhiều phương pháp khác nhau để bypass SSL Pinning.

Phương Pháp 1: Hook Bằng Frida

Tôi sẽ thử phương pháp phổ biến và đơn giản nhất trước. Đầu tiên, cần phải tìm hàm thực hiện SSL Pinning. Bằng việc sử dụng lệnh nm để liệt kê các hàm trong thư viện Twilio:

Copy
nm --demangle --dynamic libtwilio-convo-native.so

Tôi không tìm thấy bất kỳ hàm nào liên quan đến SSL Pinning, do đó tôi cần phải tìm sâu hơn.

Đào Sâu Hơn: Sử Dụng GDA

Tôi đã sử dụng công cụ GDA để tìm kiếm các giao thức liên quan. Trong số đó, tôi đã phát hiện ra hàm readCertificateStore, cho thấy rằng Twilio đọc một danh sách các Root Cert có sẵn trong thiết bị. Nếu quá trình đọc không thành công, nó sẽ tìm kiếm trong một tệp chứa các Root Cert nằm trong tệp tin APK.

Tôi đã tìm thấy tệp tin rootcert.pem trong thư mục /res/raw, chứa danh sách các root cert.

Phương Pháp 2: Patch APK

Với thông tin mà tôi thu thập được, tôi bắt đầu thực hiện các bước bypass SSL Pinning như sau:

Bước 1: Chèn chứng chỉ Burp vào đầu tệp tin rootcert.pem.

Bước 2: Sử dụng apktool để patch lại APK.

Copy
java -jar apktool_2.9.3.jar b redacted.apk

Khi tệp APK mới được tạo, yêu cầu chat qua socket đã được bắt thành công.

Kết Luận

Việc bypass SSL Pinning không hề đơn giản và yêu cầu sự kiên nhẫn, kỹ năng phân tích, và hiểu biết sâu sắc về cách thức hoạt động của các thư viện bên thứ ba như Twilio. Hy vọng bài viết này sẽ giúp ích cho những ai đang tìm hiểu về môi trường an ninh trong ứng dụng di động.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào