SHARE THE PERSPECTIVE
เช็กซัมเทียบไบต์กับค่าอ้างอิง ลายเซ็นผูกความสมบูรณ์เข้ากับกุญแจ ทั้งสองอย่างไม่สามารถพิสูจน์ความปลอดภัยของซอฟต์แวร์ได้ด้วยตัวเอง

ก่อนติดตั้ง APK ของ Android ให้แยกการตรวจสอบสามอย่างออกจากกัน: ไฟล์นี้ตรงกับรุ่นที่คาดไว้หรือไม่? มีการลงนามด้วยกุญแจที่คาดไว้หรือไม่? ผู้สร้างบิลด์อิสระสามารถสร้างผลลัพธ์เดียวกันจากซอร์สโค้ดที่ระบุได้หรือไม่? เช็กซัม SHA-256, ลายเซ็น APK และบิลด์ที่สร้างซ้ำได้ตอบคำถามเหล่านี้ในคนละแง่มุม

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

การตรวจสอบแต่ละวิธียืนยันอะไรได้บ้าง

การตรวจสอบ ผลลัพธ์ที่เป็นประโยชน์ ข้อจำกัดสำคัญ
ค่าไดเจสต์ SHA-256 ของไฟล์ ไบต์ในไฟล์ของคุณตรงกับค่าไดเจสต์ที่เชื่อถือได้ค่าหนึ่ง ผู้โจมตีที่แทนที่ได้ทั้งไฟล์และไดเจสต์สามารถทำให้การเปรียบเทียบนี้ใช้ป้องกันไม่ได้
การตรวจสอบลายเซ็น APK ลายเซ็นของแพ็กเกจผ่านการตรวจสอบด้วยใบรับรองการลงนามของแพ็กเกจนั้น ต้องยืนยันว่ากุญแจลงนามใดคือกุญแจที่คาดไว้ ความถูกต้องของลายเซ็นเพียงอย่างเดียวไม่ได้ยืนยันตัวตนของผู้เผยแพร่
การเปรียบเทียบบิลด์ที่สร้างซ้ำได้ สามารถสร้างผลลัพธ์ที่ระบุขึ้นใหม่จากอินพุตที่มีเอกสารกำกับ การที่ซอร์สโค้ดกับไบนารีตรงกันไม่ได้พิสูจน์ว่าซอร์สโค้ดปลอดภัย
การทบทวนความปลอดภัย มีการประเมินประเด็นเฉพาะด้านการออกแบบหรือการนำไปใช้งาน ขอบเขต เวอร์ชัน ข้อค้นพบ และปัญหาที่ยังไม่ได้แก้ไขล้วนมีความสำคัญ

Android กำหนดให้ APK ต้องมีการลงนามจึงจะติดตั้งและอัปเดตได้ เมื่อใช้ Play App Signing ทาง Google สามารถจัดการกุญแจลงนามของแอปและสร้าง APK สำหรับแจกจ่ายจากแอปบันเดิลได้ สิ่งเหล่านี้เป็นรูปแบบการมอบความไว้วางใจที่มีเอกสารระบุไว้ ไม่ใช่หลักฐานว่าตัวกลางรายใดก็สามารถแอบเปลี่ยนแพ็กเกจโดยยังคงลายเซ็นที่ถูกต้องไว้ได้ ดู คู่มือการลงนามแอปของ Android

ขั้นที่ 1: ระบุผลลัพธ์จากการบิลด์ให้ตรงตัว

บันทึกเวอร์ชันแอป ช่องทางเผยแพร่ ชื่อไฟล์ และรูปแบบย่อยสำหรับแพลตฟอร์มที่ต้องการ ใช้หน้าดาวน์โหลดอย่างเป็นทางการของผู้เผยแพร่ ไม่ใช่เช็กซัมที่คัดลอกมาจากข้อความที่ไม่ได้ร้องขอซึ่งส่ง APK มาให้คุณในคราวเดียวกัน

APK ที่ดาวน์โหลดจากผู้เผยแพร่โดยตรงอาจต่างจาก APK ที่ร้านแอปสร้างขึ้นสำหรับอุปกรณ์เครื่องหนึ่ง เวอร์ชัน สถาปัตยกรรม วิธีจัดแพ็กเกจ หรือรูปแบบการลงนามที่ต่างกันอาจทำให้ค่าแฮชของไฟล์ต่างกันได้โดยมีเหตุผลที่ถูกต้อง ก่อนถือว่าความไม่ตรงกันเป็นหลักฐานการดัดแปลง ให้แน่ใจก่อนว่ากำลังเปรียบเทียบผลลัพธ์ชนิดเดียวกัน

