Tauri App โดน Windows มองเป็นโทรจัน: แก้ไขอย่างไร
แอปพลิเคชันจัดการบัญชี Roblox บน Windows ถูก Microsoft ขึ้นเตือนภัยว่าเป็นโทรจันด้วยเหตุผลด้าน AI นักพัฒนาจึงแกะรอยหาตัวการด้วยวิธี Bisection และพบว่าไลบรารีเข้ารหัสคือต้นเหตุ

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- แอป Roblox Account Manager ถูก Microsoft จัดว่าเป็นโทรจัน Trojan:Win32/Wacatac.B!ml โดยโมเดล Machine Learning
- นักพัฒนาใช้การทำ Git Bisect ร่วมกับ VirusTotal API เพื่อค้นหาคอมมิตที่เป็นต้นตอของปัญหา
- สาเหตุเกิดจากการใช้ libsodium ผ่าน sodiumoxide ซึ่งมีลักษณะการทำงานใกล้เคียงกับมัลแวร์ในสายตา AI
- แก้ไขโดยการเปลี่ยนไปใช้ไลบรารี RustCrypto บริสุทธิ์ พร้อมตั้งค่า Cargo.toml เพื่อเร่งความเร็วในการคอมไพล์
นักพัฒนาแอปพลิเคชันเดสก์ท็อปรายหนึ่งต้องเผชิญกับปัญหาเมื่อโปรแกรมจัดการบัญชี Roblox ของเขาถูกระบบความปลอดภัยจาก Microsoft มองว่าเป็นมัลแวร์ประเภท Trojan:Win32/Wacatac.B!ml ทั้งที่ชุดคำสั่งไม่ได้มีการเปลี่ยนแปลงพฤติกรรมใดๆ เพิ่มเติม โดยตัวแอปพลิเคชันอย่าง RAM หรือ Roblox Account Manager นี้ พัฒนาขึ้นด้วยภาษา Rust ร่วมกับ Tauri 2 และ React สำหรับจัดการบัญชีเกมหลายบัญชีพร้อมกัน
ธรรมชาติของแอปพลิเคชันที่มีการจัดเก็บคุกกี้เซสชัน เปิดกระบวนการทำงานหลายตัว ดึงหน้าต่างเกมขึ้นมาด้านหน้า และส่งชุดคำสั่งจำลองการกด ถือเป็นพฤติกรรมที่เครื่องมือตรวจจับแบบ Heuristic มองว่ามีความเสี่ยงอยู่แล้ว เมื่อมีการปล่อยอัปเดตเวอร์ชันหนึ่งออกมาและผู้ใช้เริ่มได้รับคำเตือนเกี่ยวกับไฟล์ .exe ผลการตรวจสอบจาก VirusTotal แสดงผลว่ามี 1 จาก 75 โปรแกรมตรวจจับที่มองว่าเป็นภัยคุกคาม ซึ่งลงท้ายด้วยรหัส !ml หมายความว่าเป็นผลลัพธ์จาก Machine Learning ที่ประเมินว่าไบนารีมีลักษณะคล้ายมัลแวร์ ไม่ใช่การตรวจพบรูปแบบลายเซ็นซิกเนเจอร์ที่เป็นที่รู้จัก

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
ในตอนแรกนักพัฒนาเชื่อว่าพฤติกรรมของแอปยังคงเหมือนเดิมและโมเดลอาจจะเปลี่ยนใจไปเอง แต่เมื่อทำการตรวจสอบอย่างจริงจังด้วยการใช้ Git Bisect ร่วมกับ VirusTotal API ซึ่งรองรับการส่งคำขอฟรี 4 ครั้งต่อนาทีและ 500 ครั้งต่อวัน โดยเขียนสคริปต์ขนาดเล็กเพื่อแฮชไฟล์ ค้นหารายงานเดิม และอัปโหลดเฉพาะเมื่อพบแฮชใหม่ ก็พบว่าคอมมิตที่มีปัญหาคือส่วนที่เพิ่มระบบเข้ารหัสสำหรับไฟล์บัญชีผู้ใช้ด้วย sodiumoxide ซึ่งเป็นไลบรารี Rust bindings สำหรับ libsodium
การที่ไลบรารี libsodium ทำการลิงก์โค้ดแบบ Static เข้ากับไบนารี ประกอบกับการที่แอปพลิเคชันมีการจัดเก็บข้อมูลรับรองและฉีดคำสั่ง ทำให้โมเดลจัดหมวดหมู่มันใกล้เคียงกับโปรแกรมเรียกค่าไถ่หรือแวร์แวร์ขโมยข้อมูล แม้ว่าตัวไลบรารีจะไม่ได้มีความบกพร่องก็ตาม เนื่องจากผู้ใช้งานมีไฟล์ที่เข้ารหัสอยู่แล้วบนดิสก์ การเปลี่ยนแปลงจึงต้องระมัดระวังเพื่อให้สามารถอ่านไฟล์เดิมไบต์ต่อไบต์ได้โดยไม่มีสะดุด
กรณีศึกษาชิ้นนี้สะท้อนให้เห็นความท้าทายใหม่ในยุคที่ระบบรักษาความปลอดภัยพึ่งพา Machine Learning มากขึ้น การตรวจจับไม่ได้มองแค่โค้ดอันตรายที่เป็นที่รู้จักอีกต่อไป แต่เป็นการประเมินความเสี่ยงจากบริบทเชิงพฤติกรรมและการคอมไพล์โค้ด ซึ่งนักพัฒนาซอฟต์แวร์โอเพนซอร์สอาจต้องรับมือกับความผิดพลาดจากระบบอัตโนมัติเหล่านี้บ่อยครั้งขึ้นในอนาคต
ทางออกที่เลือกคือการเปลี่ยนไปใช้ไลบรารีบริสุทธิ์จาก RustCrypto และจับคู่พารามิเตอร์ของ libsodium ทุกประการ โดยทดสอบด้วยการเข้ารหัสข้อมูลขนาดเล็กจากระบบเดิมและยืนยันว่าโค้ดชุดใหม่สามารถถอดรหัสออกมาได้อย่างถูกต้องแม่นยำ อย่างไรก็ตาม การใช้ Argon2 แบบบริสุทธิ์ในโหมด Debug ทำให้การประมวลผลช้าลงอย่างมากถึง 5.4 วินาทีต่อรอบ เทียบกับ 0.3 วินาทีในโหมดปรับแต่ง
เพื่อแก้ปัญหาเวลาในการทดสอบที่นานขึ้น นักพัฒนาได้เพิ่มการตั้งค่าในไฟล์ Cargo.toml เพื่อบังคับให้คอมไพเลอร์ทำการเพิ่มประสิทธิภาพการทำงานให้กับไลบรารีภายนอกแม้จะเป็นในโหมดพัฒนา ส่งผลให้เวลาในการรันชุดคำสั่งทดสอบของ Rust ลดลงจาก 230 วินาทีเหลือเพียง 41 วินาทีเท่านั้น ซึ่งรวดเร็วกว่าตอนที่ใช้ libsodium เสียอีก
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น