6 คะแนน โดย GN⁺ 2026-01-29 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • WhatsApp ซึ่งมีผู้ใช้มากกว่า 3 พันล้านคน ได้เริ่มนำ ชั้นความปลอดภัยที่พัฒนาด้วย Rust มาใช้เพื่อเสริมความสามารถในการป้องกันภัยคุกคามจากมัลแวร์
  • มีการ เขียนไลบรารีความสอดคล้องของสื่อใหม่ด้วย Rust และแจกจ่ายไปยังอุปกรณ์และเบราว์เซอร์หลายพันล้านเครื่อง พร้อมผ่านการพิสูจน์การใช้งานจริงในระดับโลกแล้ว
  • โค้ด C++ เดิม 160,000 บรรทัดถูกแทนที่ด้วย Rust 90,000 บรรทัด พร้อมทั้งปรับปรุงทั้งประสิทธิภาพและประสิทธิภาพการใช้หน่วยความจำ
  • หลังเหตุ ช่องโหว่ Stagefright ในปี 2015 มีการผลักดันให้ใช้ ภาษาแบบ memory-safe อย่าง Rust เพื่อเพิ่มความปลอดภัยของกระบวนการจัดการไฟล์มีเดีย
  • การเปลี่ยนแปลงนี้เป็นจุดเปลี่ยนที่ขยายบทบาทของภาษาแบบ memory-safe ใน กลยุทธ์ความปลอดภัยของ WhatsApp, Messenger และ Instagram โดยรวม

กลยุทธ์การประมวลผลมีเดียของ WhatsApp

  • WhatsApp เป็น บริการส่งข้อความแบบเข้ารหัสจากต้นทางถึงปลายทาง ที่มีผู้ใช้มากกว่า 3 พันล้านคน และได้พัฒนากลยุทธ์อย่างต่อเนื่องเพื่อรับมือกับภัยคุกคามด้านความปลอดภัย
    • เมื่อผู้ใช้แชร์สื่ออย่างรูปภาพหรือวิดีโอ ก็มีความเป็นไปได้ที่มัลแวร์จะถูกฝังมากับไฟล์
    • ไฟล์บางประเภทอาจใช้ประโยชน์จาก ช่องโหว่ที่ยังไม่ได้แพตช์ ของระบบปฏิบัติการหรือแอปได้
  • เพื่อป้องกันสิ่งนี้ จึงได้นำ ภาษา Rust มาใช้กับฟีเจอร์การแชร์มีเดียเพื่อให้ได้ความปลอดภัยด้านหน่วยความจำ
    • กรณีนี้ถูกกล่าวถึงว่าเป็นหนึ่งใน ตัวอย่างการแจกจ่ายไลบรารีที่พัฒนาด้วย Rust ในขนาดใหญ่ที่สุดของโลก

ช่องโหว่ Android Stagefright ในปี 2015 และการรับมือ

  • ช่องโหว่ Stagefright ของ Android ในปี 2015 อยู่ในไลบรารีประมวลผลมีเดียระดับระบบปฏิบัติการ ทำให้ไม่สามารถแก้ไขได้ในระดับแอป
  • WhatsApp ได้ปรับปรุงไลบรารี C++ ภายในของตนชื่อ “wamedia” ให้สามารถ ตรวจจับไฟล์ที่ไม่เป็นไปตามมาตรฐาน MP4 ได้
    • ทำให้สามารถปกป้องผู้ใช้ได้โดยไม่ต้องรอการอัปเดตระบบปฏิบัติการ
  • อย่างไรก็ตาม เนื่องจาก wamedia ประมวลผลอินพุตที่ไม่น่าเชื่อถือโดยอัตโนมัติ จึงเกิดความจำเป็นที่จะต้องเปลี่ยนไปใช้ภาษาแบบ memory-safe

