แนะนำการใช้งาน Drozer: เครื่องมือช่วยทดสอบความปลอดภัยบน Android

สวัสดีครับผู้อ่านทุกท่าน กลับมาพบกันอีกครั้งกับบทความสาย Cyber Security ในบทความนี้ ผมอยากจะแนะนำเครื่องมือที่เพื่อน ๆ หลายคนอาจจะยังไม่รู้จัก แต่มีความสามารถเฉพาะทางที่น่าสนใจสำหรับการทดสอบความปลอดภัยของแอปพลิเคชัน Android โดยเครื่องมือนี้มีชื่อว่า Drozer
บทความนี้จะพาผู้อ่านไปรู้จักกับการใช้งาน Drozer เบื้องต้น เช่น Drozer คืออะไร ติดตั้งอย่างไร ใช้งานเบื้องต้นแบบไหน พร้อมลงมือทำ Lab โดยใช้แอปพลิเคชันฝึกเจาะระบบ Android ที่มีชื่อว่า “DIVA (Damn Insecure and Vulnerable App)”
แต่ผมอยากแนะนำผู้อ่านล่วงหน้าเล็กน้อยว่า บทความนี้อาจเหมาะกับผู้ที่มีพื้นฐานด้าน Android มาบ้างแล้ว โดยเฉพาะเรื่อง Android Components หรือเครื่องมือที่เกี่ยวข้อง เช่น การใช้งาน ADB ซึ่งบทความนี้จะไม่ได้ลงลึกในเชิงทฤษฎีของ Android Components ต่างๆ แต่จะเน้นการใช้งาน Drozer ในเชิงปฏิบัติเป็นหลัก
Drozer คืออะไร
Drozer คือเครื่องมือ Open Source ที่ถูกออกแบบมาเพื่อช่วยในการทดสอบความปลอดภัยของแอปพลิเคชัน Android โดยเฉพาะ และ ถูกออกแบบมาเพื่อช่วยให้เราตรวจสอบและวิเคราะห์ช่องโหว่ที่เกิดจาก Android Components ได้
Drozer มีความสามารถในการช่วยวิเคราะห์ Android Components ได้ ไม่ว่าจะเป็น Activities, Services, Content Provider และ Broadcast Receivers ซึ่งมักเป็นจุดที่อาจเปิดช่องให้ผู้ไม่หวังดีเข้าถึงข้อมูลหรือฟังก์ชันสำคัญของแอปได้
Concept ของ Drozer
Drozer จะทำงานแบบ Client-Server โดยแบ่งเป็น 2 ฝั่ง
1. Drozer Console (ฝั่งเครื่องคอมพิวเตอร์ หรือ Kali Linux)
เป็นเครื่องมือที่อยู่ฝั่งผู้ใช้งาน ที่ใช้สำหรับพิมพ์คำสั่งและเรียกใช้งานโมดูลต่าง ๆ
เช่น ตรวจสอบ Components ของแอป, เรียกใช้งาน Activity หรือ ดึงข้อมูลจาก Content Provider
2. Drozer Agent (ฝั่งอุปกรณ์ Android)
เป็นแอป หรือ ไฟล์ apk ที่ติดตั้งไว้บนเครื่อง Android (เครื่องจริงหรือ Emulator ก็ได้) ทำหน้าที่รับคำสั่งจาก Console และดำเนินการภายใน
การเชื่อมต่อระหว่างทั้งสองฝั่งจะทำผ่าน ADB (Android Debug Bridge) โดยสามารถใช้ได้ทั้งแบบผ่านสาย USB หรือผ่าน Wi-Fi