คำถามที่ควรถามในทางปฏิบัติคือ: ค่าที่คาดไว้มาจากไหน และเหตุใดฉันจึงเชื่อถือแหล่งที่มานั้น? การคำนวณแฮชแบบออฟไลน์ไม่ได้แก้ปัญหาเรื่องความน่าเชื่อถือของไดเจสต์ที่ได้มาทางออนไลน์

ขั้นที่ 2: คำนวณ SHA-256 บนเครื่องของคุณ

แทนที่ messenger.apk ด้วยชื่อไฟล์ที่คุณดาวน์โหลด ตัวอย่างเหล่านี้อ่านไฟล์เท่านั้น ไม่ได้ติดตั้งไฟล์

Linux:

sha256sum messenger.apk

macOS:

shasum -a 256 messenger.apk

พรอมต์คำสั่งของ Windows:

certutil -hashfile messenger.apk SHA256

เปรียบเทียบไดเจสต์ทั้งค่า โดยละเลยได้เฉพาะช่องว่างที่ใช้ในการแสดงผลและความต่างระหว่างตัวอักษรพิมพ์ใหญ่กับพิมพ์เล็ก อย่าเปรียบเทียบเพียงไม่กี่ตัวแรกหรือไม่กี่ตัวท้าย เก็บไดเจสต์ที่คาดไว้พร้อมข้อมูลรุ่นเผยแพร่และเวอร์ชัน เพื่อให้ทำการเปรียบเทียบซ้ำได้

หากค่าต่างกัน ให้หยุดก่อนติดตั้ง ตรวจสอบผลลัพธ์จากการบิลด์และเวอร์ชัน ดาวน์โหลดใหม่จากแหล่งที่เชื่อถือได้หากเหมาะสม และสอบถามผู้เผยแพร่เกี่ยวกับความไม่ตรงกันที่ยังอธิบายไม่ได้ อย่า “แก้” เช็กซัมที่คาดไว้เพื่อให้ตรงกับไฟล์ที่บังเอิญได้รับมา

ขั้นที่ 3: ตรวจสอบลายเซ็น APK

สำหรับผู้ใช้ที่มี Android SDK Build Tools นั้น เอกสาร apksigner ของ Google อธิบายการตรวจสอบลายเซ็นและการแสดงข้อมูลใบรับรองไว้ดังนี้:

apksigner verify --verbose --print-certs messenger.apk

การตรวจสอบควรสำเร็จสำหรับแพลตฟอร์มที่ APK รองรับ เปรียบเทียบข้อมูลใบรับรองของผู้ลงนามกับบันทึกการเผยแพร่ที่เชื่อถือได้ หรือประวัติลำดับการสืบทอดกุญแจลงนามที่ผู้เผยแพร่บันทึกไว้ ลายเซ็นที่สร้างด้วยกุญแจที่ไม่คุ้นเคยไม่ได้กลายเป็นสิ่งน่าเชื่อถือเพียงเพราะมีคำว่า “ตรวจสอบแล้ว” การเปลี่ยนกุญแจลงนามอย่างถูกต้องก็ต้องมีหลักฐานเช่นกัน ไม่ใช่เพียงคำสั่งให้มองข้ามค่าที่ไม่ตรงกัน

ไดเจสต์ SHA-256 ของไฟล์ APK กับลายนิ้วมือ SHA-256 ของใบรับรองการลงนามเป็นคนละค่า อย่านำค่าหนึ่งไปเปรียบเทียบกับอีกค่าหนึ่ง

ขั้นที่ 4: มองหาหลักฐานของบิลด์ที่สร้างซ้ำได้

คำกล่าวอ้างว่าสร้างบิลด์ซ้ำได้ต้องระบุรีวิชันของซอร์สโค้ด สภาพแวดล้อมการบิลด์ คำแนะนำ และผลลัพธ์เป้าหมายอย่างชัดเจน บุคคลอิสระควรสามารถสร้างผลลัพธ์นั้นขึ้นใหม่และเปรียบเทียบผลได้ คำนิยามของโครงการ Reproducible Builds กำหนดให้อินพุตเหล่านี้เป็นส่วนหนึ่งของคำกล่าวอ้าง

