ทุกอย่างเกี่ยวกับการข้ามการปักหมุด SSL ของ Android และการสกัดกั้นแอปพลิเคชันพร็อกซีที่ไม่รู้จัก

Nov 27 2022
Hola H3ckers เราทุกคนรู้ว่ามีบทความมากมายสำหรับ “วิธีสกัดกั้นทราฟฟิก HTTPS ของแอพ Android” ดังนั้นเราจะไม่กล่าวถึงในที่นี้ หากคุณไม่พบใดๆ ให้อ้างอิงต่อไปนี้: การกำหนดค่าอุปกรณ์ Android เพื่อทำงานร่วมกับ Burp — PortSwigger ข้อกำหนดเบื้องต้น: คุ้นเคยกับ BurpSuite proxy, Basic Android Pentesting และเครื่องมือต่างๆ เช่น adb, frida, Objection, Magisk application, Decompiling/Recompiling APK และ การลงนาม APK

Hola H3ckers,

เราทุกคนรู้ว่ามีบทความมากมายสำหรับ “วิธีสกัดกั้นทราฟฟิก HTTPS ของแอพ Android” ดังนั้นเราจะไม่พูดถึงบทความเหล่านี้ หากคุณไม่พบใด ๆ อ้างอิงต่อไปนี้:

การกำหนดค่าอุปกรณ์ Android ให้ทำงานร่วมกับ Burp — PortSwigger

ข้อกำหนดเบื้องต้น:

คุ้นเคยกับ BurpSuite proxy, Android Pentesting ขั้นพื้นฐาน และเครื่องมือต่างๆ เช่น adb, frida, Objection, Magisk application, Decompiling/Recompiling APK และการลงนาม APK

สารบัญ

  1. แอปเป้าหมายของฉันมีการปักหมุด SSL หรือไม่
  2. เดี๋ยวก่อน เราจะยืนยันการปักหมุดได้อย่างไร
  3. ได้เวลาบายพาส
  4. เหตุใดฉันจึงไม่สามารถสกัดกั้นทราฟฟิกแอปได้ แม้ว่าแอปจะทำงานกับHTTP ก็ตาม

ฉันเข้าใจแล้ว ฟังดูเป็นเรื่องตลก เพราะพวกคุณคงทราบดีว่าหากมีการปักหมุด เราจะไม่สามารถจับทราฟฟิก HTTPS ของแอปพลิเคชัน Android เป้าหมายของเราได้

2. เดี๋ยวก่อน เราจะยืนยันการปักหมุดได้อย่างไร?

หลังจากตั้งค่าพร็อกซีทั้งในอุปกรณ์และพร็อกซีเซิร์ฟเวอร์ (เรอ) ให้เริ่มการทำงานของแอปพลิเคชันเป้าหมาย จากนั้นทำกิจกรรมบางอย่างที่ทำให้มีการสื่อสารระหว่างแอปพลิเคชันเป้าหมายและเซิร์ฟเวอร์

ถึงเวลาตรวจสอบแดชบอร์ดของ Burp โดยเฉพาะในส่วนบันทึก หากมีการปักหมุด เราจะสามารถเห็นข้อผิดพลาดของใบรับรองดังนี้:

2. ถึงเวลาบายพาส

2.1 ใบรับรองการย้าย — โมดูล Magisk:

หากอุปกรณ์ของคุณรูทด้วยแอปพลิเคชัน Magisk โมดูล Move Certificate ก็เป็นหนึ่งในตัวเลือกที่ดี

โมดูลนี้จะย้ายใบรับรองที่เชื่อถือได้ของผู้ใช้ไปยังที่เก็บระบบ ทำให้ระบบ (รูท) เชื่อถือใบรับรองที่ผู้ใช้ติดตั้ง (ใบรับรอง CA พร็อกซีของเรา)

2.2 เครื่องมือคัดค้าน

Repo: sensepost/objection: การคัดค้าน — การสำรวจมือถือรันไทม์ (github.com)

ขั้นตอนที่ 1 : ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ frida กำลังทำงานบนอุปกรณ์ Android

ขั้นตอนที่ 2:แนบแอปพลิเคชันเป้าหมายพร้อมคัดค้านด้วยคำสั่งต่อไปนี้:

คัดค้าน -g <pkg name/ PID> สำรวจ

จากนั้นดำเนินการคำสั่ง “ android sslpinning ปิดการใช้งาน

แค่นั้นแหละ สคริปต์จะค้นหาคลาสการปักหมุด SSL และเชื่อมต่อระหว่างรันไทม์เพื่อเลี่ยงการปักหมุด