วิธีติดตั้ง Drozer
การติดตั้ง Drozer มีอยู่ 2 วิธีหลัก ๆ คือ การใช้ Docker Container และ การติดตั้งผ่าน GitHub โดยสามารถเลือกวิธีที่สะดวกได้ตามสภาพแวดล้อมของแต่ละคน
1. ติดตั้งผ่าน Docker Container
วิธีนี้เหมาะสำหรับผู้ที่ต้องการความสะดวกรวดเร็วและไม่อยากจัดการ dependency เอง
สามารถใช้งานได้ทันทีผ่าน container ที่เตรียมไว้แล้วจากผู้พัฒนาสามารถดาวน์โหลดได้ที่
https://hub.docker.com/r/withsecurelabs/drozer
2. ติดตั้งผ่าน GitHub
สำหรับบทความนี้ ผมจะใช้วิธีติดตั้ง Drozer ผ่าน GitHub โดยตรง ซึ่งจะช่วยให้ใช้งานได้ยืดหยุ่นบน Kali Linux หรือ Linux distribution อื่น ๆ ได้ง่ายขึ้น
2.1 ติดตั้ง Java Development Kit (ถ้ายังไม่มี)
Drozer จำเป็นต้องใช้ Java ในการทำงานบางส่วน หากเครื่องของคุณยังไม่ได้ติดตั้ง Java Development Kit (JDK) ให้รันคำสั่งต่อไปนี้เพื่อติดตั้ง:
sudo apt install default-jdk -y
2.2 ติดตั้ง Drozer Console
Drozer Console คือเครื่องมือฝั่งผู้ใช้งาน ที่ใช้สำหรับพิมพ์คำสั่งเพื่อควบคุม Drozer Agent ซึ่งสามารถติดตั้งผ่าน GitHub ได้โดยตรงโดยใช้คำสั่ง
git clone https://github.com/WithSecureLabs/drozer.git
cd drozer
pip install . - break-system-packages

เมื่อคำสั่งทำงานเสร็จเรียบร้อย คุณจะสามารถเรียกใช้ Drozer console ได้จาก Terminal ตามรูปภาพ

2.3 ติดตั้ง Drozer Agent (ฝั่ง Android)
Drozer Agent คือแอป .apk ที่ต้องติดตั้งไว้บนเครื่อง Android เพื่อใช้เชื่อมต่อกับ Console โดยดาวน์โหลดไฟล์ Agent ได้ที่ “https://github.com/WithSecureLabs/drozer-agent.git”
ทำการเชื่อมต่อ ADB และติดตั้ง Agent หากยังไม่มี adb ใน Kali สามารถติดตั้งได้ด้วยคำสั่ง
sudo apt install google-android-platform-tools-installer
จากนั้นเชื่อมต่ออุปกรณ์ Android กับ Kali Linux (ผ่าน Wi-Fi หรือ USB) ในตัวอย่างของผม หมายเลข IP มือถือคือ 192.168.0.102:5555 ก็จะใช้คำสั่ง
adb connect 192.168.0.102:5555
adb devices
adb install drozer-agent.apk

หลังติดตั้งเสร็จ ให้เปิดแอป Drozer Agent บนอุปกรณ์ Android

แล้วกดปุ่ม On เพื่อเริ่มต้นการทำงานของ Agent จะพบข้อความตามรูป

2.4 เชื่อมต่อ Drozer Console
เพื่อให้ Kali Linux เชื่อมต่อไปยัง Drozer Agent (ซึ่งทำงานอยู่บนพอร์ต 31415 ของเครื่อง Android) เราสามารถใช้คำสั่ง adb forward ดังนี้
adb forward tcp:31415 tcp:31415
หมายเหตุ: ปกติแล้ว Drozer Agent จะทำงานอยู่บนพอร์ต 31415 ภายในเครื่อง Android
ดังนั้น หากเครื่อง Kali Linux ไม่สามารถเข้าถึงพอร์ตนั้นได้โดยตรง จำเป็นต้องทำ Port Forwarding ผ่าน ADB เพื่อให้เชื่อมต่อได้สำเร็จ แต่ถ้าในบางกรณีที่ เครื่อง Kali กับมือถืออยู่ในเครือข่ายเดียวกัน และสามารถเข้าถึง IP ของมือถือได้โดยตรง คุณสามารถลองเชื่อมต่อกับ Drozer Agent ได้เลยโดยไม่ต้อง Forward พอร์ต
เชื่อมต่อ Drozer Console โดยใช้คำสั่ง
drozer console connect
เมื่อเชื่อมต่อสำเร็จจะแสดงตามรูป

ลองพิมพ์คำสั่งแรกเพื่อเช็คว่าเชื่อมต่อสำเร็จและใช้คำสั่งได้แล้ว:

การใช้งาน Drozer เบื้องต้น
หลังจากที่เราสามารถเชื่อมต่อ Drozer Console กับ Drozer Agent ได้สำเร็จแล้ว ขั้นตอนถัดไปคือการเริ่มใช้งาน Drozer เพื่อวิเคราะห์แอป Android โดยบทความนี้จะใช้แอปที่ชื่อว่า DIVA (Damn Insecure and Vulnerable App)
ผมจะพาไปรู้จักการใช้งานโมดูลต่าง ๆ ตั้งแต่การเก็บข้อมูล (Enumeration) ไปจนถึงการทดสอบการโจมตี (Exploitation) โดยเน้นที่ Android Component เพื่อให้ผู้อ่านเข้าใจภาพรวมการใช้งาน Drozer ได้ชัดเจนยิ่งขึ้น
1. การเก็บข้อมูลเบื้องต้น (Enumeration)
ในขั้นตอนนี้ เราจะใช้ Drozer เพื่อเก็บข้อมูลพื้นฐานของแอปพลิเคชันที่เราต้องการทดสอบ
ไม่ว่าจะเป็นชื่อแพ็กเกจ รายละเอียดในไฟล์ Manifest หรือการวิเคราะห์จุดที่แอปอาจเปิดช่องให้โจมตีได้ (Attack Surface)
1.1 แสดงรายการแพ็กเกจทั้งหมด
คำสั่งนี้จะแสดงรายชื่อแพ็กเกจของแอปทั้งหมดที่ติดตั้งอยู่บนเครื่อง Android
run app.package.list
จากนั้นเราก็จะหาแอปพลิเคชันที่เราต้องการจะทดสอบ ในตัวอย่างของแอป DIVA ชื่อแพ็กเกจของแอปพลิเคชันคือ jakhar.aseem.diva
1.2 แสดงรายละเอียดของแอปที่ต้องการตรวจสอบ
เมื่อเราได้ชื่อแพ็กเกจที่ต้องการแล้ว จะใช้คำสั่งต่อไปนี้เพื่อตรวจสอบข้อมูลของแอป
run app.package.info -a <
run app.package.info -a jakhar.aseem.diva
คำสั่งนี้จะช่วยให้เราทราบข้อมูลของแอป เช่น package name, APK path และ Permissions ที่แอปใช้งาน

1.3 ดูไฟล์ AndroidManifest.xml
เราสามารถดูรายละเอียดของ AndroidManifest.xml ได้โดยใช้คำสั่ง
run app.package.manifest <
run app.package.manifest -a jakhar.aseem.diva
จากคำสั่งนี้ เราสามารถวิเคราะห์ Permission, ชื่อ Activity และ Flag สำคัญ เช่น debuggable และ exported ได้

1.4 วิเคราะห์ Attack Surface
เราสามารถวิเคราะห์ Component ที่อาจเปิดช่องให้โจมตี (Attack Surface) ได้โดยใช้คำสั่ง
run app.package.attacksurface <
run app.package.attacksurface jakhar.aseem.diva
คำสั่งนี้จะช่วยสรุปว่า แอปมี Components ใดที่ถูก Exported ออกมาให้เข้าถึงได้ผ่านแอปพลิเคชันอื่นๆ ไม่ว่าจะเป็น Activities, Content Providers, Services หรือ Broadcasts receivers

2. การโจมตี Android Component
หลังจากเราเก็บข้อมูลและวิเคราะห์แอปพลิเคชันเรียบร้อยแล้ว ขั้นตอนต่อมาคือการทดสอบการโจมตีกับ Component ที่มีช่องโหว่
2.1 การทดสอบ Exported Activities
ทำการตรวจสอบ Activity ที่ถูก Exported ทั้งหมดในแอปพลิเคชันโดยใช้คำสั่ง
run app.activity.info -a <
run app.activity.info -a jakhar.aseem.diva
จากผลลัพธ์จะเห็นว่าแอปมี 3 Activity ที่ถูก Exported หมายความว่าเราสามารถเรียกใช้งาน Component เหล่านี้ได้จากภายนอก

2.1.1 ทดสอบเรียกใช้งาน Activity ที่ถูก Exported
เราสามารถเรียกใช้งาน Activity ที่ถูก Exported โดยใช้คำสั่ง
run app.activity.start — component <
run app.activity.start - component jakhar.aseem.diva jakhar.aseem.diva.APICredsActivity