การเปลี่ยนผ่านสู่ Rust: การเขียนใหม่ครั้งใหญ่และผลลัพธ์

  • WhatsApp ได้พัฒนา wamedia เวอร์ชัน Rust ควบคู่ไปกับเวอร์ชัน C++ เดิม
    • ใช้ differential fuzzing, integration test และ unit test เพื่อตรวจสอบความเข้ากันได้ระหว่างสอง implementation
  • ในระยะแรกมีปัญหาเรื่อง ขนาดไบนารีที่เพิ่มขึ้น จาก Rust standard library และ ความเข้ากันได้กับระบบ build แต่ได้วางระบบรองรับระยะยาวไว้แล้ว
  • ผลลัพธ์คือมีการแทนที่ C++ 160,000 บรรทัด → Rust 90,000 บรรทัด พร้อมปรับปรุงทั้งประสิทธิภาพและประสิทธิภาพการใช้หน่วยความจำ
  • เสร็จสิ้นการแจกจ่ายเวอร์ชัน Rust แบบสมบูรณ์แล้วบน ทุกแพลตฟอร์ม เช่น Android, iOS, Mac, Web และอุปกรณ์สวมใส่
  • หลังจากนั้นยังได้เปิดตัวระบบ “Kaleidoscope” เพื่อใช้ตรวจจับไฟล์เสี่ยง เช่น PDF และไฟล์ปฏิบัติการ รวมถึงตรวจจับการปลอมแปลงนามสกุลไฟล์และ MIME spoofing

แนวทางด้านความปลอดภัยของ WhatsApp

  • WhatsApp มีชั้นความปลอดภัยหลายรูปแบบ เช่น การเข้ารหัสจากต้นทางถึงปลายทาง, การสำรองข้อมูลแบบเข้ารหัส, key transparency และ ฟีเจอร์ป้องกันการโทร
  • มีการระบุความเสี่ยงผ่าน การเปิดเผย CVE, การตรวจสอบความปลอดภัยทั้งภายในและภายนอก, fuzzing และ static analysis, การจัดการซัพพลายเชน และ การวิเคราะห์ attack surface
  • มีการขยาย โปรแกรม Bug Bounty พร้อมให้ Research Proxy เพื่อให้นักวิจัยสามารถวิเคราะห์ network protocol ของ WhatsApp ได้
  • เมื่อยืนยันได้ว่าช่องโหว่สำคัญจำนวนมากมีต้นตอจาก ปัญหา memory safety ใน C/C++ จึงดำเนิน 3 กลยุทธ์ควบคู่กัน
    1. ลด attack surface ที่ไม่จำเป็น
    2. เสริมการรับประกันความปลอดภัยให้โค้ด C/C++ ที่ยังเหลืออยู่
    3. เปลี่ยนภาษาเริ่มต้นของโค้ดใหม่เป็น ภาษาแบบ memory-safe

