- Nhiều ứng dụng đang tích hợp trực tiếp mô hình AI vào thiết bị. Điều này có lợi khi suy luận nhanh và khả năng truy cập ngoại tuyến là quan trọng
- Tuy nhiên, việc tệp mô hình tồn tại bên trong thiết bị cũng đồng nghĩa người dùng có thể trích xuất và phân tích tệp đó
Mục tiêu
- Ứng dụng Seeing AI của Microsoft là một “camera biết nói” dành cho người khiếm thị, có thể nhận diện vật thể, tài liệu, tiền tệ và mô tả chúng bằng giọng nói
- Đặc biệt, tính năng nhận diện tiền tệ hỗ trợ hơn 17 loại tiền và nhận diện 225 tờ tiền khác nhau
- Mô hình được đóng gói bên trong tệp APK dùng để phân phối ứng dụng, nhưng tồn tại dưới dạng một tệp đã mã hóa (
currency)
- Nếu tệp chỉ được mã hóa đơn giản, có thể theo dõi bộ nhớ hoặc quá trình giải mã khi ứng dụng chạy để trích xuất tệp
Điều tra ban đầu
- Ứng dụng Android được phân phối dưới dạng tệp APK, là một gói lưu trữ chứa mọi thứ cần thiết để chạy ứng dụng
- Mô hình AI thường được lưu cùng với các tài nguyên này
- Có thể dùng
apktool để dịch ngược APK và phân tích cấu trúc của nó
- Trong thư mục
assets, phát hiện một tệp tên là currency, nhưng nó đã được mã hóa
Đi xa hơn
- Có thể dịch ngược để tìm hiểu ứng dụng giải mã tệp
currency như thế nào
- Xác nhận rằng TensorFlow Lite được sử dụng trong
com.microsoft.seeingai
- Có thể dùng
org.tensorflow.lite.NativeInterpreterWrapper để tải các mô hình *.tflite
Sử dụng Frida
- Frida là một công cụ dynamic instrumentation có thể chạy trên hầu hết mọi hệ điều hành, cho phép gắn vào tiến trình đang chạy và thay đổi hành vi của nó
- Có thể gắn vào trong lúc tiến trình đang chạy để theo dõi lời gọi phương thức, xem tham số và giá trị trả về, hoặc ghi đè nội dung phương thức bằng logic mong muốn
- Ví dụ: có thể sửa
checkKey(key) để luôn trả về true
- Objection là công cụ CLI tập hợp các script Frida, hữu ích cho nghiên cứu ứng dụng di động
- Theo dõi lời gọi hàm của
org.tensorflow.lite.NativeInterpreterWrapper để dump mô hình ra đĩa
- Khi ứng dụng chạy,
.createModelWithBuffer(java.nio.ByteBuffer, long) được gọi; ByteBuffer truyền vào lúc này nhiều khả năng chính là mô hình .tflite đã được giải mã
- Nếu hook phương thức này và thay thế bằng mã dùng để dump, có thể lưu mô hình đó xuống đĩa
- Dùng lệnh
adb pull để đưa mô hình .tflite đã trích xuất (currency.tflite) về máy cục bộ
- Tải bằng các công cụ như Netron để kiểm tra xem đó có đúng là mô hình TensorFlow Lite thật hay không (các layer, trọng số, bias, v.v.)
- Dump hoàn chỉnh mô hình nhận diện tiền tệ đã thành công
CTRL + C; CTRL + V
- Có thể áp dụng kiểu tấn công này với các ứng dụng dùng TensorFlow Lite
- Ví dụ, Adobe Scan là một ứng dụng tuyệt vời mà tôi thực sự dùng khá thường xuyên, và tính năng tốt nhất của nó là quét tài liệu bằng camera điện thoại
Lưu ý
- Mô hình được trích xuất có bản quyền, vì vậy nên tránh sử dụng/chỉnh sửa trái phép khi chưa có sự cho phép hợp pháp
- Phương pháp trong bài viết này nhằm mục đích nghiên cứu; khi áp dụng thực tế cần cân nhắc các quy định pháp lý liên quan và vấn đề sở hữu trí tuệ
3 bình luận
Và cả reverse model nữa,,
Wow, trích xuất file weight từ file apk luôn sao??
Dù chỉ giới hạn ở một số thư viện nhất định, nhưng vẫn thật ấn tượng..
Ý kiến trên Hacker News
tflite, cách an toàn hơn là lưu trữ mô hình trên Firebase và xóa sau khi hoàn tất công việc