ทุกอย่างเกี่ยวกับการข้ามการปักหมุด SSL ของ Android และการสกัดกั้นแอปพลิเคชันพร็อกซีที่ไม่รู้จัก
Hola H3ckers,
เราทุกคนรู้ว่ามีบทความมากมายสำหรับ “วิธีสกัดกั้นทราฟฟิก HTTPS ของแอพ Android” ดังนั้นเราจะไม่พูดถึงบทความเหล่านี้ หากคุณไม่พบใด ๆ อ้างอิงต่อไปนี้:
การกำหนดค่าอุปกรณ์ Android ให้ทำงานร่วมกับ Burp — PortSwigger
ข้อกำหนดเบื้องต้น:
คุ้นเคยกับ BurpSuite proxy, Android Pentesting ขั้นพื้นฐาน และเครื่องมือต่างๆ เช่น adb, frida, Objection, Magisk application, Decompiling/Recompiling APK และการลงนาม APK
สารบัญ
- แอปเป้าหมายของฉันมีการปักหมุด SSL หรือไม่
- เดี๋ยวก่อน เราจะยืนยันการปักหมุดได้อย่างไร
- ได้เวลาบายพาส
- เหตุใดฉันจึงไม่สามารถสกัดกั้นทราฟฟิกแอปได้ แม้ว่าแอปจะทำงานกับ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คุณสามารถลองใช้โมดูลต่อไปนี้เพื่อข้ามการปักหมุด
- ac-pm/SSLUnpinning_Xposed: โมดูล Android Xposed เพื่อข้ามการตรวจสอบใบรับรอง SSL (การปักหมุดใบรับรอง) (github.com)
- 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 ของตนเอง
ขั้นตอนที่ 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 มีความสุขในการแฮ็ก :)