How to bypass the Root Detection (Frida) – Insecure Bank

บทนำ (Overview)

บทความนี้กล่าวถึงวิธีเรียกใช้งาน Function และสามารถกำหนดค่า Return ได้เอง จนนำไปประยุกต์ใช้ในการ Bypass หน้า Detect Roooted Device ของโปรแกรมที่มีช่องโหว่ โดยเราจะใช้ความสามารถของ Frida ในการ Hook process ของโปรแกรมที่เรากำลังทดสอบ ซึ่งสามารถสรุปหลักการเบื้องต้นโดยสังเขปดังนี้

  • ติดตั้ง Frida client และ Server
  • เครื่องผ่านการ Root แล้ว
  • ทำการ Reverse engineering เพื่อตรวจสอบ Code ที่น่าสนใจ
  • ตรวจสอบหน้าที่คาดว่าน่าจะมี Attack surface (Activity | function | Parameter)
  • เขียน Code Bypass เพื่อเชื่อมต่อกับ Frida (Python หรือ Javascript)
  • Run code ที่เครื่องคอมพิวเตอร์ และใช้งาน Function ที่เครื่อง Android

Continue reading

How to brute force PIN using Frida – Sieve

บทนำ (Overview)

บทความนี้กล่าวถึงวิธีเรียกใช้งาน Function และสามารถกำหนด Parameter ได้เอง จนนำไปประยุกต์ใช้ในการ Brute force หน้า PIN ของโปรแกรมที่มีช่องโหว่ โดยเราจะใช้ความสามารถของ Frida ในการ Hook process ของโปรแกรมที่เรากำลังทดสอบ ซึ่งสามารถสรุปหลักการเบื้องต้นโดยสังเขปดังนี้

  • ติดตั้ง Frida client และ Server
  • เครื่องผ่านการ Root แล้ว
  • ทำการ Reverse engineering เพื่อตรวจสอบ Code ที่น่าสนใจ
  • ตรวจสอบหน้าที่คาดว่าน่าจะมี Attack surface (Activity | function | Parameter)
  • เขียน Code Bypass เพื่อเชื่อมต่อกับ Frida (Python หรือ Javascript)
  • Run code ที่เครื่องคอมพิวเตอร์ และใช้งาน Function ที่เครื่อง Android

Continue reading

How to list and search classes and method using Frida

บทนำ (Overview)

บทความนี้กล่าวถึงวิธีการดึงข้อมูล Class และ Method โดยใช้ Script ที่แชร์อยู่ใน https://codeshare.frida.re/browse เราสามารถใช้คำสั่งติดตั้งผ่านคำสั่งของ Frida ได้ทันที Continue reading

How to bypass certificate pining on Non-jailbroken Physical Devices using SSL Kill switch (objection)

บทนำ (Overview)

การทำ “SSL pining” สามารถตรวจสอบได้ว่า “Certificates” ที่ระบุเท่านั้นที่จะสามารถเข้ารหัสเพื่อส่งและรับข้อมูลจาก “Server” ดังกล่าว สามารถติดตามรายละเอียดเพิ่มเติมจาก How to implement the Certificate Pinning (SSL Pinning) และ How to bypass certificate pining using SSL Kill switch ในบทความนี้จะกล่าวถึงวิธีการ Bypass certificate pining บนเครื่องที่ไม่ได้ Jailbreak


Continue reading

How to test insecure data storage on Non-jailbroken Physical Devices – NSUserDefaults (Objection)

บทนำ (Overview)

บทความนี้จะกล่าวถึง “NSUserDefaults” เป็น “class” ซึ่งสามารถเก็บข้อมูลที่ไม่ซับซ้อน อาจจะเป็นค่า configuration ของโปรแกรม  (ค่าของการ Save state) เป็นต้น ในเชิงการเขียนโปรแกรมนั้น NSUserDefaults สามารถเขียนได้ดังนี้

  • การเขียนค่า
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"value" forKey:@"key-value"];
    
  • การดึงค่า
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *value = [defaults objectForKey:@"key-value"];
    NSLog(@"%@",value);
    