2.3 กรอบ Frida

Repo: Frida (github.com)

มาถึงวิธีที่ได้รับความนิยมและใช้กันอย่างแพร่หลาย

ขั้นตอนที่ 1 : ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ frida กำลังทำงานบนอุปกรณ์ Android

ขั้นตอนที่ 2:แนบแอปพลิเคชันเป้าหมายของคุณกับ frida และเรียกใช้สคริปต์ข้าม SSL ที่คุณชื่นชอบ

ต่อไปนี้เป็นสคริปต์ที่ฉันชอบ:

https://codeshare.frida.re/@akabe1/frida-multiple-unpinning/
https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/

2.4 การใช้ Xposed Framework

หากอุปกรณ์ของคุณรูทด้วยXposed frameworkคุณสามารถลองใช้โมดูลต่อไปนี้เพื่อข้ามการปักหมุด

  1. ac-pm/SSLUnpinning_Xposed: โมดูล Android Xposed เพื่อข้ามการตรวจสอบใบรับรอง SSL (การปักหมุดใบรับรอง) (github.com)
  2. ViRb3/TrustMeAlready: ปิดใช้งานการตรวจสอบ SSL และการปักหมุดบน Android ทั่วทั้งระบบ (github.com)

apk-mitm เป็นแอปพลิเคชัน CLI ที่เตรียมไฟล์ APK ของ Android โดยอัตโนมัติสำหรับการตรวจสอบ HTTPS โดยการแก้ไขไฟล์ apk และบรรจุใหม่

ซื้อคืน:

shroudedcode/apk-mitm: แอปพลิเคชัน CLI ที่เตรียมไฟล์ Android APK สำหรับการตรวจสอบ HTTPS โดยอัตโนมัติ (github.com)

สามารถดึง apk-mitm ออกมาได้โดยใช้npm

ขั้นตอนที่ 1:เรียกใช้ apk-mitm ดังที่แสดงด้านล่าง

แค่นั้นแหละ apk-mitm ได้ทำหน้าที่ของมันแล้ว ตอนนี้เราสามารถติดตั้ง apk ที่แก้ไขแล้วและสกัดกั้นการรับส่งข้อมูลของแอปพลิเคชัน

2.6 การแก้ไขไฟล์ network_security_config.xml

การกำหนดค่าความปลอดภัยเครือข่ายช่วยให้แอปปรับแต่งการตั้งค่าความปลอดภัยเครือข่ายผ่านไฟล์การกำหนดค่าที่ประกาศได้ การกำหนดค่าทั้งหมดมีอยู่ในไฟล์ XML นี้ และไม่จำเป็นต้องเปลี่ยนรหัส

ที่มา : การกำหนดค่าความปลอดภัยเครือข่าย | นักพัฒนา Android

การกำหนดค่าความปลอดภัยเครือข่ายทำงานในAndroid 7.0 หรือสูงกว่า

ขั้นตอนที่ 1 : ถอดรหัสแอปพลิเคชัน Android ด้วย apktool หรือทางเลือกอื่น และค้นหาไฟล์network_security_config.xml ภายใต้ /res/xml

ขั้นตอนที่ 2 : ไฟล์อาจมีลักษณะเช่นนี้หากแอปได้ปักหมุดใบรับรอง CA ของตนเอง

แหล่งที่มาของรูปภาพ: developer.android.com

ขั้นตอนที่ 3 : ลบส่วนแท็ก <pin-set>… </pin-set> และเพิ่มสิ่งต่อไปนี้:

ขั้นตอนที่ 4: ตอนนี้บันทึกไฟล์และบรรจุแอปพลิเคชันใหม่โดยใช้ apktool และ uber-apk-signer (สำหรับการลงนาม apk ที่แก้ไข)

แค่นั้นแหละ ติดตั้ง apk ใหม่ของเราและคุณก็พร้อมใช้งาน

3. จะเกิดอะไรขึ้นหากแอปพลิเคชันไม่โดนดักฟังและไม่แสดงข้อผิดพลาดใดๆ !!

สิ่งแรกที่ผุดขึ้นในใจของฉันคือ " Flutter " แอปพลิเคชันที่ใช้การกระพือนั้นโดยพื้นฐานแล้วคือ " พร็อกซีไม่รู้จัก "

มาแล้วพระเอกของเรา “ Reflutter ” :

