1 คะแนน โดย GN⁺ 2024-03-06 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

เจาะ certificate pinning ของ Messenger ของ Meta (macOS)

  • แอปพลิเคชัน Messenger สำหรับ macOS ของ Meta มีลักษณะคล้ายกับโมเดลของ Texts.com ซึ่งเป็นแอปเดสก์ท็อปแบบสแตนด์อโลน
  • Batuhan İçöz ผู้ดูแลโปรเจ็กต์ Meta platform ที่ Texts.com มองว่าขั้นตอนแรกที่สำคัญคือการดักจับ network request
  • Meta ใช้ certificate pinning เพื่อเสริมความปลอดภัยและป้องกันการวิเคราะห์คำขอไปยังเซิร์ฟเวอร์ผ่านการโจมตีแบบ MITM (man-in-the-middle)

certificate pinning คืออะไร?

  • เมื่อตั้งค่า proxy client จะต้องกำหนดให้เชื่อถือ "certificate authority"
  • สามารถใช้ใบรับรองที่ออกโดย certificate authority เพื่อดักจับและถอดรหัสข้อมูลของคำขอได้
  • หากบริการนั้นใช้ certificate pinning ก็จะยอมรับเฉพาะใบรับรองที่ออกโดย certificate authority ที่กำหนดไว้เท่านั้น ทำให้ไม่สามารถใช้ใบรับรองที่ออกโดย certificate authority ของผู้ใช้ได้

พฤติกรรมปกติ

  • หากไม่ปิดใช้งาน certificate pinning คำขอทั้งหมดจะตอบกลับเป็น "internal error" และซอฟต์แวร์ proxy จะแสดงว่า "SSL handshake failed"
  • เนื่องจากคำขอไม่สามารถผ่านวงจรการทำงานจนเสร็จได้ จึงไม่สามารถอนุมานข้อมูลเกี่ยวกับคำขอนั้นได้

พฤติกรรมที่ต้องการ

  • สามารถใช้การโจมตีแบบ MITM เพื่ออ่านข้อความคำขอ การตอบกลับ และ header ได้สำเร็จในเครื่องมือดีบักเครือข่าย

แนวทางที่เป็นไปได้

  • หนึ่งในวิธีที่เคยใช้ได้ผลก่อนหน้านี้คือเปลี่ยนสตริง URL ในไบนารีไปเป็น endpoint ที่โฮสต์เองซึ่งไม่ใช้ TLS
  • สามารถใช้ไลบรารี dynamic instrumentation อย่าง Frida ได้ แต่ Messenger มีแนวโน้มจะล่มได้ง่าย โดยเฉพาะเวลาทำ hooking
  • การใช้ Frida ยังมีขั้นตอนการ deploy ที่ซับซ้อนด้วย

แนวทางที่ใช้

  • ดาวน์โหลด Messenger แล้วนำไปไว้ในโฟลเดอร์ Applications จากนั้นนำเข้าไบนารี ARM เข้าไปใน Hopper
  • สามารถใช้ Hopper เพื่อ disassemble, decompile, recompile, debug และแสดงภาพไบนารีได้
  • ค้นหาสตริงอย่าง "SSL pinning validation failed" เพื่อพยายามแก้ไขให้น้อยที่สุด
  • พบสตริง "Using custom sandbox -> turn off SSL verification" แล้วจึงค้นหาฟังก์ชันที่เกี่ยวข้องและแก้ไขมัน
  • ตั้งค่าฟังก์ชัน IsUsingSandbox ให้คืนค่า true เสมอเพื่อปิดใช้งาน certificate pinning

ผลลัพธ์

  • export ไฟล์ executable ใหม่ ลบลายเซ็นออก แล้วแทนที่ไบนารี Messenger เดิมด้วยไบนารีตัวใหม่
  • เมื่อรีสตาร์ต Messenger เครื่องมือ proxy จะแสดง header, response body และข้อมูลคำขอทั้งหมด
  • สามารถดักจับคำขอได้สำเร็จด้วยการแก้ไขเพียง 4 ไบต์จากทั้งหมด 97,477,728 ไบต์ของไบนารี

การแจกจ่าย

  • หลังจากคอมไพล์ไบนารีแล้วก็ส่งให้ Batuhan
  • Batuhan รับ certificate สำหรับการเซ็นโค้ด ติดตั้งมัน และเซ็นแอปพลิเคชัน
  • เมื่อเซ็นเสร็จแล้ว ก็สามารถใช้ไบนารีบนระบบของตนเองเพื่อดูคำขอของตัวเองได้

ความเห็นของ GN⁺

  • บทความนี้นำเสนอตัวอย่างที่น่าสนใจว่าผู้วิจัยด้านความปลอดภัยสามารถ bypass certificate pinning ในแอป Messenger ของ Meta ได้อย่างไร
  • certificate pinning เป็นฟีเจอร์ด้านความปลอดภัยสำคัญที่ช่วยป้องกันการโจมตีแบบ man-in-the-middle แต่การที่นักวิจัยค้นพบวิธี bypass ได้ก็ให้ข้อมูลเชิงลึกที่สำคัญต่อชุมชนความปลอดภัย
  • เทคนิคนี้อาจช่วยให้นักพัฒนาเสริมความปลอดภัยของแอปหรือบริการของตนเอง และมีส่วนช่วยในการค้นหาและแก้ไขช่องโหว่ด้านความปลอดภัย
  • อย่างไรก็ตาม งานวิจัยลักษณะนี้ก็อาจถูกนำไปใช้ในทางที่ไม่ประสงค์ดีได้ จึงควรระมัดระวังในการเผยแพร่ผลการวิจัย
  • เครื่องมืออื่นที่มีความสามารถคล้ายกัน ได้แก่เครื่องมือวิเคราะห์เครือข่ายอย่าง Wireshark หรือ Burp Suite ซึ่งถูกใช้อย่างแพร่หลายในการติดตามและวิเคราะห์ network traffic

