How to bypass certificate pining on Non-root Physical Devices using objection

บทนำ (Overview)

การทำ SSL pining นั้นจะทำให้ application สามารถตรวจสอบได้ว่า certificates ของ server ที่ใช้คุยกับ application นั้นเป็น certificate ที่ได้รับอนุญาตหรือไม่ โดยสามารถติดตามรายละเอียดเพิ่มเติมจาก How to implement the certificate pinning (SSL Pinning)  

ประโยชน์ของ SSL pining นั้นจะทำให้ Attacker นั้นไม่สามารถดักจับข้อมูลระหว่าง application กับ server ได้โดยง่าย ซึ่ง Pentester เองก็ไม่สามารดักจับได้เช่นกัน แต่อย่างไรก็ตามการ Implement SSL Pinning บางแบบก็ยังสามารถ bypass ได้อยู่ดี ในบทความนี้จะกล่าวถึงวิธีการ Bypass certificate pining บนเครื่องที่ไม่ได้ root โดยใช้ objection ร่วมกับ frida

บทความโดย
Hades
Cyber Security Researcher


ขั้นตอน (Steps)

ติดตั้ง Tools

** แนะนำให้ทำการติดตั้ง Tools ทั้งหมดลงบนเครื่อง kali-linux เนื่องจาก kali-linux ได้มีการลง python2 และ 3 ให้เรียบร้อยแล้ว ซึ่งจะมีความยุ่งยากน้อยกว่าการติดตั้งบน Windows

  1. ติดตั้ง adb บน kali-linux
    #apt-get install android-tools-adb android-tools-fastboot
    

  2. ทดสอบด้วยการ run command
    #adb devices
    

  3. ติดตั้ง frida บน kali-linux
    #pip install frida
    

  4. ติดตั้ง zipalign
    #apt-get install zipalign
    

  5. ติดตั้ง virtualenv
    #apt-get install virtualenv 
    

  6. Set virtual environment ให้กับ python3
    #virtualenv --python=python3 ~/virtual-python3

    #source ~/virtual-python3/bin/activate
    

  7. จากนั้นติดตั้ง objection โดย
    # git clone https://github.com/sensepost/objection.git
    

  8. เข้าไปใน folder ที่ clone objection และติดตั้ง objection
    #python setup.py install
    

  9. เมื่อติดตั้งเสร็จจะพบว่า objection สามารถใช้งานได้*** ทุกครั้งก่อนที่จะ run objection ต้องมั่นใจว่าอยู่ใน virtual environment เสมอ มี (virtual-python3) อยู่ใน shell
  10. การ activate virtua-python3 ทำได้โดย
    #source ~/virtual-python3/bin/activate
    


ติดตั้ง Application สำหรับการทดสอบ

  1. เนื่องจากในบทความนี้เราจะใช้ Application ตัวอย่างที่มีการทำ Certificate Pinning อยู่แล้วซึ่งสามารถ download ได้จาก http://security-assessment.com/files/documents/whitepapers/SSLPinningExample.zip

  2. วิธีการตรวจสอบอย่างง่ายว่า application มีการทำ certificate pinning
    • ติดตั้ง Burp certificate ลงบนเครื่องแล้วให้ Application ชี้ Proxy มาที่ Burp ที่รันอยู่ ถ้ายังไม่สามารถเห็น Traffic จาก Application เข้ามาใน Burp แสดงว่า Application อาจจะมีการทำ Certificate pinning
    • Check จากการทำ Reverse engineer โดย dex2jar และ jd-gui ซึ่งใน Application ตัวอย่างจะส่วนของการทำ Certificate pinning เช่น

Bypass certificate pinning

  1. การ bypass certificate pining บนเครื่อง non root โดยใช้ objection ทำ auto patch application ดังนี้
  2. เนื่องจาก objection ถูกติดตั้งบน virtual-python3 จำเป็นต้องใช้คำสั่ง source ก่อน
    #source ~/virtual-python3/bin/activate
    

  3. ทำการ patch application ด้วย command ดังนี้
    # objection patchapk -s SSLPinningExample.apk
    

  4. ซึ่ง frida gadget จะถูกฝังเข้าไปให้ application ตัวใหม่
  5. ติดตั้ง และ run Application ตัวใหม่
    # adb install SSLPinningExample.objection.apk
    

  6. run objection ดังนี้ ต้องให้ application ทำงานก่อนถึงจะทำให้ objection เชื่อมต่อกับ frida ได้
    # objection explore
    

  7. ทำการ disable certificate pinning โดยการใช้ command
  8. ตรวจสอบว่า application traffic ผ่าน burp proxy หรือไม่
  9. ทุกครั้งที่มี request จะมีการเขียนทับ function เพื่อ disable certificate pinning

 

อ้างอิง

ใส่ความเห็น