Java-Android

ภาพจาก http://www.thaicert.or.th/training/index.html

หลังจากห่างหายไปนานวันนี้ผมก็ได้มีโอกาสกลับมาเขียนบทความอีกครั้งในหัวข้อ Android Hacking ช่วงที่หายไปนั้นผมก็ได้ทำกิจกรรมฝึกปรือในหลายๆเรื่อง กิจกรรมที่เกี่ยวข้องกับบทความนี้ก็คงจะเป็นเข้าร่วมอบรม Java/Android Secure Coding ของ ThaiCERT ต้องขอขอบคุณไว้ ณ ที่นี้ด้วยสำหรับกิจกรรมดีๆและให้โอกาสผมได้เข้าร่วมอบรม 🙂

เรามาเริ่มจากทำความเข้าใจสภาปัตยกรรมของ Android กันก่อน

Android-system-architecture

ภาพ Android Architecture จาก https://developer.android.com/images/system-architecture.jpg

เอาแบบง่ายๆ Android ก็คือ Linux ในส่วนของ Libraries พวก Daemons และ Services ถูกพัฒนาขึ้นมาด้วยภาษา C /C++ เพื่อให้มีประสิทธิภาพในการทำงานที่ดีแต่ในส่วนของ Applications พัฒนาด้วย JAVA โดยทั่วไป Android ถูกใช้สำหรับ Client-Side ฉะนั้นการโจมตีในส่วน Client-Side บน Personal Computer สามารถนำมาประยุกติ์โจมตีบน Android ได้เริ่มตั้งแต่ Fake Access Point, Browser Exploitation, Social Engineering, Man in the middle, และอื่นๆรวมทั้งฟิวเจอร์ที่มีเฉพาะโทรศัพท์เช่น โจมตีช่องโหว่ SMS Services หรือใช้เครือข่าย SMS เป็นช่องทางในการควบคุม Malware
นอกจากนั้นยังมีการโจมตีที่มีรายละเอียดทางเทคนิคซับซ้อน เช่น โดยทั่วไปเมื่อเราทำการติดตั้ง Application ลงบน Android จะมีการสร้าง User และ Group ใหม่ขึ้นมาให้สำหรับ Application นั้นเพื่อควบคุมสิทธิการทำงานของ Application นั้นๆ ให้คิดภาพเหมือน Android คือ Linux เพื่อควบคุมไม่ให้ Malware Application สามารถเข้าถึงข้อมูล Application อื่นๆเช่น Email , Gmail, Facebook เพื่อทำการขโมยข้อมูลได้ ซึ่ง Application เหล่านั้นได้เก็บ Password ของผู้ใช้ไว้ด้วยในรูปแบบ Plaintext *0* ตามรูป

android hacking

ภาพการเก็บค่าที่ใช้ยืนยันตัวตนใน SQLite ของ Email App

แต่เมื่อผู้ใช้ทำการ Root เครื่องตัวเอง นั้นก็หมายความว่า Application ที่ทำงานสามารถขอใช้สิทธิ Root ได้ โดยทั่วไปเมื่อเรา Root เครื่องจะได้ Application ชื่อ Superuser มาไว้จัดการว่าเราจะให้ App ไหนใช้สิทธิ Root บ้างแต่ในจุดนี้สามารถถูก bypass ได้ไม่ยากด้วยหลายเทคนิคที่ Malware ใช้เพราะฉะนั้นเมื่อ Root แล้วก็คือ Root และเมื่อ Malware ได้สิทธิ Root ก็ Game Over เพราะ Hacker สามารถเข้าถึงข้อมูลทั้งหมดของผู้ใช้และส่งข้อมูลกลับไปหา Hacker ข้อมูลนั้นก็ได้แก่พวก Password ต่างๆนั้นเอง
ทั้งนี้เรื่องความปลอดภัยของ Android นั้นนอกจาก Malware App แล้วจุดอ่อนยังสามารถเกิดจาก Application ที่เขียนมาไม่ดีพอเช่น E-Banking App ที่ไม่มีการโชว์ URL หรือใช้ SSL ที่ถูกต้องก็เป็นจุดอ่อนในการถูกโจมตีรวมทั้งเทคนิคการนำ Application มาแก้ไขแล้ว recompile กลับไปเป็น APK เพื่อหลอกผู้ใช้ให้คิดว่าเป็น App จริงแต่ที่จริงแล้วใน App นั้นแฝงด้วย Malicious Code จริงๆแล้วเราอาจเคยใช้ App พวกนี้โดยไม่รู้ตัวเช่น App เกมส์หรือโปรแกรมที่ Crack ให้เราใช้ฟรี แต่จริงๆแล้วไม่มีใครรู้ว่ามีการฝัง Malicious Code หรือไม่จนกว่าจะมีการ Analysis
หลังจากเกลิ่นมานานเรามาเข้าเรื่องกันเถอะ > <” ในส่วนของบทความนี้เราจะเน้นไปในส่วนของการ Crack Application นั้นเองตามที่ได้กล่าว Application ที่ทำงานบน Android จะทำงานบน Dalvik virtual machine ซึ่งก็เป็นที่ๆ Dalvik Bytecode ทำงานนั้นเองและถ้าถามว่า Dalvik Bytecode ได้มาจากไหนก็ได้มาจากการ Compile ไฟล์ .java นั้นเอง เพื่อให้เห็นภาพเราจะมาดูตัวอย่างกัน

