ทำไมทราฟฟิกการดีบักไร้สายจึงไม่ใช่หลักฐานการรั่วไหลของ VPN
เซสชัน ADB ที่จับคู่ผ่าน Wi-Fi พิสูจน์ความสัมพันธ์การดีบัก ไม่ใช่เส้นทางออกสู่อินเทอร์เน็ต นี่คือสิ่งที่การสังเกตนั้นครอบคลุมจริง
คุณเปิดการดีบักไร้สาย เชื่อมต่อแล็ปท็อป และเซสชันยังทำงานต่อไปขณะที่ VPN เปิดอยู่ ดูเหมือนว่ามีบางสิ่งลอดผ่านอุโมงค์ไป เกือบแน่นอนว่าไม่ใช่ เซสชันการดีบักและคำขอของแอปไปยังเว็บไซต์เป็นความสัมพันธ์เครือข่ายที่ต่างกัน และมีเพียงอย่างเดียวเท่านั้นที่ควรข้ามอุโมงค์
ผมเจอการอ่านผิดนี้สองครั้ง ครั้งหนึ่งเมื่อโทรศัพท์กับแล็ปท็อปอยู่ใน Wi-Fi เดียวกัน และอีกครั้งหลังรีบูตเมื่อการจับคู่ยังอยู่ ทั้งสองกรณี VPN กำลังทำสิ่งที่ตั้งค่าไว้อย่างถูกต้อง
ตั้งชื่อสิ่งที่สังเกตก่อนตั้งชื่อบั๊ก
มีสามเหตุการณ์ที่อาจเกิดก่อนข้อกล่าวหาว่ารั่วไหล และมันใช้แทนกันไม่ได้ เครื่องมืออาจค้นพบบริการ อุปกรณ์อาจอนุมัติเวิร์กสเตชัน หรือเซสชันที่ได้รับอนุญาตอาจส่งคำสั่งและไบต์จริง จดบันทึกว่าคุณเห็นอันไหน เพราะแต่ละอย่างพิสูจน์ได้น้อยกว่าที่คนคิด
การค้นพบมักเป็น mDNS หรือการสแกนพอร์ต การจับคู่เป็นการตัดสินใจลงทะเบียนบนโทรศัพท์ ยืนยันด้วยรหัสที่ผู้ใช้พิมพ์ เซสชันที่ยังมีชีวิตหมายความว่าทราฟฟิกเคลื่อนระหว่างปลายทางสองจุดที่จับคู่กันแล้ว ไม่มีสิ่งใดอธิบายว่าคำขอ HTTPS ของแอปไปที่ใด
เก็บปลายทาง อินเทอร์เฟซ ตระกูลที่อยู่ เวลาที่เกิด และโปรไฟล์ผู้ใช้ไว้กับเหตุการณ์ หากไม่มีรายละเอียดเหล่านี้ การสังเกตจะเทียบกับนโยบายเครือข่ายภายในที่ตั้งใจไว้ หรือกับบิลด์ VPN ที่ทำงานอยู่ตอนนั้นไม่ได้
ทำไมสองเส้นทางจึงไม่เคยบรรจบกัน
การดีบักไร้สายคือการเชื่อมต่อขาเข้าสู่อุปกรณ์ adbd ฟังอยู่บนพอร์ตที่ผูกกับอินเทอร์เฟซ Wi-Fi และเวิร์กสเตชันเชื่อมต่อเข้ามาหลังการจับคู่ ทิศทางสำคัญ แล็ปท็อปของคุณเข้าไปในโทรศัพท์ ไม่ใช่กลับกัน นี่คือสิ่งที่ตรงข้ามกับการรั่วไหลขาออก
ทราฟฟิกอินเทอร์เน็ตของแอปออกผ่านอินเทอร์เฟซอุโมงค์ที่ VpnService ติดตั้ง จับคู่ตาม UID และกฎการกำหนดเส้นทาง adbd เป็นเดมอนระบบที่ทำงานในฐานะผู้ใช้ shell ไม่ใช่แอปในชุดการกำหนดเส้นทางนั้น มันยังคงอยู่บนลิงก์ Wi-Fi ชั้นล่างแม้ทุกแอปจะถูกปักหมุดกับอุโมงค์
โหมดล็อกดาวน์บังคับใช้อุโมงค์กับแอปที่ครอบคลุม มันไม่ได้เปลี่ยนซ็อกเก็ตที่กำลังฟังให้เป็นเส้นทางออก
นั่นคือเหตุผลที่เซสชัน ADB ที่ทำงานได้และสวิตช์ตัดการเชื่อมต่อที่ทำงานได้อยู่ร่วมกันโดยไม่ขัดแย้ง ในการพิสูจน์การรั่วไหล คุณต้องสังเกตทิศทางที่ควรถูกบล็อก
การทดสอบขาออกจริงมีหน้าตาอย่างไร
ทดสอบแอปที่ครอบคลุม ไม่ใช่ช่องทางดีบัก ตั้งเงื่อนไขความล้มเหลวโดยเจตนา จากนั้นส่งคำขอใหม่หนึ่งครั้งและบันทึกว่าเกิดอะไรขึ้น
- ยืนยันว่า VPN เป็นเส้นทางเดียว เปิด VPN แบบเปิดตลอดพร้อมบล็อกการเชื่อมต่อที่ไม่มี VPN
- หยุด VPN ด้วยวิธีที่รองรับ และยืนยันว่าแอปรายงานว่าไม่มีการเชื่อมต่อ
- ส่งคำขอที่ไม่เป็นอันตรายหนึ่งรายการจากแอปนั้น และสังเกตว่าล้มเหลวหรือสำเร็จ
- ทำซ้ำโดยเปิดการดีบักไร้สาย แล้วปิด เพื่อแยกตัวแปร
คำขอที่ถูกบล็อกภายใต้เงื่อนไขเหล่านั้นเป็นหลักฐาน เซสชัน ADB ที่สำเร็จไม่ใช่ และ ping หนึ่งครั้งจากแอปเทอร์มินัลก็ไม่ใช่
หากคำขอสำเร็จจริงขณะล็อกดาวน์เปิดอยู่ ให้บันทึก UID ของแอปและการอนุญาต VPN ของแอป เครือข่ายที่ใช้งาน และเวอร์ชันไคลเอนต์ การรวมกันนั้นคือการค้นพบที่แท้จริง
การจับคู่มีอายุยืนกว่าเซสชัน
การจับคู่เป็นสถานะถาวร ไม่ใช่การจับมือที่ลืมได้หลังการทดสอบสาย เอกสารการดีบักของ Android อธิบายขั้นตอนไร้สายและระบุว่าความสัมพันธ์คงอยู่จนกว่าจะลืมอย่างชัดเจนหรือเพิกถอนการอนุญาต
ตรวจสอบว่ายังเหลืออะไรที่ได้รับอนุญาตก่อนโทษอุโมงค์ เปิดการดีบักไร้สาย ดูอุปกรณ์ที่จับคู่ แล้วลืมทุกอย่างที่คุณจำไม่ได้แล้ว รัน adb devices จากเวิร์กสเตชันเพื่อดูรายการที่ยังตอบสนอง และ adb disconnect เพื่อทิ้งรายการที่ล้าสมัย การปิดการดีบักไร้สายจะปิดพอร์ตที่ฟังอยู่ทั้งหมด
บนเครือข่ายที่ใช้ร่วมกันหรือไม่น่าเชื่อถือ ปล่อยให้ปิดไว้ การอนุญาตถาวรบนเครือข่ายที่คุณไม่ได้ควบคุมเป็นปัญหาที่ใหญ่กว่าการข้าม TUN ในเชิงสมมติ
ก่อนจะรายงานบั๊กนั้น
รายงานที่มีประโยชน์ระบุขอบเขตที่ล้มเหลวอย่างแม่นยำ รวมรุ่นอุปกรณ์และเวอร์ชัน Android ไคลเอนต์ VPN และเวอร์ชัน ล็อกดาวน์เปิดอยู่หรือไม่ แพ็กเกจแอปและ UID และเครือข่ายที่โทรศัพท์อยู่ เพิ่มคำสั่งหรือคำขอที่ทำให้เกิดการสังเกต พร้อมเวลาที่เกิดขึ้น หากไม่มีสิ่งเหล่านี้ ไม่มีใครสามารถทำให้ขอบเขตที่คุณอ้างว่าพังเกิดขึ้นซ้ำได้
อย่าปิดการบังคับใช้หรือเปิดเผยการดีบักบนเครือข่ายที่ไม่น่าเชื่อถือเพื่อให้การทดสอบดูน่าตื่นเต้นขึ้น นั่นเปลี่ยนระบบที่คุณกำลังวัดและทิ้งหลักฐานที่ไม่มีใครทำซ้ำได้
หากหลักฐานเดียวของคุณคือ ADB เชื่อมต่อขณะ VPN เปิดอยู่ คุณวัดผิดเส้นทาง ให้รันการทดสอบระดับแอปอีกครั้งก่อน คำตอบมักมาที่นั่น