หมวดหมู่ OWASP: MASVS-CODE: คุณภาพโค้ด
ภาพรวม
การสำรองข้อมูลแอปมีจุดประสงค์เพื่อเก็บข้อมูลของผู้ใช้ไว้เพื่อให้กู้คืนข้อมูลไปยังอุปกรณ์เครื่องใหม่ได้ภายหลัง หรือในกรณีที่ข้อมูลสูญหาย คําแนะนําด้านความปลอดภัยที่มีอยู่เกี่ยวกับการสํารองข้อมูลแอปมีความซับซ้อนแตกต่างกันไปตามเวอร์ชัน Android และผู้ผลิตอุปกรณ์ ประเด็นหลักคือคําแนะนําเหล่านี้มีจุดมุ่งหมายเพื่อไม่ให้ข้อมูลที่ละเอียดอ่อนรั่วไหล
ระบบการสำรองข้อมูล Android มาตรฐานเป็นโซลูชันที่ปลอดภัย มีประสิทธิภาพ และใช้งานง่ายที่สุดสำหรับแอปในการสำรองข้อมูลไปยังระบบคลาวด์หรือโอนข้อมูลไปยังอุปกรณ์เครื่องใหม่ผ่านการสำรองข้อมูลอัตโนมัติ (ซึ่งเปิดใช้โดยค่าเริ่มต้น ใช้งานได้ง่าย และขยายการให้บริการได้) และการสำรองข้อมูลแบบคีย์-ค่า เราขอแนะนำให้ใช้โซลูชันนี้เนื่องจากจะจัดเก็บข้อมูลสำรองที่ได้ไว้ในไดเรกทอรีที่แอปของบุคคลที่สามอื่นๆ เข้าถึงไม่ได้ รวมถึงอำนวยความสะดวกในการเข้ารหัสข้อมูลที่เก็บไว้ การเข้ารหัสระหว่างการรับส่ง และการกำหนดค่าที่อนุญาตให้ยกเว้นข้อมูลที่ละเอียดอ่อนจากการสำรองข้อมูล
แต่หากแอปใช้โซลูชันการสำรองข้อมูลที่ไม่อาศัยระบบการสำรองข้อมูล Android มาตรฐาน ก็อาจเพิ่มโอกาสที่จะเกิดความผิดพลาดซึ่งนำไปสู่การรั่วไหลของข้อมูลที่ละเอียดอ่อน ตัวอย่างโซลูชันการสำรองข้อมูลที่ไม่เป็นไปตามมาตรฐานซึ่งทำให้ข้อมูลผู้ใช้มีความเสี่ยงที่จะรั่วไหล ได้แก่ แอปที่เสนอความสามารถในการ "ส่งออก" หรือ "สำรองข้อมูล" ซึ่งสร้างสำเนาข้อมูลแอปในไดเรกทอรีที่แอปอื่นๆ อ่านได้ และทำให้ข้อมูลมีความเสี่ยงที่จะรั่วไหล (โดยตรงหรือผ่านช่องโหว่อื่นๆ)
ผลกระทบ
การปฏิบัติตามคำแนะนำด้านความปลอดภัยเมื่อตั้งค่าการสำรองข้อมูลแอปจะช่วยป้องกันไม่ให้ข้อมูลที่ละเอียดอ่อนซึ่งอาจรวมอยู่ในข้อมูลสำรองรั่วไหล การเปิดเผยข้อมูลที่ละเอียดอ่อนอาจนำไปสู่การเปิดเผยข้อมูล การแอบอ้างเป็นผู้ใช้ และการสูญเสียทางการเงิน ทั้งนี้ขึ้นอยู่กับข้อมูลจริงและเจตนาของผู้โจมตี
การลดปัญหา
ใช้ระบบการสำรองข้อมูล Android มาตรฐาน
ระบบการสำรองข้อมูล Android มาตรฐานจะเข้ารหัสข้อมูลสำรองทั้งในระหว่างการรับส่งและขณะที่ไม่มีการเคลื่อนไหวเสมอ การเข้ารหัสนี้จะมีผลไม่ว่าคุณจะใช้ Android เวอร์ชันใดก็ตามและไม่ว่าอุปกรณ์จะมีหน้าจอล็อกหรือไม่ก็ตาม ตั้งแต่ Android 9 เป็นต้นไป หากอุปกรณ์ตั้งค่าหน้าจอล็อกไว้ ข้อมูลสำรองก็จะไม่ได้เข้ารหัสเท่านั้น แต่ยังเข้ารหัสด้วยคีย์ที่ Google ไม่รู้จัก (ข้อมูลลับของหน้าจอล็อกจะปกป้องคีย์การเข้ารหัสด้วย ดังนั้นจึงเปิดใช้การเข้ารหัสจากต้นทางถึงปลายทาง)
โดยทั่วไป โปรดอย่าลืมปฏิบัติตามหลักเกณฑ์ด้านพื้นที่เก็บข้อมูลและความปลอดภัย
หากข้อมูลสํารองมีข้อมูลที่ละเอียดอ่อนเป็นพิเศษ เราขอแนะนําให้ยกเว้นข้อมูลนี้ หรือหากยกเว้นไม่ได้ ให้ใช้การเข้ารหัสจากต้นทางถึงปลายทางตามที่อธิบายไว้ในส่วนต่อไปนี้
การยกเว้นข้อมูลจากการสำรองข้อมูล
คุณระบุข้อมูลที่จะยกเว้นจากข้อมูลสำรองได้โดยใช้ไฟล์กฎ ซึ่งโดยทั่วไปจะเรียกว่า backup_rules.xml
และวางไว้ในโฟลเดอร์แอป res/xml
การกำหนดค่ากฎการสำรองข้อมูลจะแตกต่างกันไปบ้างโดยขึ้นอยู่กับเวอร์ชัน Android ที่ใช้
- สำหรับ Android เวอร์ชัน 12 (API ระดับ 31) ขึ้นไป ให้เพิ่มแอตทริบิวต์
android:dataExtractionRules
ลงในองค์ประกอบ<application>
ภายในAndroidManifest.xml
ดังนี้ - XML
xml <application android:name="com.example.foo" android:dataExtractionRules="@xml/backup_rules_extraction"> … </application>
จากนั้นกําหนดค่าไฟล์ backup_rules.xml
ตามข้อกําหนดด้านการรักษาข้อมูลและความปลอดภัยของแอปพลิเคชัน โดยทําตามรูปแบบการกําหนดค่าที่อัปเดต
รูปแบบที่จําเป็นสําหรับการกําหนดค่าไฟล์ backup_rules.xml
ช่วยให้นักพัฒนาแอปกําหนดกฎการสํารองข้อมูลเองได้สําหรับทั้งการโอนไปยังระบบคลาวด์และการโอนจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง (D2D) หากไม่ได้ตั้งค่าแอตทริบิวต์ <device-transfer>
ระบบจะโอนข้อมูลแอปพลิเคชันทั้งหมดในระหว่างการย้ายข้อมูล D2D สิ่งสำคัญคือ แม้ว่าแอปพลิเคชันเป้าหมายจะกำหนดเป้าหมายเป็น Android 12 ขึ้นไป คุณควรระบุไฟล์แยกต่างหากที่มีชุดกฎการสำรองข้อมูลเพิ่มเติมสำหรับอุปกรณ์ที่ใช้ Android 11 (API ระดับ 30) หรือต่ำกว่าเสมอ
- สำหรับ Android เวอร์ชัน 11 และต่ำกว่า ให้เพิ่มแอตทริบิวต์
android:fullBackupContent
ลงในองค์ประกอบ<application>
ภายในAndroidManifest.xml
ดังนี้ - xml
xml <application android:name="com.example.foo" android:fullBackupContent="@xml/backup_rules_full"> … </application>
จากนั้นกำหนดค่าไฟล์ backup_rules.xml
ตามข้อกำหนดด้านความต่อเนื่องของข้อมูลและความปลอดภัยของแอปพลิเคชัน โดยใช้ไวยากรณ์ที่รายงานในบทความสำรองข้อมูลผู้ใช้
กำหนดให้ใช้การเข้ารหัสจากต้นทางถึงปลายทาง
หากยกเว้นข้อมูลที่ละเอียดอ่อนออกจากข้อมูลสำรองไม่ได้ เราขอแนะนำให้ใช้การเข้ารหัสจากต้นทางถึงปลายทาง ซึ่งหมายความว่าจะอนุญาตการสำรองข้อมูลใน Android 9 ขึ้นไปเท่านั้นและเมื่อตั้งค่าหน้าจอล็อกแล้วเท่านั้น ซึ่งทำได้โดยใช้requireFlags="clientSideEncryption"
Flag ซึ่งต้องเปลี่ยนชื่อเป็น disableIfNoEncryptionCapabilities
และตั้งค่าเป็น true
ตั้งแต่วันที่ Android 12 เป็นต้นไป
หากใช้ระบบการสำรองข้อมูล Android มาตรฐานไม่ได้
หากใช้ระบบการสำรองข้อมูล Android มาตรฐานไม่ได้ การจัดเก็บข้อมูลสำรองอย่างปลอดภัย รวมถึงการระบุข้อมูลที่ควรยกเว้นจากการสำรองข้อมูลจะมีความซับซ้อนมากขึ้น ซึ่งต้องระบุที่ระดับโค้ด จึงมีแนวโน้มที่จะเกิดข้อผิดพลาดและเสี่ยงต่อการรั่วไหลของข้อมูล ในกรณีนี้ เราขอแนะนําให้ทดสอบการติดตั้งใช้งานเป็นประจําเพื่อให้แน่ใจว่าไม่มีการเปลี่ยนแปลงลักษณะการทํางานของการสํารองข้อมูลตามที่คาดไว้
แหล่งข้อมูล
- คำอธิบายแอตทริบิวต์ allowBackup
- การเข้ารหัสตามไฟล์
- การเปลี่ยนแปลงลักษณะการโอน D2D
- สำรองข้อมูลผู้ใช้ด้วยการสำรองข้อมูลอัตโนมัติ
- สำรองข้อมูลคู่คีย์-ค่าด้วย Android Backup Service
- ควบคุมการสำรองข้อมูลใน Android 12 ขึ้นไป
- ควบคุมการสำรองข้อมูลใน Android 11 และต่ำกว่า
- ทำความเข้าใจเกี่ยวกับ PII ในสัญญาและนโยบายของ Google
- ทดสอบการสำรองและกู้คืนข้อมูล
- วิทยาการเข้ารหัสลับ
- ระบบ Android Keystore
- ADB
- ตัวเลือกสำหรับนักพัฒนาแอป