ในมุมมองของ Application Developer :
ถ้าเราจะเขียน Android App ขึ้นมาซัก App ก็เริ่มจากเขียน Code

android code

ภาพโค้ดบางส่วนของ Hackme android app

โดยใน App นี้ผมจะเขียนให้มันรับค่า Username กับ Password ถ้าตรงกับที่ผมกำหนดไว้ก็ให้เปิด SecretActivity ขึ้นมาถ้าไม่ตรงก็ให้แสดงข้อความว่า Login Failed หลังจากนั้นเราก็ Build ไฟล์ APK เพื่อนำไปติดตั้งบน Android แล้วใช้งานต่อไป ได้ผลการทำงานตามรูป

android app

ภาพหน้าตาของ Hackme android app

ในมุมมองของ Cracker :
ในมุมมองของ Cracker นั้นสิ่งที่ได้มาก็คือตัว App ที่ Build เป็น APK มาพร้อมใช้งานแล้วซึ่งจริงๆแล้วไฟล์ .apk ก็เป็น archive ไฟล์แบบหนึ่งนั้นเอง สามารถใช้ Winrar, Winzip, … ในการเปิดดูหรือ Extract ข้อมูลภายในออกมาดูได้ ตามรูป

Untitled3

ภาพไฟล์ที่ถูก Extract ออกมาจากไฟล์ Hackme.apk

แต่เราจะเห็นว่าพวกไฟล์ XML ยังไม่ได้อยู่ในรูปแบบที่อ่านได้อย่างถูกต้อง สำหรับส่วนของ res หรือ Resource นั้นสามารถใช้ได้แต่ไฟล์ที่เราสนใจก็คือ classes.dex ซึ่งเก็บ dalvik bytecode ไว้นั้นเองผมลองทดสอบเปิดดูด้วย hexedit

hex

ภาพ Dalvik Bytecode บางส่วนจากไฟล์ Classes.dex ของ Hackme.apk

ซึ่งในส่วนของ ASCII นั้นมี String ที่ผมใช้เป็น username และ password ปรากฏอยู่ด้วย 😛 ในกรณีที่ App มีความซับซ้อนนั้นเราก็สามารถ Disassemble Dalvik Bytecode ให้อยู่ในรูปที่เราสามารถอ่านได้ง่ายขึ้นโดยผมใช้ apktool ในการทำส่วนนี้

Untitled5

ภาพการ Disasembly ไฟล์ Hackme.apk ด้วย apktool

Untitled6

ภาพไฟล์ XML ที่อยู่ในรูปแบบที่อ่านได้หลังจาก Disassembly

Untitled7

ภาพ Dalvik opcodes ของไฟล์ HackmeActivity.smali บางส่วน

หลังจากที่เรา Disassembly เราก็จะเห็นว่าไฟล์ XML อยู่ในรูปแบบที่ถูกต้องรวมทั้งได้ไฟล์ .smali ที่ภายในมี Dalvik Opcodes เราสามารถศึกษา Opcode ของ Dalvik ได้จากเว็บ http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
สิ่งที่เราสนใจในการ Crack ครั้งนี้ก็คือการค้นหา String Username และ Password ซึ่ง Opcode ที่เราสนใจก็คือ const-string vx,string_id ซึ่งก็คือคำสั่งการเอา String ไปเก็บไว้(Reference)ที่ Register vx นั้นเองเพื่อให้เห็นภาพเรามาลองกันเลย

Untitled8

ภาพการตัดเอา String ทั้งหมดที่อยู่ใน HackmeActivity

ในรูปข้างบนนี้คือ String ทั้งหมดที่อยู่ใน HackmeActivity ซึ่งผมลองเช็คกับ Code ต้นฉบับที่ผมเขียนก็ปรากฏว่าตรงกันครบทุกอัน *0* จากในรูปนี้เราก็คงเดาได้ว่า Username คือ admin และ Password คือ [email protected] หลังจากนั้นลองนำมา Login ได้ผลตามรูป

Untitled9

ภาพเมื่อเราสามารถทำการ Login ได้สำเร็จ

แล้วจะป้องกัน Application ที่ตัวเองพัฒนาอย่างไร ? นี่คงเป็นคำถามต่อมาหลังจากได้อ่านบทความนี้ 🙂
สำหรับวิธีป้องกันนั้นก็เหมือนกับการพัฒนา JAVA App บน PC นั้นแล พวก Obfuscation, Symmetric Cryptography เหมือนจะไม่ใช่ทางออกที่ดี ทางออกที่ถูกต้องก็คือเมื่อต้องการทำบางอย่างที่สำคัญให้ทำในฝั่ง Server-Side และใช้ Asymmetric Cryptography

สำหรับผู้ที่สนใจอยากทดลอง สามารถโหลด Android App ที่ผมเขียนและ Tools ได้ข้างล่างครับ
1.) Hackme Android Application:
http://dl.dropbox.com/u/17406552/Hackme.apk
2.) Android Apktool:
https://code.google.com/p/android-apktool/

***บทความจาก Blog เก่าเขียนเมื่อ 06/2012***

References :
1.) http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
2.) https://developer.android.com/index.html
3.) https://code.google.com/p/android-apktool/
4.) http://elinux.org/Android_Architecture

, , , , , , , ,
Previous Post
สร้าง Wifi Pineapple Penetration Testing Tool ในราคา 1 พันบาท
Next Post
รวบรวมเรื่องราวของ Stuxnet

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.
You need to agree with the terms to proceed

Menu