แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยของแอป

ส่วนนี้ประกอบด้วยคำแนะนำเพื่อความปลอดภัยของแอปบนอุปกรณ์ Android

การตรวจสอบซอร์สโค้ด

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

  • ปฏิบัติตามคำแนะนำด้านความปลอดภัยที่ครอบคลุมเมื่อดำเนินการตรวจสอบเพื่อให้มั่นใจว่าครอบคลุม ใช้มาตรฐานภายในหรือภายนอกที่เกี่ยวข้องเพื่อให้แน่ใจว่าการตรวจสอบมีความสอดคล้องและครบถ้วน
  • เรียกใช้ linter เช่น Android Studio linter บนโค้ดของแอปทั้งหมดโดยใช้ Android SDK และแก้ไขปัญหาที่ระบุ
  • วิเคราะห์โค้ดแบบเนทีฟโดยใช้เครื่องมืออัตโนมัติที่สามารถตรวจจับปัญหาการจัดการหน่วยความจำ เช่น บัฟเฟอร์ล้นและข้อผิดพลาดแบบออฟไลน์
  • ระบบบิลด์ Android รองรับตัวฆ่าเชื้อ LLVM จำนวนมาก เช่น AddressSanitizer และ UndefiorSanitizer ซึ่งสามารถใช้สำหรับการวิเคราะห์รันไทม์ของปัญหาที่เกี่ยวข้องกับหน่วยความจำ เมื่อรวมกับการคลุมเครือที่รองรับใน Android ผ่าน libFuzzer เครื่องมือฆ่าเชื้อสามารถค้นพบกรณีขอบที่ผิดปกติซึ่งต้องมีการตรวจสอบเพิ่มเติม
  • ผู้ประเมินความปลอดภัยที่มีความรู้ควรตรวจสอบรหัสที่มีความเสี่ยงสูงกว่า เช่น การเข้ารหัสลับ การประมวลผลการชำระเงิน และการประมวลผล PII

การทดสอบอัตโนมัติ

การทดสอบอัตโนมัติสามารถช่วยตรวจจับปัญหาด้านความปลอดภัยได้หลากหลาย และควรดำเนินการอย่างสม่ำเสมอ

  • ใช้งาน CTS เวอร์ชันล่าสุดเป็นประจำตลอดกระบวนการพัฒนาเพื่อตรวจพบปัญหาตั้งแต่เนิ่นๆ และลดเวลาในการแก้ไข Android ใช้ CTS เป็นส่วนหนึ่งของการผสานรวมอย่างต่อเนื่องในกระบวนการสร้างอัตโนมัติของเรา ซึ่งสร้างหลายครั้งต่อวัน
  • ทำการทดสอบความปลอดภัยของอินเทอร์เฟซโดยอัตโนมัติ รวมถึงการทดสอบด้วยอินพุตที่มีรูปแบบไม่ถูกต้อง (การทดสอบแบบฟัซซี่) ระบบบิลด์ของ Android รองรับ libFuzzer สำหรับการเขียนการทดสอบแบบคลุมเครือ

การสแกนช่องโหว่

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

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

การใช้งานที่อาจเป็นอันตราย

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

หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับแอปที่อาจเป็นอันตรายและวิธีที่ Google ต่อสู้กับแอปเหล่านี้ใน Play Store โปรดดู เอกสารสำหรับนักพัฒนาซอฟต์แวร์ Google Play Protect

การติดตั้งแอปและการอนุญาต

สิทธิ์ที่มากเกินไปสำหรับแอปที่ติดตั้งไว้ล่วงหน้าอาจทำให้เกิดความเสี่ยงด้านความปลอดภัยได้ จำกัดแอปที่ติดตั้งล่วงหน้าไว้ตามสิทธิ์ที่จำเป็นขั้นต่ำ และตรวจสอบให้แน่ใจว่าแอปเหล่านั้นไม่สามารถเข้าถึงสิทธิ์หรือสิทธิ์ที่ไม่จำเป็น การอนุญาตของแอปอธิบายไว้ใน AndroidManifest.xml

  • อย่าให้สิทธิ์หรือสิทธิพิเศษที่ไม่จำเป็นแก่แอปที่ติดตั้งไว้ล่วงหน้า ตรวจสอบแอปที่มีสิทธิ์ของระบบอย่างละเอียด เนื่องจากแอปอาจมีสิทธิ์ที่ละเอียดอ่อนมาก
  • ตรวจสอบให้แน่ใจว่าสิทธิ์ทั้งหมดที่ร้องขอนั้นเกี่ยวข้องและจำเป็นสำหรับการทำงานของแอพนั้น ๆ
  • ตรวจสอบให้แน่ใจว่ามีการเปิดเผยผู้ใช้สำหรับแอปที่ติดตั้งล่วงหน้าทั้งหมดที่ใช้สิทธิ์ INSTALL_PACKAGES
  • ตรวจสอบให้แน่ใจว่านักพัฒนามีภาระผูกพันตามสัญญาที่จะไม่ติดตั้งแอพใด ๆ เป็น UID 0
  • ประเมินสิทธิ์ที่ประกาศไว้ในไฟล์ Manifest ของแอปทั้งหมดที่จะติดตั้งผ่านเครือข่ายของนักพัฒนา
  • ตรวจสอบให้แน่ใจว่านักพัฒนาซอฟต์แวร์มีหน้าที่ตามสัญญาในการสแกน URL ดาวน์โหลดทั้งหมดของแอปตัวอัปเดตอัตโนมัติและตัวติดตั้งด้วย Google Safe Browsing API ก่อนที่จะให้บริการแอปไปยังอุปกรณ์

