top of page

การใช้เครื่องมือ Frida และ Objection สำหรับ Mobile Penetration Testing

  • Terat Burami
  • 4 วันที่ผ่านมา
  • ยาว 2 นาที

Frida คืออะไร? Frida คือเครื่องมือที่ช่วยให้เราสามารถ inject โค้ดเข้าไปใน process ของแอปพลิเคชันที่กำลังทำงานอยู่บนอุปกรณ์เพื่อดูการทำงาน แก้ไขค่า หรือ Hook method เพื่อข้ามข้อจำกัดต่างๆได้

แล้ว Objection คืออะไร? Objection เป็น Runtime Mobile Exploration Toolkit ที่สร้างครอบ Frida อีกที เพื่อให้การใช้งานง่ายมากขึ้น โดยมีคำสั่งสำเร็จรูปให้ใช้โดยไม่ต้องมานั่งเขียน JavaScript เองทั้งหมด


ประโยชน์ของการใช้ Frida และ Objection สำหรับ Mobile Penetration Testing:

  • ประหยัดเวลา ไม่ต้องเขียน Script เองใหม่ทั้งหมดทุกรอบ

  • ข้ามกลไกความปลอดภัยเบื้องต้นได้ง่ายมากขึ้น เช่น Root/Jailbreak Detection, SSL Pinning ในบางรูปแบบ

  • สามารถสำรวจ Class, Method และตัวแปรต่างๆ ใน Memory ได้แบบ Real-time ระหว่างที่แอปกำลังทำงาน

 

การเตรียมความพร้อมและติดตั้ง

ส่วนของการเตรียมเครื่องมือให้พร้อมสำหรับการทดสอบ ในตัวอย่างนี้จะอิงจากระบบปฏิบัติการ macOS หรือ Linux ซึ่งเหมาะกับงาน Mobile Penetration Testing


สิ่งที่ต้องมี:

  • Python 3 และ pip3

  • Android Emulator เช่น Android Studio AVD หรืออุปกรณ์ Android จริงที่ผ่านการ Root แล้ว


ขั้นตอนการติดตั้ง:


  1. ติดตั้ง Frida และ Objection บนเครื่องคอมพิวเตอร์เครื่องหลักของเรา:

pip3 install frida-tools

pip3 install objection


  1. ติดตั้ง Frida Server บน Android:

    • เช็คสถาปัตยกรรมของ Android ก่อนว่าเป็น x86 หรือ arm

    • ดาวน์โหลด frida-server จาก GitHub ให้ตรงกับสถาปัตยกรรมของ Android และตรงกับเวอร์ชันของ frida-tools บนเครื่องเรา

    • แตกไฟล์ออกมาและใช้คำสั่ง adb push เพื่อส่งไฟล์เข้าไปที่ /data/local/tmp/ (หรือโฟลเดอร์ไหนก็ได้ที่สามารถ push ไฟล์เข้าไปได้และไม่ติดเรื่อง Permission)

    • รัน chmod +x และรัน frida-server เป็น Background process โดยใช้คำสั่ง

adb shell
su
cd /data/local/tmp/
chmod +x frida-server
./frida-server &             

เพียงเท่านี้ทั้งเครื่องมือ frida และ objection ก็พร้อมใช้งานผ่าน frida-tools บนเครื่องหลักของเราแล้ว

 

ทำความรู้จักกับ WaTFBank

WaTFBank เป็นโปรเจค Open-source แอปธนาคารจำลองที่จงใจใส่ช่องโหว่ไว้ เพื่อใช้สำหรับฝึกทักษะ Mobile App Pentest โดยเฉพาะ โดยการติดตั้ง WaTFBank สามารถเข้าไปที่ https://github.com/WaTF-Team/WaTF-Bank และทำตาม instruction บน GitHub ได้เลย

 

ตัวอย่างการเจาะระบบ WaTFBank

หลังจากที่เราทำการติดตั้งและเปิดใช้งาน WaTF Server เรียบร้อยแล้ว ให้ทำการโหลด apk จาก GitHub และใช้คำสั่ง

adb install watf-bank.apk

หรือถ้าใช้ emulator อย่าง Android Studio สามารถที่จะลากไฟล์ watf-bank.apk จากเครื่องหลักเข้ามายัง Android emulator ได้เลย

  • เมื่อเข้ามายังแอปพลิเคชันจะเจอกับหน้า Login โดยสามารถใช้ credential ด้านล่างนี้ในการทดลองเจาะระบบได้เลย และใส่ IP Address จากเครื่องหลักของเราที่ใช้เปิด Server

Password

Account Number

Username

michael123

1111111111

michael

william123

2222222222

william

emma123

3333333333

emma

jacob123

4444444444

jacob

 

  • หลังจากเข้าสู่ระบบ แอปพลิเคชันจะให้เราตั้งค่า PIN สมมติว่าเราตั้งค่า PIN เป็น 1111 ก็จะสามารถเข้ามายังหน้าแอปพลิเคชันได้

Mobile Penetration Testing

รูปที่ 1 หน้าแรกของแอป WaTF


  • เมื่อเราออกแอปพลิเคชันแล้วเข้าใหม่อีกครั้ง จะมีให้กรอกรหัส PIN ที่เราตั้งไว้ก่อนหน้านี้ เมื่อเราลองกรอก 2222 ไป แอปพลิเคชันก็จะมีการตรวจสอบ PIN และแน่นอนว่ารหัสผิดเพราะเราตั้งไว้เป็น 1111

Mobile Penetration Testing

รูปที่ 2 หน้ากรอกรหัส PIN

 

เริ่มการวิเคราะห์