สำหรับแอปส่งข้อความ หลักฐานการเผยแพร่ที่เป็นประโยชน์ ได้แก่ แท็กของซอร์สโค้ด เวอร์ชันของส่วนพึ่งพาและชุดเครื่องมือที่ตรึงไว้ คำแนะนำการบิลด์ และผลการเปรียบเทียบโดยบุคคลอิสระ ให้ถามว่าเปรียบเทียบอะไรกันแน่: ผลลัพธ์ที่ยังไม่ได้ลงนาม, APK ที่ลงนามแล้ว หรือเนื้อหาบางส่วนในแพ็กเกจ อย่าสรุปว่าสร้างซ้ำได้เพียงเพราะมีการเผยแพร่ซอร์สโค้ดและค่าแฮชของไฟล์ดาวน์โหลด

ความสามารถในการสร้างซ้ำช่วยเสริมความเชื่อมโยงระหว่างซอร์สโค้ดที่ผ่านการทบทวนกับโค้ดที่แจกจ่าย แต่ไม่ได้ทำให้การนำไปใช้งานที่ยังไม่ผ่านการทบทวนกลายเป็นโปรโตคอลที่ปลอดภัย และไม่ได้พิสูจน์ว่าโทรศัพท์ที่กำลังทำงานอยู่ไม่ถูกบุกรุก

Proof Lab ของ Livara มีบทบาทตรงไหน

Proof Lab ของ Livara ให้คุณคำนวณแฮช APK บนเครื่องแล้วเปรียบเทียบกับไดเจสต์ที่เผยแพร่ไว้ การสาธิตด้านวิทยาการเข้ารหัสลับในนั้นมีขอบเขตแคบกว่าการตรวจสอบโปรโตคอลส่งข้อความทั้งระบบ ใช้การตรวจแฮชตามวัตถุประสงค์ที่ระบุไว้ ควบคู่กับข้อมูลรุ่นเผยแพร่และการลงนามที่คาดหวัง อย่าถือว่าเป็นหลักฐานอิสระว่าสร้างบิลด์ซ้ำได้หรือไม่มีแบ็กดอร์

แบบจำลองภัยคุกคาม ระบุข้อจำกัดไว้อย่างชัดเจนสำหรับกรณีที่ทั้ง APK และไดเจสต์ที่แสดงอยู่สามารถถูกแทนที่ได้ นี่คือเหตุผลที่แหล่งที่มาของค่าอ้างอิงสำคัญพอ ๆ กับการคำนวณอย่างถูกต้อง

คำถามที่พบบ่อย

เช็กซัมที่ตรงกันพิสูจน์ว่า APK ปลอดภัยหรือไม่?

ไม่ การตรวจนี้ยืนยันเพียงว่าตรงกับไดเจสต์อ้างอิง ภายใต้สมมติฐานว่าแหล่งอ้างอิงน่าเชื่อถือและคุณสมบัติด้านความปลอดภัยของแฮชยังใช้ได้ ไม่ได้ประเมินพฤติกรรมของโปรแกรม

หากเช็กซัมตรงกัน การตรวจลายเซ็นยังจำเป็นหรือไม่?

ยังจำเป็น การตรวจทั้งสองอย่างให้หลักฐานต่างกัน ลายเซ็นผูกความสมบูรณ์ของแพ็กเกจเข้ากับกุญแจ ส่วนไดเจสต์ของไฟล์ระบุลำดับไบต์ชุดใดชุดหนึ่ง

ไฟล์ที่ดาวน์โหลดจากร้านแอปต้องตรงกับค่าแฮช APK บนเว็บไซต์หรือไม่?

เฉพาะกรณีที่ทั้งสองควรเป็นผลลัพธ์จากการบิลด์เดียวกันเท่านั้น ให้ตรวจสอบช่องทางเผยแพร่ เวอร์ชัน และวิธีจัดแพ็กเกจก่อน ความไม่ตรงกันที่ยังอธิบายไม่ได้ควรได้รับการตรวจสอบเพิ่มเติม ไม่ใช่การกล่าวหาโดยอัตโนมัติหรือการยอมรับโดยอัตโนมัติ

การตรวจเหล่านี้ตรวจพบสปายแวร์ที่อยู่ในโทรศัพท์แล้วได้หรือไม่?

ไม่ได้ การตรวจเหล่านี้ประเมินผลลัพธ์ที่ใช้สำหรับติดตั้ง ไม่ใช่ทุกองค์ประกอบของสถานะการทำงานปัจจุบันบนอุปกรณ์

ตรวจสอบบิลด์ของคุณใน Proof Lab
CONTINUE THE THREADAndroid & device security ↗
YOU’VE REACHED THE ENDBack to the reading room ↗