Nội dung chính
[Tải Burpsuite CA vào CA hệ hống](#Tải Burpsuite CA vào CA hệ hống)
[Cài đặt Burp Suite đi qua Socks VPS](#Cài đặt Burp Suite đi qua Socks VPS)
[Bypass SSL Pinning use RMS](#Bypass SSL Pinning use RMS)
Đầu tuần vừa rồi mình mới gặp một dự án đánh giá bảo mật cho ứng dụng Android, và thế là mình và @l4nc3r đã khá vất vả trong việc cài đặt và làm cho Burp Suite nó hoạt động khi kết nối qua VPS của công ty. Vấn đề mình gặp phải ở đây là
- Công ty A mở kết nối hệ thống để VPS của công ty mình có thể truy cập tới ứng dụng nội bộ ungdung.apk của họ.
- Tuy nhiên, VPS này là một con nhân Linux thuê của Vultr, chỉ dùng qua ssh nên không cài đặt file apk ở đó để làm được.
- Làm thế nào mà hai đứa đang WFH ở nhà có thể cài đặt file apk ở máy mình và chạy ngon lành ???
Background
Bình thường mình kết nối Burp Suite với các máy giả lập trên Genymotion rất đơn giản. Chỉ cần vào cài đặt cấu hình proxy theo hướng dẫn của Portswigger’s là xong thôi! Nhưng nay ứng dụng yêu cầu API tối thiểu là 21, và nó không hoạt động trên mấy cái máy cũ của tôi. Tôi đã làm theo cấu hình cài đặt các thứ các thứ của Portswigger’s mà tôi vẫn thường làm nhưng không thấy gì ngoài lỗi kết nối trong Burp:
Tôi đã mất công cài đặt các giả lập khác nhưng vẫn không được, thật khó chịu, tôi đã hỏi anh Sẻ về cái lỗi này. Cuối cùng thì tôi cũng hiểu ra vấn đề nằm ở phiên bản Android mới nhất, để cài đặt được certificate cần chuyển định dạng cacert.cert
sang một dạng mã hóa <hash_id>.0
thì thiết bị giả lập mới hiểu được.
Android mới đã thay đổi hành vi mặc định của việc tin cậy (trusted
) các chứng chỉ (certificates
) do người dùng cài đặt. Không còn đơn giản bằng việc chỉ cài đặt Burpsuite CA từ sdcard
để bắt đầu chặn request gửi lên máy chủ từng ứng dụng. Các ứng dụng giờ đây sẽ chỉ tin cậy (trust
) các CA
hệ thống, có nghĩa là nằm ở System CA
. Lỗi này sẽ hiển thị ở Burpsuite kiểu giống cái ảnh tôi chụp ở trên.
Có hai cách để vượt qua việc cài đặt certificates
từ bên ngoài:
Tải Burpsuite CA vào CA hệ hống (
system-level CA
): Đây là cách dễ dàng thực hiện nhất, và bạn không phải càilockscreen PIN
.Chỉnh sửa tệp
manifest.xml
sau đó đóng gói lại ứng dụng: Nghe cái tên đã lười làm rồi. Bạn tự tham khảo ở tài liệu sau Changes to Trusted Certificate Authorities in Android Nougat
Note: Ở đây tôi sử dụng Burpsuite Pro trên Windows 10 và đang sử dụng MEmu 7.1.2 (API 25).
Tải Burpsuite CA vào CA hệ hống
Để xem các chứng chỉ hệ thống có sẵn, truy cập tới vị trí Settings -> Security -> Trusted Credentials
và xem tại tab SYSTEM CAs.
Theo mặc định, các trusted CAs
của Android được lưu trữ định dạng đặc biệt tại /system/etc/security/cacerts
. Nếu có quyền root
thì có thể ghi Burpsuite CA
vào vị trí này được (sau khi thực hiện sửa đổi cert được export từ Burpsuite.
Export and convert the Burpsuite CA.
Đầu tiên thực hiện export Burpsuite CA thành định dạng cacert.der
. Sử dụng Burpsuite Pro, thực hiện các bước:Proxy > Options > Import / export CA certificate > Certificate in DER format
Android sẽ không hiểu được định dạng .der
hoặc .cert
, nó chỉ hiểu chứng chỉ ở định dạng PEM
và có tên là subject_hash.0
. Sử dụng openssl
để convert định dạng DER sang PEM, và output sẽ là subject_hash_old
, sau đó thực hiện rename
tên tệp tin thành định dạng subject_hash.0
.
openssl x509 -inform DER -in cacert.der -out cacert.pem
openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1
mv cacert.pem 9a5ba575.0
Tôi thực hiện các bước sau:
Sao chép tệp tin chứng chỉ vừa tạo lên thiết bị
Tôi sử dụng adb
để copy chứng chỉ lên thiết bị, nhưng vì nó phải được sao chép vào thư mục hệ thống /system
, nên phải sử dụng remount
thì mới ghi được. Với quyền root thật đơn giản để thực hiện:
adb root
adb remount
adb push 9a5ba575.0 /sdcard/
adb shell
mv /sdcard/9a5ba575.0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/9a5ba575.0
reboot
Sau khi khởi động lại giả lập, truy cập tới Settings -> Security -> Trusted Credentials
để kiểm tra "Portswigger CA" được tạo trong system trusted CA chưa.
Giờ thì chuyển sang bước thiết lập Proxy và bắt đầu tương tác với bất kỳ ứng dụng nào qua Burpsuite thôi :) Để check nhanh, truy cập website bất kì (nên chọn https
) để xem Burpsuite đã bắt được request đi qua chưa.
Cài đặt Burp Suite đi qua Socks VPS
Tuy nhiên ứng dụng A
chỉ chạy thông qua con VPS thôi! Nên bây giờ cần phải thiết lập đi qua VPS và Burpsuite theo một số bước thiết lập cơ bản sau:
- 1 - Sử dụng SSH Tunnel kết nối đến VPS thông qua port
12345
trên máy local.
ssh -D 12345 root@xxx.xxx.xxx.xxx
2 - Cấu hình proxy trên wifi của giả lập MEmu, với địa chỉ ipaddress là địa chỉ ip của máy tính Windows 10, chọn port
8082
.3 - Cấu hình proxy trên Burpsuite để chặn request đi qua port
8082
. Truy cập chức năngProxy > Options > Proxy Listeners
, chọnAll interfaces
, blind port là8082
.4 - Cấu hình Socks trên Burpsuite để kết nối với VPS. Truy cập chức năng
User options > Connections > SOCKS Proxy
, chọnUse SOCKS proxy
và sử dụnghost: 127.0.0.1 - port: 12345
Bùmmmmmmmmmmmmmmmm !
Vẫn không được trong khi trình duyệt web vẫn bắt được, nhưng ứng dụng A
thì không !? Tại sao ? Do ứng dụng có sử dụng SSL Pinning, mình hướng dẫn luôn cách sử dụng RMS để bypass ssl pinning.
Bypass SSL Pinning use RMS
Tham khảo tại https://cobalt.io/blog/getting-started-with-android-application-security
Như vậy là mình đã hoàn tất việc kết nối ứng dụng thông qua VPS và một số hướng dẫn khác rồi. Việc thực hiện các bước này có thể sẽ lặp lại rất nhiều lần sau đó trong việc pentest ứng dụng mobile.
~!
Ngoài cách tạo tunnel để kết nối có thể sử dụng Wireguard hoặc tạo OpenVPN để kết nối tới VPS Server.