จากนั้นเราลองใช้เครื่องมือเช่น mobsf หรือ JADX เพื่อใช้ในการวิเคราะห์โครงสร้างและ Config ของแอปพลิเคชัน เมื่อเราเข้าไปดู AndroidManifest.xml ของแอปพลิเคชัน เราจะเห็นว่ามีการเรียกใช้ Activity ที่มีชื่อว่า CheckPin

Mobile Penetration Testing

รูปที่ 3 AndroidManifest.xml


วิเคราะห์โค้ดของคลาส CheckPinสเต็ปถัดไปคือการเข้าไปแกะโค้ดของ class CheckPin ว่าทำงานอย่างไร หลังจากที่เราเข้าไปวิเคราะห์ class CheckPin จะเห็น method checkPin ที่เอาไว้เช็คว่า PIN ที่ User กรอกมาตรงกับ PIN ที่เซ็ตไว้ในแอปพลิเคชันหรือไม่ โดยการ Return ค่า Boolean ออกมา

Mobile Penetration Testing

รูปที่ 4 ฟังก์ชัน checkPin ในคลาส CheckPin


เขียน Attack Scriptพอเรารู้แล้วว่าขั้นตอนการเช็ครหัส PIN เกิดขึ้นบน local ทั้งหมด ทำให้เราสามารถใช้ frida ในการดักและเปลี่ยนค่า return จาก pin.equals(pinEnter); เป็น return true; ทำให้ไม่ว่าเราจะใส่อะไรเข้าไปก็จะถูกเสมอ

โดยการเขียนโค้ด Javascript method เดียวกันกับ checkPin เพื่อให้มัน override ฟังก์ชันมารันฟังก์ชันของเราแทนที่จะไปรัน method checkPin จริงๆของแอปพลิเคชัน และเซฟไฟล์เป็น .js เพื่อไปใช้รัน frida

Mobile Penetration Testing

รูปที่ 5 script ที่จะใช้โจมตี


  • จากนั้นก็ใช้คำสั่ง frida -U -f com.WaTF.WaTFBank -l checkPin.js เพื่อรัน script ที่เราเตรียมไว้ เมื่อทำการรันคำสั่ง frida จะ spawn แอปพลิเคชันขึ้นมาพร้อมกับ override method ตาม script ของเรา

  • แอปพลิเคชันจะให้เรากรอกรหัส PIN ตามปกติ ให้เราลองกรอกรหัสที่ผิดไป

Mobile Penetration Testing

รูปที่ 6 หน้ากรอก PIN


Bypass สำเร็จจะพบว่าเราสามารถเข้าใช้งานแอปพลิเคชันได้ทันทีแม้ว่ารหัส PIN ที่กรอกไปจะไม่ตรงกับ PIN ที่ตั้งไว้ตอนแรก เพราะว่าแอปพลิเคชันได้เรียกใช้ method ที่เราทำขึ้นมาแทนที่จะไปเรียก method จากตัวแอปพลิเคชันเอง ทำให้มัน return true ตลอดเวลาไม่ว่าเราจะกรอกอะไรลงไป

Mobile Penetration Testing

รูปที่ 7 หน้าแรกของแอป WaTF

 

 

  

การใช้ Objection เพื่อ Bypass รหัส PIN

แทนที่เราจะต้องมานั่งเขียนสคริปต์ JavaScript เองยาวๆ เราสามารถใช้คำสั่งของ Objection เพื่อบังคับเปลี่ยนค่า Return ได้เลยทันที ทำให้รวดเร็วและง่ายมากขึ้น เริ่มแรกให้เราเข้าไปยังตัวแอปพลิเคชันด้วยคำสั่ง:

objection -g com.WaTF.WaTFBank explore

เมื่อเข้ามาอยู่ในหน้าต่างของ Objection แล้ว เราสามารถใช้คำสั่ง android hooking set return_value เพื่อบังคับให้ method checkPin คืนค่าเป็น true เสมอ ไม่ว่าผู้ใช้จะกรอกอะไรมาก็ตาม ตามคำสั่งด้านล่าง

android hooking set return_value com.WaTF.WaTFBank.CheckPin checkPin true

เพียงเท่านี้ ไม่ว่าเราจะกรอก PIN ผิดไปเป็นเลขอะไร ตัวแอปก็จะมองว่าเรากรอกถูกเสมอและยอมให้เราเข้าสู่ระบบได้ทันที ซึ่งแสดงให้เห็นว่า Objection ช่วยให้เราทำ Hooking ได้อย่างรวดเร็วมากขึ้น

 

สรุป

จากเคสการเจาะ WaTFBank ครั้งนี้ จะเห็นได้ชัดเจนเลยว่าการออกแบบแอปพลิเคชันโดยปล่อยให้ฝั่ง Client เป็นคนตัดสินใจเรื่องสำคัญอย่างการตรวจสอบ PIN หรือ Authentication นั้น อันตรายมาก เพราะฝั่งผู้ใช้งานหรือ Attacker สามารถใช้เครื่องมือทำอย่าง Frida เข้ามาแทรกแซง เปลี่ยนแปลงค่า และควบคุม Execution Flow ได้อย่างสมบูรณ์แบบ Frida นับว่าเป็น tool ที่ทรงพลังมากสำหรับการทำ Mobile Pentest ช่วยให้สามารถวิเคราะห์พฤติกรรมของแอปในระดับ Runtime ได้อย่างละเอียด และเมื่อนำมาใช้ประกอบกับ Objection ก็ยิ่งช่วยลดขั้นตอนจุกจิกในการเขียน Script พื้นฐาน ทำให้ Workflow การประเมินความปลอดภัยรวดเร็วขึ้น และเราสามารถเอาเวลาไปโฟกัสกับการหาช่องโหว่ที่ซ่อนอยู่ได้มากขึ้น


 
 
bottom of page