1 ความคิดเห็น

 
GN⁺ 2024-03-06
ความเห็นจาก Hacker News
  • ความสงสัยเกี่ยวกับแง่มุมทางกฎหมาย

    • สงสัยว่าการกระทำลักษณะนี้ถูกกฎหมายหรือไม่
    • เดิมทีคิดว่าในทางเทคนิคน่าจะเข้าข่ายละเมิด DMCA แต่ก็เริ่มสงสัยว่าสมมติฐานนี้อาจไม่ถูกต้อง
    • ตั้งคำถามว่าทางกฎหมายแล้วสิ่งนี้ทำได้อย่างไร
  • ความพยายามในการ decompile และ recompile รวมถึงความทุ่มเท

    • เคยลองเดินเส้นทางคล้ายกัน แต่ยอมแพ้ในขั้นตอน decompile/แก้ไข/recompile
    • ชื่นชมในความทุ่มเทนี้ และสงสัยว่าใช้เวลาไปมากแค่ไหน
    • สำหรับตัวเองจะกำหนดกรอบเวลาและยึดตามนั้น
  • การสูญหายไปของทักษะจากอดีต

    • หวนรำลึกถึงยุคของ +Orc
    • ความรู้ในสมัยนั้น เช่น วิธีหาและลบ branch ที่ไม่ต้องการ ตอนนี้แทบถูกลืมไปหมดแล้ว
    • ปัจจุบันมีทักษะอื่นที่ต้องเรียนรู้อีกมากกว่าเดิมมาก
  • ข้อสังเกตเกี่ยวกับการป้องกัน RE ของ Meta

    • ชี้ว่าการป้องกัน reverse engineering (RE) ของ Meta โดยเฉพาะ Messenger นั้นค่อนข้างผ่อนปรนมาก
    • กล่าวว่าน่าจะลบ IsUsingSandbox() ออกจาก production build ได้อย่างง่ายดาย
    • บอกว่าแม้ยังไม่ต้องใช้เทคนิค obfuscation ขั้นสูง การป้องกันเหล่านี้ก็ดูจะเจาะได้ง่ายอยู่แล้ว
  • การทำ certificate pinning ในโหมด sandbox

    • กล่าวถึงวิธีที่สามารถบังคับใช้ certificate pinning ได้แม้อยู่ในโหมด sandbox
    • เล่าย้อนถึงตอนเรียนมหาวิทยาลัยที่เคยพยายามดักทราฟฟิกของ Snapchat ด้วยการโจมตีแบบ MitM แต่ไม่สำเร็จ
  • ประโยชน์ของ runtime binary checksum

    • ตั้งคำถามว่า runtime binary checksum จะช่วยทำให้การแก้ไขตัวไบนารีซับซ้อนขึ้นได้หรือไม่
    • สงสัยว่านี่ไม่ใช่ขั้นตอนปกติในแอปมือถือหรือ และ iOS หรือ Android SDK มีความสามารถแบบนี้ให้หรือไม่
    • มองว่าเพราะวิธีแก้สุดท้ายเป็นเพียงการแก้ไม่กี่ไบต์ในไบนารี จึงน่าจะป้องกันได้ด้วยวิธีนี้
  • คำถามเกี่ยวกับการใช้เครื่องมือพร็อกซี

    • ถามถึงเครื่องมือพร็อกซีที่ใช้ในบทความดังกล่าว
    • สงสัยว่าเมื่อเครื่องมือนั้นทำงานอยู่ มันจะ route ทราฟฟิกของทุกแอปพลิเคชันหรือไม่
  • ความปลอดภัยของแอปพลิเคชันจากบริษัทขนาดใหญ่

    • สงสัยว่าทำไมแอปของบริษัทใหญ่ ๆ ถึงไม่ได้ทำ obfuscation แบบเต็มรูปแบบ และไม่มีระบบป้องกันอื่นที่ปฏิเสธการรันไบนารีที่ถูกแก้ไข
  • ความเป็นไปได้ในการดักทราฟฟิกของแอป Meta

    • มีความเห็นว่าไม่จำเป็นต้องดักทราฟฟิกของแอป Meta ก็ได้
    • ให้ลิงก์ไปยังหน้าการเรียนรู้ bug bounty ของ Meta
  • ความสำคัญของการมอนิเตอร์ทราฟฟิก

    • เน้นว่าสิ่งนี้สำคัญต่อการหักล้างทฤษฎีสมคบคิดที่ว่าแอป Facebook แอบฟังผู้ใช้ผ่านไมโครโฟนเพื่อยิงโฆษณาแบบเจาะจง
    • วิธีที่ง่ายที่สุดในการโต้แย้งเรื่องนี้คือมอนิเตอร์ทราฟฟิกระหว่างแอปกับเซิร์ฟเวอร์ของ Facebook แต่ certificate pinning กลับขัดขวางสิ่งนั้น
    • แม้จะยากที่จะโน้มน้าวคนที่เชื่อทฤษฎีสมคบคิด แต่การรู้ว่าสามารถมอนิเตอร์แบบนี้ได้ยังคงสำคัญ