จากภาพจะเห็นว่าแม้ไม่ได้เข้าสู่ระบบ เราก็สามารถเข้าถึงหน้าสำคัญของแอปที่แสดงข้อมูล API Key, Username, Password ได้เลย
2.2 การทดสอบ Content Providers
Content Providers เป็น Android Component ที่มักถูกเปิดใช้งานอย่างไม่ถูกต้อง หากไม่มีการกำหนด Permission หรือป้องกันที่เหมาะสม อาจทำให้แอปอื่นเข้ามาอ่าน เพิ่ม หรือลบข้อมูลได้โดยไม่ต้องขอสิทธิ์ เราจะใช้ Drozer ทดลองเข้าถึงและจัดการข้อมูลภายใน Content Providers ของแอป DIVA
2.2.1 ตรวจสอบ URI ของ Content Providers
คำสั่งนี้จะสแกนหาว่ามี URI ไหนบ้างที่สามารถเข้าถึงได้จากแอปพลิเคชันภายนอก
run scanner.provider.finduris -a <
run scanner.provider.finduris -a jakhar.aseem.diva
จากผลลัพธ์จะพบว่าแอปมี URI: content://jakhar.aseem.diva.provider.notesprovider/notes/

2.2.2 อ่านข้อมูลจาก Content Providers
ถ้า Content Providers ไม่มีการจำกัดสิทธิ์ ทำให้เราสามารถดึงข้อมูลออกมาได้ทันที
ซึ่งในแอป DIVA จะพบว่ามีข้อมูลบันทึกต่าง ๆ ที่เข้าถึงได้
run app.provider.query <
run app.provider.query content://jakhar.aseem.diva.provider.notesprovider/notes/

2.2.3 เพิ่มข้อมูลเข้าสู่ Content Provider
หากไม่มีการป้องกันหรือจำกัดสิทธิ์ เราสามารถเพิ่มข้อมูลลงใน Content Provider ได้โดยใช้คำสั่งนี้
run app.provider.insert <
run app.provider.insert content://jakhar.aseem.diva.provider.notesprovider/notes/ - string title Datafarm - string note Add_Data
จากรูปจะเห็นว่ามีข้อมูล title ชื่อ Datafarm ถูกเพิ่มเข้าไป

2.2.4 ลบข้อมูลจาก Content Provider
หลังจากเพิ่มข้อมูลแล้ว เรายังสามารถลบข้อมูลออกได้โดยระบุเงื่อนไขที่ต้องการ
run app.provider.delete <

สรุป
ในบทความนี้เราได้เรียนรู้การใช้งาน Drozer เบื้องต้นเพื่อวิเคราะห์และทดสอบความปลอดภัยของ Android Application ผ่านการใช้งานจริงกับแอป DIVA โดยเริ่มจากการเก็บข้อมูลของแอป เช่น การวิเคราะห์ Component ที่อาจมีช่องโหว่ ต่อด้วยการทดลองเรียกใช้งาน Activity และเข้าถึง Content Provider ที่เปิดเผยข้อมูลโดยไม่ได้ป้องกันอย่างเหมาะสม ซึ่งทั้งหมดนี้แสดงให้เห็นว่า Drozer เป็นเครื่องมือที่ช่วยให้เรามองเห็นจุดอ่อนภายในแอปได้อย่างมีระบบ นอกจากนี้ Drozer ยังรองรับฟีเจอร์อื่นที่น่าสนใจ ซึ่งผู้อ่านสามารถเข้าไปลองเล่นและศึกษาต่อเพิ่มเติมได้จากเอกสารของ Drozer
ขอบคุณผู้อ่านทุกท่านที่อ่านมาจนจบ หวังว่าบทความนี้จะช่วยให้ทุกท่านเข้าใจและเริ่มต้นใช้งาน Drozer ในระดับเบื้องต้นได้อย่างราบรื่น และสามารถต่อยอดไปศึกษาฟีเจอร์อื่น ๆ เพิ่มเติมได้ หากมีข้อผิดพลาดประการใด ผมขออภัยมา ณ ที่นี้ด้วยครับ
อ้างอิง
https://github.com/WithSecureLabs/drozer/blob/develop/documentation/drozer-guide.md
https://github.com/WithSecureLabs/drozer