การเร่งนำ Rust มาใช้และทิศทางในอนาคต

  • Rust ทำให้ WhatsApp สามารถพัฒนา ไลบรารีความปลอดภัยประสิทธิภาพสูงแบบข้ามแพลตฟอร์ม ได้
  • การเปลี่ยนแปลงนี้มอบ ชั้นความปลอดภัยเพิ่มเติมที่ผู้ใช้มองไม่เห็น และเป็นส่วนหนึ่งของกลยุทธ์ defense-in-depth
  • ทีมความปลอดภัยของ WhatsApp และ Meta กำลังขยาย พื้นที่ใช้งาน Rust ที่ให้ผลลัพธ์สูง และมีแผน เร่งการนำ Rust มาใช้ ต่อไป

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

 
GN⁺ 2026-01-29
ความคิดเห็นจาก Hacker News
  • WhatsApp เป็นเมสเซนเจอร์ที่มีผู้ใช้ 3 พันล้านคน ต่อวัน
    แม้ในสหรัฐฯ จะไม่ได้ใช้กันมากนัก แต่ในระดับโลกมันได้กลายเป็น โครงสร้างพื้นฐานด้านการสื่อสาร ไปแล้ว
    ถ้าคุณอยากสร้างผลิตภัณฑ์สำหรับตลาดโลก คุณต้องเข้าใจวิธีคิดและพฤติกรรมของผู้ใช้กลุ่มนี้

    • ในฐานะคนยุโรป ฉันก็ยังคงปฏิเสธที่จะติดตั้ง WhatsApp
      ยังมีคนหัวแข็งแบบนี้อยู่อีกอย่างน้อย หลายสิบคน
      ได้โปรดอย่าไปมีส่วนร่วมในการทำให้ WhatsApp ยิ่งหลีกเลี่ยงไม่ได้กว่าเดิม
    • ที่ มาลาวี ซึ่งฉันอาศัยอยู่ WhatsApp ถูกใช้แพร่หลายกว่าอีเมลมาก
      คนส่วนใหญ่แทบไม่เช็กอีเมลเลย
      ฉันดูแลคอมมูนิตี้นักพัฒนา และชนเพดานจำนวนสมาชิกกลุ่ม (1024 คน) อยู่บ่อย ๆ
      ต่อให้พยายามย้ายไป Discord หรือ Slack สุดท้ายก็ต้องกลับมาที่ WhatsApp
      เพราะ แพ็กเกจดาต้าของผู้ให้บริการเครือข่าย ทำให้ WhatsApp แทบจะใช้ฟรี
    • ในตลาดที่ WhatsApp ครองอยู่ คุณภาพก็กำลังแย่ลงเพราะ โฆษณาและสแปม ที่เพิ่มขึ้น
      TechCrunch ลงข่าวเรื่องสแปมจากข้อความธุรกิจบน WhatsApp หลายครั้ง เช่น บทความนี้ แต่ในความเป็นจริงแทบไม่มีอะไรเปลี่ยน
      UX ของฟีเจอร์คอมมูนิตี้ก็ไม่ค่อยดี
      สุดท้ายผมคิดว่าปัญหาคือการ ผูกติดกับ ecosystem ของ Facebook ที่หนักขึ้นเรื่อย ๆ
    • พูดตรง ๆ ว่าตัวเลข 3 พันล้านคนนี้ดู เกินจริง
      ฉันไม่ได้ใช้ WhatsApp มา 10 ปีแล้ว และเพื่อนกับครอบครัวของฉันส่วนใหญ่ก็ย้ายไป Signal กันหมด
      ในยุโรปก็ยังมีบางพื้นที่ที่ใช้ Viber กันอยู่
    • ในอเมริกาเหนือหรือยุโรป ผู้ใช้ที่สร้าง รายได้จริง น่าจะมีราว 200 ล้านคน
  • เขาบอกว่าเป็นการดีพลอยไลบรารีที่เขียนด้วย Rust ในสเกลใหญ่ที่สุด แต่จริง ๆ แล้ว Fontations อาจใหญ่กว่าก็ได้
    มันถูกรวมอยู่ใน Chromium และถ้านับ dependency ด้วย ฐานการติดตั้งก็น่าจะกว้างกว่า
    จากข้อความอ้างอิงดูเหมือนว่า WhatsApp ไม่ได้ใช้ libsignal โดยตรง

    • สำหรับข้อมูลเพิ่มเติม Wamedia ถูกรวมอยู่ในแอปหลักของ Meta และถูกดีพลอยบน iOS, Android, Desktop และ Web
    • ใน Chromium เองก็มี ไลบรารี Rust อยู่แล้วหลายตัว
      เช่น image-png, CrabbyAvif, qr_code, icu4x
  • การที่โค้ดลดจาก 160,000 บรรทัดเหลือ 90,000 บรรทัดก็ดีอยู่แล้ว แต่สิ่งที่น่าสนใจกว่าคือ กลยุทธ์การทยอยปล่อยแบบขนาน
    การรันเวอร์ชัน Rust กับ C++ พร้อมกัน แล้วตรวจสอบความเท่าเทียมด้วย differential fuzzing เป็นแนวทางที่สมจริงมาก
    บนไคลเอนต์มือถือ ขนาดไบนารี เป็นเรื่องสำคัญ และก็น่าประทับใจที่พวกเขาลงทุนกับ tooling ฝั่ง build

    • สงสัยว่าเขาใช้ no_std หรือจัดองค์ประกอบ standard library ใหม่หรือไม่
      อาจเป็น optimization ที่ทำได้เฉพาะบน nightly build
  • ส่วนที่ยากที่สุดของการ rewrite แบบนี้ ไม่ใช่ตัว implementation ใน Rust เอง แต่เป็นการ คงความเข้ากันได้กับบั๊กของ parser เดิม
    ไฟล์มีเดียจริงมักจะมีรูปแบบที่ผิดพลาดอยู่บ่อย ๆ ถ้า parse แบบเข้มงวดเกินไป ข้อมูลของผู้ใช้ก็จะพัง
    ในทางปฏิบัติ differential fuzzing แทบเป็นวิธีเดียวที่ใช้ได้จริง

    • ดูเหมือนว่า Wamedia จะออกแบบมาโดยตั้งใจ ไม่ ให้คงความเข้ากันได้กับบั๊กเดิม
    • อันนี้ทำให้นึกว่าอาจเป็น คอมเมนต์ที่ AI เขียน
  • ที่บอกว่า WhatsApp คือการดีพลอย Rust ที่ใหญ่ที่สุด ก็คงเพราะมันรันอยู่บน อุปกรณ์มากกว่า Windows 11
    แต่ก็ยังน่าสงสัยว่า WhatsApp ใช้ libsignal โดยตรงหรือไม่

    • WhatsApp ไม่ได้ใช้ libsignal
      ตัว Android เองก็มี โค้ดที่พัฒนาด้วย Rust อยู่มากแล้ว และในอุปกรณ์ embedded ก็ถูกใช้อย่างแพร่หลายเช่นกัน
    • ถ้าดูวิดีโอ Microsoft is Getting Rusty จะเห็นว่าการนำ Rust มาใช้ส่วนใหญ่เกิดขึ้นทางฝั่ง Azure
      ส่วน Windows ก็ยังคงเน้น C/C++ เป็นหลัก
  • มีการบอกว่าการนำ Rust standard library เข้ามาทำให้ ขนาดไบนารีเพิ่มขึ้น แต่ไม่ได้ระบุชัดว่าแก้ปัญหาอย่างไร

    • น่าจะใช้ no_std ในส่วนที่ทำได้
      คอมมิตที่เกี่ยวข้อง: commit1, commit2
    • มีโอกาสสูงว่าพวกเขายอมรับ overhead ราว 300KB
      ปัญหาไม่ได้อยู่ที่ขนาดอย่างเดียว แต่คือ dependency ของ Rust ที่ซ้ำซ้อน
      ใน build ที่ผสม C++ กับ Rust ต่างฝ่ายต่างรวม libstd ของตัวเอง จึงต้องมีระบบ build แบบรวมศูนย์อย่าง Bazel
    • ในความเป็นจริง พวกเขาลงทุนกับการ optimize ระบบ build ไปมาก
      ตอนแรกยอมรับ overhead ราว 200KiB แต่พอ ย้ายไป Buck2 ก็ลดได้ทั้งขนาดและเวลา build
      ด้วยอานิสงส์จาก optimization ใหม่ของ clang และการปรับปรุง LTO
    • ถ้าต้องการดูเป็นข้อมูลอ้างอิง ก็มีแนวทางแบบ min-sized-rust
    • โดยรวมแล้วให้ความรู้สึกว่าเป็นบทความเชิง PR มากกว่าจะลงรายละเอียดเชิงเทคนิค
  • สงสัยว่า Signal ทำอะไรคล้าย ๆ กันหรือไม่
    libsignal เขียนด้วย Rust ก็จริง แต่ส่วนอื่น ๆ ยังไม่ค่อยทราบ

  • มีข้อความว่า “ให้บริการ end-to-end encryption แก่ผู้ใช้ 3 พันล้านคนโดยค่าเริ่มต้น” แต่ก็เคยมีข่าวว่าพวกเขาอ่านข้อความได้

    • คำว่า “ค่าเริ่มต้น (default)” น่าจะเป็นประเด็นสำคัญ
      Skype เองก็เข้ารหัสโดยค่าเริ่มต้นเหมือนกัน แต่ก็ปิดได้ตามการตั้งค่าฝั่งเซิร์ฟเวอร์
    • การเข้ารหัสทั้งหมดสุดท้ายก็ขึ้นอยู่กับว่า ใครคือปลายทางจริง ๆ
      ประเด็นคือคุณ เชื่อได้หรือไม่ ว่า Meta จะไม่แอบดูข้อมูล
  • เป็นเรื่องน่าขันที่ Meta ขยันกับเรื่องอื่น แต่กลับไม่ยอมจัดการฟิชชิงหรือ การโกงด้วยบัตรเติมเงินล่วงหน้า

  • น่าประทับใจที่การนำ Rust มาใช้ช่วยลดบั๊กได้มาก

    • ความเสถียรของ Rust ไม่ได้มาจากแค่การ ป้องกันข้อผิดพลาดด้านหน่วยความจำ เท่านั้น
      C++ มี undefined behavior (UB) อยู่มากมาย แต่ Rust ปิดกั้นสิ่งเหล่านี้ในระดับโครงสร้าง
      ด้วย type system ที่แข็งแรง ความน่าเชื่อถือจึงดีขึ้นอย่างมาก