- หลายแอปผนวกโมเดล AI ไว้ในอุปกรณ์โดยตรง ซึ่งเหมาะในกรณีที่ต้องการการอนุมานที่รวดเร็วและการเข้าถึงแบบออฟไลน์
- แต่การที่ไฟล์โมเดลอยู่ภายในอุปกรณ์ก็หมายความว่าผู้ใช้สามารถดึงไฟล์นั้นออกมาและวิเคราะห์ได้เช่นกัน
เป้าหมาย
- แอป Seeing AI ของ Microsoft เป็น "กล้องพูดได้" สำหรับผู้พิการทางสายตา โดยสามารถจดจำวัตถุ เอกสาร ธนบัตร และอื่น ๆ แล้วอธิบายออกมาเป็นเสียง
- โดยเฉพาะฟีเจอร์จดจำสกุลเงิน (currency) รองรับมากกว่า 17 สกุลเงิน และจดจำธนบัตรที่ไม่ซ้ำกันได้ 225 แบบ
- แม้โมเดลจะถูกรวมอยู่ในไฟล์ APK ซึ่งเป็นรูปแบบการแจกจ่ายแอป แต่จะอยู่ในรูปไฟล์ที่เข้ารหัสชื่อ
currency
- หากไฟล์ถูกเข้ารหัสแบบไม่ซับซ้อน ก็สามารถติดตามหน่วยความจำหรือกระบวนการถอดรหัสระหว่างที่แอปทำงานเพื่อดึงไฟล์ออกมาได้
การสำรวจเบื้องต้น
- แอป Android ถูกแจกจ่ายเป็นไฟล์ APK ซึ่งเป็นอาร์ไคฟ์ที่บรรจุทุกอย่างที่จำเป็นต่อการทำงานของแอป
- โดยทั่วไปโมเดล AI จะถูกเก็บไว้ร่วมกับแอสเซ็ตเหล่านี้
- สามารถใช้
apktool เพื่อ decompile ไฟล์ APK และวิเคราะห์โครงสร้างได้
- พบไฟล์ชื่อ
currency ในโฟลเดอร์ assets แต่ไฟล์ถูกเข้ารหัสไว้
ไปต่ออีกขั้น
- สามารถทำ reverse engineering เพื่อดูว่าแอปถอดรหัสไฟล์
currency อย่างไร
- ยืนยันได้ว่า
com.microsoft.seeingai ใช้งาน TensorFlow Lite
- สามารถโหลดโมเดล
*.tflite ได้ผ่าน org.tensorflow.lite.NativeInterpreterWrapper
การใช้ Frida
- Frida เป็นเครื่องมือ dynamic instrumentation ที่ทำงานได้บนแทบทุกระบบปฏิบัติการ และสามารถเชื่อมต่อกับโปรเซสที่กำลังทำงานเพื่อเปลี่ยนพฤติกรรมได้
- สามารถแนบเข้ากับโปรเซสระหว่างทำงานเพื่อติดตามการเรียกเมธอด ตรวจสอบอาร์กิวเมนต์และค่าที่ส่งกลับ หรือเขียนทับเนื้อหาเมธอดด้วยลอจิกที่ต้องการ
- ตัวอย่าง: อาจเปลี่ยนให้
checkKey(key) คืนค่า true เสมอได้
- Objection เป็นเครื่องมือ CLI ที่รวบรวมสคริปต์ Frida ไว้ และมีประโยชน์มากสำหรับการวิจัยแอปมือถือ
- ดัมพ์โมเดลลงดิสก์โดยติดตามการเรียกฟังก์ชันของ
org.tensorflow.lite.NativeInterpreterWrapper
- ระหว่างที่แอปทำงาน จะมีการเรียก
.createModelWithBuffer(java.nio.ByteBuffer, long) ซึ่ง ByteBuffer ที่ส่งเข้าไปมีโอกาสสูงที่จะเป็นโมเดล .tflite ที่ถูกถอดรหัสแล้ว
- หากใช้การ hook เพื่อแทนที่เมธอดนี้ด้วยโค้ดสำหรับดัมพ์ ก็จะสามารถบันทึกโมเดลดังกล่าวลงดิสก์ได้
- ใช้คำสั่ง
adb pull เพื่อนำโมเดล .tflite ที่ดึงออกมา (currency.tflite) กลับมายังอุปกรณ์ภายในเครื่อง
- โหลดด้วยเครื่องมืออย่าง Netron เพื่อตรวจสอบว่าเป็นโมเดล TensorFlow Lite จริงหรือไม่ (เลเยอร์ น้ำหนัก ไบแอส ฯลฯ)
- ดัมพ์โมเดลจดจำสกุลเงินได้สำเร็จอย่างสมบูรณ์
CTRL + C; CTRL + V
- สามารถใช้การโจมตีนี้กับแอปที่ใช้ TensorFlow Lite ได้
- ตัวอย่างเช่น Adobe Scan เป็นแอปที่ยอดเยี่ยมและเป็นแอปที่ฉันใช้บ่อยจริง ๆ โดยฟีเจอร์ที่ดีที่สุดคือการสแกนเอกสารด้วยกล้องมือถือ
ข้อควรระวัง
- โมเดลที่ดึงออกมามีลิขสิทธิ์ ดังนั้นควรหลีกเลี่ยงการใช้งานหรือดัดแปลงโดยไม่ได้รับอนุญาตอย่างถูกต้อง
- วิธีการในโพสต์นี้มีจุดประสงค์เพื่อการวิจัย และเมื่อนำไปใช้จริงจำเป็นต้องคำนึงถึงกฎหมายที่เกี่ยวข้องและประเด็นทรัพย์สินทางปัญญา
3 ความคิดเห็น
แล้วโมเดลก็โดนรีเวิร์สเหมือนกัน,,
ว้าว ดึงไฟล์ weight ออกมาจากไฟล์ apk ได้ด้วยเหรอ??
ถึงจะจำกัดเฉพาะบางไลบรารีก็เถอะ แต่ก็สุดยอดมากเลย..
ความคิดเห็นจาก Hacker News
tfliteควรโฮสต์โมเดลไว้บน Firebase และลบออกหลังทำงานเสร็จ ซึ่งเป็นวิธีที่ปลอดภัยกว่าbizarreที่พบบ่อยอยู่สองแบบ