สามารถติดตามเพิ่มเติมได้จากบทความ How to test insecure data storage – NSUserDefaults ในบทความนี้กล่าวถึงการอ่าน NSUserDefaults จากเครื่องที่ไม่ได้ JailbreakContinue reading

How to test insecure data storage on Non-jailbroken Physical Devices – Core data (Objection)

บทนำ (Overview)

สำหรับหัวข้อ “Insecure data storage” เราก็ยังวนเวียนหาข้อมูลสำคัญที่โปรแกรมเมอร์เขียนทิ้งเอาไว้ (How to test insecure data storage – plist และ How to test insecure data storage – NSUserDefaults) แม้จะโดยตั้งใจหรือไม่ได้ตั้งใจก็แล้วแต่ (อาจคิดว่าคนอื่นอาจไม่เห็น) ในบทความนี้จะกล่าวถึงการเก็บข้อมูลที่เรียกว่า “Core data”

เจ้าตัว “Core data” นั้นก็คือระบบจัดการฐานข้อมูลใน “iOS” นั้นเอง ซึ่งในมุมมองของโปรแกรมเมอร์แล้วจะต้องเรียยกใช้ “Core data.framework” ขึ้นมาเสียก่อน จากนั้นสามารถสร้าง “Entity” ระบุ “Attribute” และ “Relationship” ตามหลักการเขียน “ORM” ได้เลยครับ แต่ผลโดยสรุปมันก็จะสร้างไฟล์ “.db” หรือ “.sqlite” ขึ้นมาใช้งานนั้นเอง ในส่วนบทความนี้จะนำเสนอวิธีการ Download ไฟล์ และอ่านฐานข้อมูล SQlite จากเครื่องที่ยังไม่ได้ถูก JailbreakContinue reading

How to test insecure data storage on Non-jailbroken Physical Devices – Realm database (Objection)

บทนำ (Overview)

“Realm database” เป็นฐานข้อมูลขนาดเล็กที่ใช้สำหรับ “iOS” หรือ “Android” (ดูรายละเอียดเพิ่มเติมได้ที่ https://realm.io/) จากข้อมูลในเว็บไซต์จะเห็นว่าจะมาแทนที่ “core data” และ “sqlite” เลยที่เดียว

Realm is a replacement for SQLite & Core Data.
It can save you thousands of lines of code & weeks of work,
and lets you craft amazing new user experiences.

เพราะฉะนั้นบางโปแกรมอาจจะเขียนข้อมูลสำคัญเอาไว้ในไฟล์ดังกล่าวเช่นเดียวกับ Core data (http://blog.itselectlab.com/?p=2977) NSUserDefaults (http://blog.itselectlab.com/?p=2923) หรือ plist (http://blog.itselectlab.com/?p=2899) สามารถติดตาม How to test insecure data storage – Realm database ในส่วนบทความนี้จะนำเสนอวิธีการ Download ไฟล์ และอ่านฐานข้อมูล Realm จากเครื่องที่ยังไม่ได้ถูก JailbreakContinue reading

How to test insecure data storage on Non-jailbroken Physical Devices – Cookie binary (Objection)

 

บทนำ (Overview)

บางครั้งโปรแกรมส่วนมากอาจถูกออกแบบให้ไม่จำเป็นต้องกรอก “username” และ “password” เพื่อ “login” ทุกครั้ง แม้จะสะดวกต่อผู้ใช้งานแต่ในเรื่องความปลอดภัยอาจจะไม่ดีนัก ข้อมูล “session” ที่ถูกส่งผ่านระหว่าง “mobile” และ “server” โดยใช้ “cookie” อาจถูกจัดเก็บอย่างถาวร (persistent cookies) ซึ่งอยู่ในไฟล์ที่เรียกว่า “Cookie binary” สามารถติดตามรายละเอียดเพิ่มเติมได้ที่บทความ How to test insecure data storage – Cookie binary ในส่วนบทความนี้จะนำเสนอวิธีการอ่าน Persistent cookies จากเครื่องที่ยังไม่ได้ถูก JailbreakContinue reading