การลงนามแอป

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

  • ตรวจสอบให้แน่ใจว่าแอปไม่ได้ลงนามด้วยคีย์ที่เป็นที่รู้จักต่อสาธารณะ เช่น คีย์นักพัฒนา AOSP
  • ตรวจสอบให้แน่ใจว่าคีย์ที่ใช้ในการลงนามแอปได้รับการจัดการในลักษณะที่สอดคล้องกับแนวปฏิบัติมาตรฐานอุตสาหกรรมสำหรับการจัดการคีย์ที่ละเอียดอ่อน รวมถึงโมดูลความปลอดภัยของฮาร์ดแวร์ (HSM) ที่ให้การเข้าถึงที่จำกัดและตรวจสอบได้
  • ตรวจสอบให้แน่ใจว่าแอปไม่ได้ลงนามด้วยคีย์แพลตฟอร์ม การทำเช่นนี้จะทำให้แอปสามารถเข้าถึงสิทธิ์ลายเซ็นแพลตฟอร์มได้ ซึ่งมีประสิทธิภาพมากและมีวัตถุประสงค์เพื่อใช้โดยส่วนประกอบของระบบปฏิบัติการเท่านั้น แอประบบควรใช้สิทธิ์พิเศษ
  • ตรวจสอบให้แน่ใจว่าแอพที่มีชื่อแพ็คเกจเดียวกันไม่ได้เซ็นชื่อด้วยคีย์ที่แตกต่างกัน สิ่งนี้มักเกิดขึ้นเมื่อสร้างแอปสำหรับอุปกรณ์ต่าง ๆ โดยเฉพาะเมื่อใช้คีย์แพลตฟอร์ม หากแอปไม่ขึ้นอยู่กับอุปกรณ์ ให้ใช้คีย์เดียวกันในอุปกรณ์ต่างๆ หากแอปเป็นเฉพาะอุปกรณ์ ให้สร้างชื่อแพ็กเกจที่ไม่ซ้ำกันต่ออุปกรณ์และคีย์

การแยกแอปและกระบวนการ

โมเดลแซนด์บ็อกซ์ ของ Android มอบความปลอดภัยเพิ่มเติมให้กับแอปและกระบวนการต่างๆ เมื่อใช้อย่างถูกต้อง

การแยกกระบวนการรูท

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

  • ตรวจสอบให้แน่ใจว่าอุปกรณ์รันโค้ดที่จำเป็นขั้นต่ำในฐานะรูท หากเป็นไปได้ ให้ใช้กระบวนการ Android ปกติแทนกระบวนการรูท หากกระบวนการต้องทำงานในฐานะรูทบนอุปกรณ์ ให้บันทึกกระบวนการในคำขอคุณสมบัติ AOSP เพื่อให้สามารถตรวจสอบแบบสาธารณะได้
  • หากเป็นไปได้ ควรแยกรหัสรูทออกจากข้อมูลที่ไม่น่าเชื่อถือ และเข้าถึงได้ผ่านการสื่อสารระหว่างกระบวนการ (IPC) ตัวอย่างเช่น ลดฟังก์ชันการทำงานของรูทลงในบริการขนาดเล็กที่เข้าถึงได้ผ่าน Binder และเปิดเผยบริการที่มีสิทธิ์ลายเซ็นไปยังแอปที่มีสิทธิ์ต่ำหรือไม่มีเลยในการจัดการการรับส่งข้อมูลเครือข่าย
  • กระบวนการรูทต้องไม่ฟังบนซ็อกเก็ตเครือข่าย
  • กระบวนการรูทต้องไม่รวมรันไทม์เพื่อวัตถุประสงค์ทั่วไป เช่น Java VM)

กำลังแยกแอประบบ

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

  • ตรวจสอบให้แน่ใจว่าอุปกรณ์ใช้รหัสขั้นต่ำที่จำเป็นเป็นระบบ หากเป็นไปได้ ให้ใช้กระบวนการ Android ที่มี UID ของตัวเอง แทนที่จะนำ UID ของระบบกลับมาใช้ใหม่
  • หากเป็นไปได้ ควรแยกรหัสระบบออกจากข้อมูลที่ไม่น่าเชื่อถือ และเปิดเผย IPC ให้กับกระบวนการอื่นๆ ที่เชื่อถือได้เท่านั้น
  • กระบวนการของระบบต้องไม่ฟังบนซ็อกเก็ตเครือข่าย นี่เป็นข้อกำหนดของ CTS

กระบวนการแยก

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

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