เฟรมเวิร์กนี้ช่วยในการทำวิศวกรรมย้อนกลับของแอพ Flutter โดยใช้ไลบรารี Flutter เวอร์ชันแพตช์ซึ่งคอมไพล์แล้วและพร้อมสำหรับการบรรจุแอปใหม่ “

ซื้อคืน:https://github.com/Impact-I/reFlutter

ขั้นตอนที่ 1: ติดตั้งรีฟลัตเตอร์โดยใช้ pip

ขั้นตอนที่ 2: ทำตามคำสั่งที่แสดงในภาพหน้าจอด้านล่าง

ขั้นตอนที่ 3: ลงชื่อเข้าใช้แอปพลิเคชันโดยใช้ uber-apk-signer หรือทางเลือกอื่นๆ และติดตั้ง

ขั้นตอนที่ 4: ตอนนี้ใน Burp proxy ให้เริ่มฟังพอร์ต8083และเปิดใช้งาน " Support Invisible Proxying "

แค่นั้นแหละ พวกคุณพร้อมแล้วที่จะไป … !

4. แอปพลิเคชันของฉันใช้ HTTP เท่านั้น แต่ก็ยังไม่สามารถสกัดกั้นได้!!

อืม.. ค่อนข้างแปลก แต่บางครั้งก็เกิดขึ้น

แอปพลิเคชันที่มีลักษณะการทำงานนี้ โดยทั่วไปเรียกว่าแอปพลิเคชัน “ Proxy Unaware ” แอปพลิเคชันดังกล่าวกำหนดเส้นทางการรับส่งข้อมูลโดยตรงไปยังอินเทอร์เน็ตโดยไม่ให้ความร่วมมือกับการตั้งค่าพร็อกซีทั้งระบบ

เวลาที่จะเลี่ยง:

สำหรับวิธีนี้ต้องขอขอบคุณพี่ฟาริสด้วยนะคะ ❤

(60) ฟาริส โมฮัมเหม็ด | ลิงค์อิน

ขั้นตอนที่ 1: ค้นหาที่อยู่โดเมนที่แอพกำลังสื่อสารโดยใช้ Wireshark แสดงด้านล่าง.

ขั้นตอนที่ 2: ถอดรหัสแอปพลิเคชันโดยใช้ apktool

ขั้นตอนที่ 3: เข้าสู่โฟลเดอร์ที่ถอดรหัสแล้วและใช้เครื่องมือ ack/grep เพื่อค้นหาไฟล์ที่มีการกล่าวถึงชื่อโดเมน

ขั้นตอนที่ 4: แทนที่ชื่อโดเมนด้วยที่อยู่ IP และพอร์ตของ BurpSuite

ขั้นตอนที่ 5: บรรจุแอปพลิเคชันใหม่ ลงชื่อ และติดตั้งบนอุปกรณ์ Android

ขั้นตอนที่ 7: ในพร็อกซี BurpSuite จากแท็บการจัดการคำขอ ให้เปลี่ยนเส้นทางโฮสต์และพอร์ตเป็นที่อยู่โดเมนดั้งเดิมซึ่งแอปใช้ในตอนแรก

ขั้นตอนที่ 8: ตั้งค่าการจับคู่และแทนที่ในตัวเลือกพร็อกซีเพื่อแทนที่ค่าส่วนหัวของโฮสต์จากที่อยู่ IP ของผู้ฟังเรอเป็นที่อยู่โดเมนดั้งเดิมของแอปพลิเคชัน

แค่นั้นแหละ. ตอนนี้การรับส่งข้อมูล HTTP ของแอปพลิเคชันจะถูกบันทึกในพร็อกซี Burp ของเรา

หมายเหตุ: — ที่นี่ เนื่องจากเราแทนที่โดเมนแอปพลิเคชันแบบฮาร์ดโค้ด เราจึงไม่จำเป็นต้องตั้งค่าพร็อกซีอุปกรณ์ เนื่องจากแอปพลิเคชันสื่อสารโดยตรงกับโดเมนแบบฮาร์ดโค้ด (เราได้แทนที่ด้วย IP พร็อกซีของเรา)

ดังนั้นฉันคิดว่าฉันได้ทำตอนนี้ อันที่จริง มีวิธีอื่นๆ อีกหลายวิธีที่เราสามารถใช้เพื่อหลีกเลี่ยงการปักหมุด SSL ของ Android ฉันจะพยายามสร้างส่วนที่ 2 โดยอ้างอิงจากคำตอบของคุณ

ขอบคุณ peeps มีความสุขในการแฮ็ก :)