Android ปรับปรุงความสามารถและข้อเสนอด้านความปลอดภัยอย่างต่อเนื่อง ดูรายการการปรับปรุงตามรุ่นในการนําทางด้านซ้าย
Android 14
每个 Android 版本中都包含数十种安全增强功能,以保护用户。以下是 Android 14 中提供的一些主要安全增强功能:
- Android 10 中引入的硬件辅助 AddressSanitizer (HWASan) 是一款类似于 AddressSanitizer 的内存错误检测工具。Android 14 对 HWASan 进行了重大改进。如需了解它如何帮助防止 bug 进入 Android 版本,请访问 HWAddressSanitizer
- 在 Android 14 中,从与第三方共享位置数据的应用开始,系统运行时权限对话框现在包含一个可点击的部分,用于突出显示应用的数据分享做法,包括诸如以下信息:应用为什么可能会决定与第三方分享数据。
- Android 12 引入了在调制解调器级别停用 2G 支持的选项,以保护用户免受 2G 的过时安全模型固有的安全风险的影响。认识到停用 2G 对企业客户的重要性后,Android 14 在 Android Enterprise 中启用了此安全功能,以便 IT 管理员能够限制受管设备降级到 2G 连接。
- 开始支持拒绝未加密的移动网络连接,确保电路交换语音和短信流量始终会加密,并可防范被动无线拦截。详细了解 Android 的移动网络连接强化计划。
- 新增了对多个 IMEI 的支持
- 从 Android 14 开始,AES-HCTR2 是采用加速加密指令的设备的首选文件名加密模式。
- 移动网络连接
- 在 Android 安全中心添加了相关文档
- 如果您的应用以 Android 14 为目标平台并使用动态代码加载 (DCL) 功能,则必须将所有动态加载的文件标记为只读。否则,系统会抛出异常。我们建议应用尽可能避免动态加载代码,因为这样做会大大增加应用因代码注入或代码篡改而遭到入侵的风险。
Android 13
每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 13 中提供的一些主要安全增强功能:
- Android 13 添加了对多文档呈现的支持。 通过这个新的 Presentation Session 接口,应用可以执行多文档呈现,而现有 API 无法做到这一点。如需了解详情,请参阅身份凭据
- 在 Android 13 中,当且仅当源自外部应用的 intent 与其声明的 intent 过滤器元素匹配时,这些 intent 才会传送到导出的组件。
- Open Mobile API (OMAPI) 是一种标准 API,用于与设备的安全元件进行通信。在 Android 13 之前,只有应用和框架模块可以访问此接口。通过将其转换为供应商稳定版接口,HAL 模块还能够通过 OMAPI 服务与安全元件进行通信。 如需了解详情,请参阅 OMAPI 供应商稳定版接口。
- 从 Android 13-QPR 开始,共享 UID 被废弃。 使用 Android 13 或更高版本的用户应在其清单中添加 `android:sharedUserMaxSdkVersion="32"` 行。此条目可防止新用户获取共享 UID。如需详细了解 UID,请参阅应用签名。
- Android 13 添加了对密钥库对称加密基元的支持,例如支持 AES(高级加密标准)、HMAC(密钥哈希消息认证码)以及非对称加密算法(包括椭圆曲线加密、RSA2048、RSA4096 和曲线 25519 加密)
- Android 13(API 级别 33)及更高版本支持用于从应用发送非豁免通知的运行时权限。这可让用户控制他们会看到哪些权限通知。
- 针对请求访问所有设备日志的应用,添加了在每次使用时显示提示的功能,以便用户允许或拒绝授予访问权限。
- 推出了 Android 虚拟化框架 (AVF),它使用标准化 API 将不同的 Hypervisor 整合到一个框架下。 它提供安全、私密的执行环境,以便执行通过 Hypervisor 隔离的工作负载。
- 引入了 APK 签名方案 v3.1 所有使用 apksigner 的新密钥轮替都将默认使用 v3.1 签名方案,以便将 Android 13 及更高版本作为轮替目标。
Android 12
每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 12 中提供的一些主要安全增强功能:
- Android 12 引入了 BiometricManager.Strings API,它为使用 BiometricPrompt 进行身份验证的应用提供本地化的字符串。这些字符串旨在感知设备,并更明确地指定可以使用哪些身份验证类型。Android 12 还支持屏下指纹传感器
- 添加了对屏下指纹传感器的支持
- 引入了 Fingerprint Android 接口定义语言 (AIDL)
- 支持新的 Face AIDL
- 引入了 Rust 作为平台开发语言
- 添加了可供用户仅授权应用访问其大致位置信息的选项
- 当应用使用摄像头或麦克风时,现在状态栏上会显示隐私指示标志
- Android 的 Private Compute Core (PCC)
- 添加了用于停用 2G 支持的选项
Android 11
每个 Android 版本中都包含数十项用于保护用户的安全增强功能。如需查看 Android 11 中提供的一些主要安全增强功能的列表,请参阅 Android 版本说明。
Android 10
Android ทุกเวอร์ชันมีการปรับปรุงด้านความปลอดภัยหลายสิบรายการเพื่อปกป้องผู้ใช้ Android 10 มีการปรับปรุงด้านความปลอดภัยและความเป็นส่วนตัวหลายอย่าง ดูรายการการเปลี่ยนแปลงทั้งหมดใน Android 10 ได้ในบันทึกประจำรุ่นของ Android 10
ความปลอดภัย
BoundsSanitizer
Android 10 ใช้ BoundsSanitizer (BoundSan) ในบลูทูธและโปรแกรมเปลี่ยนรหัส BoundSan ใช้โปรแกรมตรวจสอบขอบเขตของ UBSan การลดความเสี่ยงนี้จะเปิดใช้งานในระดับโมดูล ซึ่งช่วยรักษาความปลอดภัยให้กับคอมโพเนนต์ที่สำคัญของ Android และไม่ควรปิดใช้ BoundSan เปิดใช้ในตัวแปลงรหัสต่อไปนี้
libFLAClibavcdeclibavcenclibhevcdeclibmpeg2libopuslibvpxlibspeexresamplerlibvorbisideclibaaclibxaac
หน่วยความจําแบบเรียกใช้ได้อย่างเดียว
โดยค่าเริ่มต้น ส่วนโค้ดที่เรียกใช้งานได้สำหรับไบนารีของระบบ AArch64 จะมีการทำเครื่องหมายเป็น "เรียกใช้ได้อย่างเดียว" (อ่านไม่ได้) เพื่อลดความเสี่ยงจากการโจมตีด้วยโค้ดแบบทันท่วงที โค้ดที่ผสมข้อมูลและโค้ดเข้าด้วยกันและโค้ดที่ตรวจสอบส่วนเหล่านี้โดยเจตนา (โดยไม่แมปกลุ่มหน่วยความจำใหม่เป็น "อ่านได้" ก่อน) จะใช้งานไม่ได้อีกต่อไป แอปที่มี SDK เป้าหมายเป็น Android 10 (API ระดับ 29 ขึ้นไป) จะได้รับผลกระทบหากแอปพยายามอ่านส่วนโค้ดของไลบรารีระบบที่เปิดใช้ execute-only (XOM) ในหน่วยความจำโดยไม่ทำเครื่องหมายส่วนนั้นว่าอ่านได้ก่อน
การเข้าถึงเพิ่มเติม
เอเจนต์ความน่าเชื่อถือ ซึ่งเป็นกลไกพื้นฐานที่กลไกการตรวจสอบสิทธิ์ระดับ 3 เช่น Smart Lock นำมาใช้ จะขยายการปลดล็อกได้เฉพาะใน Android 10 เอเจนต์ความน่าเชื่อถือจะปลดล็อกอุปกรณ์ที่ล็อกอยู่ไม่ได้อีกต่อไป และสามารถปลดล็อกอุปกรณ์ค้างไว้ได้สูงสุด 4 ชั่วโมงเท่านั้น
ตรวจสิทธิ์ด้วยใบหน้า
การตรวจสอบสิทธิ์ใบหน้าช่วยให้ผู้ใช้ปลดล็อกอุปกรณ์ได้ง่ายๆ เพียงมองไปที่ด้านหน้าของอุปกรณ์ Android 10 เพิ่มการรองรับสแต็กการตรวจสอบใบหน้าแบบใหม่ที่ประมวลผลเฟรมกล้องได้อย่างปลอดภัย เพื่อรักษาความปลอดภัยและความเป็นส่วนตัวในระหว่างการตรวจสอบใบหน้าในฮาร์ดแวร์ที่รองรับ นอกจากนี้ Android 10 ยังมีวิธีง่ายๆ ในการติดตั้งใช้งานที่เป็นไปตามข้อกำหนดด้านความปลอดภัยเพื่อเปิดใช้การผสานรวมแอปสำหรับธุรกรรมต่างๆ เช่น ธนาคารออนไลน์หรือบริการอื่นๆ
การดูแลจำนวนเต็มที่ล้น
Android 10 เปิดใช้การกรองจำนวนเต็มที่มีค่าเกิน (IntSan) ในโปรแกรมเปลี่ยนรหัสซอฟต์แวร์ ตรวจสอบว่าประสิทธิภาพการเล่นยอมรับได้สำหรับตัวแปลงรหัสที่ฮาร์ดแวร์ของอุปกรณ์ไม่รองรับ IntSan เปิดใช้ในตัวแปลงรหัสต่อไปนี้
libFLAClibavcdeclibavcenclibhevcdeclibmpeg2libopuslibvpxlibspeexresamplerlibvorbisidec
คอมโพเนนต์ของระบบแบบโมดูล
Android 10 ทำให้คอมโพเนนต์ของระบบ Android บางรายการเป็นแบบโมดูลและทำให้อัปเดตคอมโพเนนต์เหล่านั้นได้นอกรอบการเผยแพร่ปกติของ Android ตัวอย่างข้อบังคับบางส่วน ได้แก่
- รันไทม์ของ Android
- Conscrypt
- DNS Resolver
- DocumentsUI
- ExtServices
- สื่อ
- ModuleMetadata
- การสร้างเครือข่าย
- PermissionController
- ข้อมูลเขตเวลา
OEMCrypto
Android 10 ใช้ OEMCrypto API เวอร์ชัน 15
Scudo
Scudo เป็นตัวจัดสรรหน่วยความจำแบบไดนามิกในโหมดผู้ใช้ที่ออกแบบมาให้มีความยืดหยุ่นมากขึ้นต่อช่องโหว่ที่เกี่ยวข้องกับกอง heap โดยจะมีนิพจน์พื้นฐานสำหรับการจองและการยกเลิกการจองแบบ C มาตรฐาน รวมถึงนิพจน์พื้นฐาน C++
ShadowCallStack
ShadowCallStack
(SCS) คือโหมดเครื่องมือวัดประสิทธิภาพ LLVM ที่ป้องกันไม่ให้มีการเขียนทับที่อยู่สำหรับส่งคืน (เช่น การเขียนทับบัฟเฟอร์สแต็ก) โดยบันทึกที่อยู่สำหรับส่งคืนของฟังก์ชันลงในอินสแตนซ์ ShadowCallStack ที่จัดสรรแยกต่างหากในส่วนนำหน้าของฟังก์ชันของฟังก์ชันที่ไม่ใช่ใบไม้ และโหลดที่อยู่สำหรับส่งคืนจากอินสแตนซ์ ShadowCallStack ในส่วนปิดท้ายของฟังก์ชัน
WPA3 และ Wi-Fi Enhanced Open
Android 10 เพิ่มการรองรับมาตรฐานความปลอดภัย Wi-Fi Protected Access 3 (WPA3) และ Wi-Fi Enhanced Open เพื่อความเป็นส่วนตัวที่ดีขึ้นและความแข็งแกร่งในการป้องกันการโจมตีที่ทราบ
ความเป็นส่วนตัว
การเข้าถึงแอปเมื่อกำหนดเป้าหมายเป็น Android 9 หรือต่ำกว่า
หากแอปของคุณทำงานบน Android 10 ขึ้นไปแต่กำหนดเป้าหมายเป็น Android 9 (API ระดับ 28) หรือต่ำกว่า แพลตฟอร์มจะใช้ลักษณะการทำงานต่อไปนี้
- หากแอปประกาศองค์ประกอบ
<uses-permission>สำหรับACCESS_FINE_LOCATIONหรือACCESS_COARSE_LOCATIONระบบจะเพิ่มองค์ประกอบ<uses-permission>สำหรับACCESS_BACKGROUND_LOCATIONโดยอัตโนมัติระหว่างการติดตั้ง - หากแอปขอ
ACCESS_FINE_LOCATIONหรือACCESS_COARSE_LOCATIONระบบจะเพิ่มACCESS_BACKGROUND_LOCATIONลงในคําขอโดยอัตโนมัติ
ข้อจำกัดของกิจกรรมในเบื้องหลัง
ตั้งแต่ Android 10 เป็นต้นไป ระบบจะจำกัดการเริ่มกิจกรรมจากเบื้องหลัง การเปลี่ยนแปลงลักษณะการทำงานนี้ช่วยลดการขัดจังหวะสำหรับผู้ใช้และช่วยให้ผู้ใช้ควบคุมสิ่งที่แสดงบนหน้าจอได้มากขึ้น ตราบใดที่แอปเริ่มกิจกรรมอันเป็นผลโดยตรงจากการโต้ตอบของผู้ใช้ แอปของคุณก็น่าจะไม่ได้รับผลกระทบจากข้อจำกัดเหล่านี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับทางเลือกที่แนะนําในการเริ่มกิจกรรมจากเบื้องหลังได้ที่คู่มือเกี่ยวกับวิธีแจ้งผู้ใช้เกี่ยวกับเหตุการณ์ที่มีเวลาจำกัดในแอป
ข้อมูลเมตาของกล้อง
Android 10 เปลี่ยนความกว้างของข้อมูลที่ getCameraCharacteristics()
method แสดงผลโดยค่าเริ่มต้น โดยเฉพาะอย่างยิ่ง แอปของคุณต้องมีสิทธิ์ CAMERA เพื่อเข้าถึงข้อมูลเมตาที่อาจเจาะจงอุปกรณ์ซึ่งรวมอยู่ในค่าที่แสดงผลของเมธอดนี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงเหล่านี้ได้ที่ส่วนช่องกล้องที่ต้องใช้สิทธิ์
ข้อมูลคลิปบอร์ด
แอปของคุณจะเข้าถึงข้อมูลในคลิปบอร์ดใน Android 10 ขึ้นไปไม่ได้ เว้นแต่จะเป็นเครื่องมือแก้ไขวิธีการป้อนข้อมูล (IME) เริ่มต้นหรือเป็นแอปที่มีโฟกัสอยู่ในขณะนี้
ตำแหน่งของอุปกรณ์
Android 10 เปิดตัวสิทธิ์ ACCESS_BACKGROUND_LOCATION เพื่อรองรับการควบคุมเพิ่มเติมที่ผู้ใช้มีสิทธิ์ในการเข้าถึงข้อมูลตําแหน่งของแอป
สิทธิ์ ACCESS_BACKGROUND_LOCATION จะส่งผลต่อการเข้าถึงตำแหน่งของแอปเมื่อทำงานในเบื้องหลังเท่านั้น ซึ่งแตกต่างจากสิทธิ์ ACCESS_FINE_LOCATION และ ACCESS_COARSE_LOCATION
ระบบจะถือว่าแอปเข้าถึงตำแหน่งในเบื้องหลัง เว้นแต่จะมีการดำเนินการตามเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้
- กิจกรรมที่เป็นของแอปจะปรากฏขึ้น
- แอปกำลังใช้บริการที่ทำงานอยู่เบื้องหน้าซึ่งประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้าเป็น
location
หากต้องการประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้าสำหรับบริการในแอป ให้ตั้งค่าtargetSdkVersionหรือcompileSdkVersionของแอปเป็น29ขึ้นไป ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่บริการที่ทำงานอยู่เบื้องหน้าสามารถดําเนินการต่อที่ผู้ใช้เริ่มไว้ซึ่งจําเป็นต้องเข้าถึงตําแหน่ง
ที่จัดเก็บข้อมูลภายนอก
โดยค่าเริ่มต้น แอปที่กำหนดเป้าหมายเป็น Android 10 ขึ้นไปจะได้รับสิทธิ์เข้าถึงแบบจำกัดที่จัดเก็บข้อมูลภายนอก หรือพื้นที่เก็บข้อมูลที่กำหนดขอบเขต แอปดังกล่าวจะดูไฟล์ประเภทต่อไปนี้ภายในอุปกรณ์จัดเก็บข้อมูลภายนอกได้โดยไม่ต้องขอสิทธิ์ใดๆ ที่เกี่ยวข้องกับพื้นที่เก็บข้อมูลจากผู้ใช้
- ไฟล์ในไดเรกทอรีเฉพาะแอป ซึ่งเข้าถึงได้โดยใช้
getExternalFilesDir() - รูปภาพ วิดีโอ และคลิปเสียงที่แอปสร้างขึ้นจากที่เก็บสื่อ
ดูข้อมูลเพิ่มเติมเกี่ยวกับพื้นที่เก็บข้อมูลแบบจำกัดขอบเขต รวมถึงวิธีแชร์ เข้าถึง และแก้ไขไฟล์ที่บันทึกไว้ในอุปกรณ์จัดเก็บข้อมูลภายนอกได้จากคำแนะนำเกี่ยวกับวิธีจัดการไฟล์ในพื้นที่เก็บข้อมูลภายนอก และวิธีเข้าถึงและแก้ไขไฟล์สื่อ
การสุ่มที่อยู่ MAC
ในอุปกรณ์ที่ใช้ Android 10 ขึ้นไป ระบบจะส่งที่อยู่ MAC แบบสุ่มโดยค่าเริ่มต้น
หากแอปจัดการUse Case ขององค์กร แพลตฟอร์มจะมี API สําหรับการดำเนินการต่างๆ ที่เกี่ยวข้องกับที่อยู่ MAC ดังนี้
- รับที่อยู่ MAC แบบสุ่ม: แอปเจ้าของอุปกรณ์และแอปเจ้าของโปรไฟล์จะเรียกข้อมูลที่อยู่ MAC แบบสุ่มที่กำหนดให้กับเครือข่ายหนึ่งๆ ได้โดยเรียกใช้
getRandomizedMacAddress() - รับที่อยู่ MAC จริงจากโรงงาน: แอปเจ้าของอุปกรณ์สามารถเรียกข้อมูลที่อยู่ MAC ของฮาร์ดแวร์จริงของอุปกรณ์ได้โดยเรียก
getWifiMacAddress()วิธีนี้มีประโยชน์สำหรับการติดตามอุปกรณ์จํานวนมาก
ตัวระบุอุปกรณ์ที่รีเซ็ตไม่ได้
ตั้งแต่ Android 10 เป็นต้นไป แอปต้องมีREAD_PRIVILEGED_PHONE_STATEสิทธิ์ที่มีอภิสิทธิ์เพื่อเข้าถึงตัวระบุที่รีเซ็ตไม่ได้ของอุปกรณ์ ซึ่งรวมถึงทั้งหมายเลข IMEI และหมายเลขซีเรียล
BuildTelephonyManager
หากแอปไม่มีสิทธิ์และคุณพยายามขอข้อมูลเกี่ยวกับตัวระบุที่รีเซ็ตไม่ได้อยู่ดี การตอบสนองของแพลตฟอร์มจะแตกต่างกันไปตามเวอร์ชัน SDK เป้าหมาย ดังนี้
- หากแอปกำหนดเป้าหมายเป็น Android 10 ขึ้นไป ระบบจะแสดง
SecurityException - หากแอปกำหนดเป้าหมายเป็น Android 9 (API ระดับ 28) หรือต่ำกว่า เมธอดนี้จะแสดง
nullหรือข้อมูลตัวยึดตำแหน่งหากแอปมีสิทธิ์READ_PHONE_STATEมิเช่นนั้นSecurityExceptionจะปรากฏขึ้น
การจดจำกิจกรรมการเคลื่อนไหวร่างกาย
Android 10 เปิดตัวandroid.permission.ACTIVITY_RECOGNITIONสิทธิ์รันไทม์สําหรับแอปที่ต้องตรวจจับจํานวนก้าวของผู้ใช้หรือจัดประเภทกิจกรรมการเคลื่อนไหวร่างกายของผู้ใช้ เช่น การเดิน การปั่นจักรยาน หรือการเคลื่อนที่ในยานพาหนะ ฟีเจอร์นี้ออกแบบมาเพื่อให้ผู้ใช้เห็นวิธีที่ระบบใช้ข้อมูลเซ็นเซอร์ของอุปกรณ์ในการตั้งค่า
ไลบรารีบางอย่างในบริการของ Google Play เช่น Activity Recognition API และ Google Fit API จะไม่แสดงผลลัพธ์เว้นแต่ผู้ใช้จะให้สิทธิ์นี้แก่แอปของคุณ
เซ็นเซอร์ในตัวเพียง 2 รายการในอุปกรณ์ที่คุณต้องประกาศสิทธิ์นี้ ได้แก่ เซ็นเซอร์ตัวนับก้าวและตัวตรวจจับก้าว
หากแอปกำหนดเป้าหมายเป็น Android 9 (API ระดับ 28) หรือต่ำกว่า ระบบจะมอบสิทธิ์ android.permission.ACTIVITY_RECOGNITION ให้กับแอปโดยอัตโนมัติตามที่จำเป็น หากแอปเป็นไปตามเงื่อนไขต่อไปนี้ทั้งหมด
- ไฟล์ Manifest มีสิทธิ์
com.google.android.gms.permission.ACTIVITY_RECOGNITION - ไฟล์ Manifest ไม่มีสิทธิ์
android.permission.ACTIVITY_RECOGNITION
หากระบบให้สิทธิ์ android.permission.ACTIVITY_RECOGNITION โดยอัตโนมัติ แอปของคุณจะยังคงมีสิทธิ์ดังกล่าวหลังจากอัปเดตแอปให้กำหนดเป้าหมายเป็น Android 10 อย่างไรก็ตาม ผู้ใช้สามารถเพิกถอนสิทธิ์นี้ได้ทุกเมื่อในการตั้งค่าระบบ
ข้อจํากัดของระบบไฟล์ /proc/net
ในอุปกรณ์ที่ใช้ Android 10 ขึ้นไป แอปจะเข้าถึง/proc/netไม่ได้ ซึ่งรวมถึงข้อมูลเกี่ยวกับสถานะเครือข่ายของอุปกรณ์ แอปที่ต้องเข้าถึงข้อมูลนี้ เช่น VPN ควรใช้คลาส NetworkStatsManager หรือ ConnectivityManager
นำกลุ่มสิทธิ์ออกจาก UI แล้ว
ตั้งแต่ Android 10 เป็นต้นไป แอปจะค้นหาวิธีจัดกลุ่มสิทธิ์ใน UI ไม่ได้
การนำความสัมพันธ์ของรายชื่อติดต่อออก
ตั้งแต่ Android 10 เป็นต้นไป แพลตฟอร์มจะไม่ติดตามข้อมูลความสัมพันธ์ของรายชื่อติดต่อ ดังนั้น หากแอปของคุณทำการค้นหารายชื่อติดต่อของผู้ใช้ ผลการค้นหาจะไม่จัดเรียงตามความถี่ของการโต้ตอบ
คำแนะนำเกี่ยวกับ ContactsProvider มีประกาศที่อธิบายช่องและวิธีการที่ล้าสมัยในอุปกรณ์ทุกเครื่องตั้งแต่ Android 10 เป็นต้นไป
จำกัดการเข้าถึงเนื้อหาในหน้าจอ
Android 10 ป้องกันไม่ให้เข้าถึงเนื้อหาบนหน้าจอของอุปกรณ์โดยอัตโนมัติเพื่อปกป้องเนื้อหาบนหน้าจอของผู้ใช้ โดยเปลี่ยนขอบเขตของสิทธิ์ READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUT และCAPTURE_SECURE_VIDEO_OUTPUT ตั้งแต่ Android 10 เป็นต้นไป สิทธิ์เหล่านี้จะเป็นสิทธิ์เข้าถึงลายเซ็นเท่านั้น
แอปที่ต้องเข้าถึงเนื้อหาบนหน้าจอของอุปกรณ์ควรใช้
MediaProjection
API ซึ่งจะแสดงข้อความแจ้งให้ผู้ใช้ให้ความยินยอม
หมายเลขซีเรียลของอุปกรณ์ USB
หากแอปกำหนดเป้าหมายเป็น Android 10 ขึ้นไป แอปจะอ่านหมายเลขซีเรียลไม่ได้จนกว่าผู้ใช้จะให้สิทธิ์แอปเข้าถึงอุปกรณ์หรืออุปกรณ์เสริม USB
ดูข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับอุปกรณ์ USB ได้ที่คำแนะนำเกี่ยวกับวิธีกำหนดค่าโฮสต์ USB
Wi-Fi
แอปที่กำหนดเป้าหมายเป็น Android 10 ขึ้นไปจะเปิดหรือปิดใช้ Wi-Fi ไม่ได้ เมธอด WifiManager.setWifiEnabled() จะแสดงผลลัพธ์เป็น false เสมอ
หากต้องการแจ้งให้ผู้ใช้เปิดและปิดใช้ Wi-Fi ให้ใช้แผงการตั้งค่า
ข้อจำกัดในการเข้าถึงเครือข่าย Wi-Fi ที่กําหนดค่าไว้โดยตรง
การกำหนดค่ารายการเครือข่าย Wi-Fi ด้วยตนเองจะจำกัดไว้สำหรับแอประบบและตัวควบคุมนโยบายอุปกรณ์ (DPC) เพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ DPC หนึ่งๆ อาจเป็นทั้งเจ้าของอุปกรณ์หรือเจ้าของโปรไฟล์ก็ได้
หากแอปกำหนดเป้าหมายเป็น Android 10 ขึ้นไป และไม่ใช่แอประบบหรือ DPC วิธีการต่อไปนี้จะไม่แสดงข้อมูลที่เป็นประโยชน์
- เมธอด
getConfiguredNetworks()จะแสดงผลรายการว่างเสมอ - วิธีการดําเนินการของเครือข่ายแต่ละรายการที่แสดงผลค่าจำนวนเต็ม
addNetwork()และupdateNetwork()จะแสดงผลเป็น -1 เสมอ - การดำเนินการแต่ละรายการของเครือข่ายที่แสดงผลค่าบูลีน ได้แก่
removeNetwork(),reassociate(),enableNetwork(),disableNetwork(),reconnect()และdisconnect()จะแสดงผลfalseเสมอ
Android 9
每个 Android 版本中都包含数十项用于保护用户的安全增强功能。如需 Android 9 中提供的一些主要安全增强功能的列表,请参阅 Android 版本说明。
Android 8
每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 8.0 中提供的一些主要安全增强功能:
- 加密:在工作资料中增加了对撤销密钥 (evict key) 的支持。
- 验证启动:增加了 Android 启动时验证 (AVB)。支持回滚保护(用于引导加载程序)的启动时验证代码库已添加到 AOSP 中。建议提供引导加载程序支持,以便为 HLOS 提供回滚保护。建议将引导加载程序设为只能由用户通过实际操作设备来解锁。
- 锁定屏幕:增加了对使用防篡改硬件验证锁定屏幕凭据的支持。
- KeyStore:搭载 Android 8.0 及更高版本的所有设备都需要进行密钥认证。增加了 ID 认证支持,以改进零触摸注册计划。
- 沙盒:使用 Treble 计划的框架和设备特定组件之间的标准接口更紧密地对许多组件进行沙盒化处理。将 seccomp 过滤应用到了所有不信任的应用,以减少内核的攻击面。WebView 现在运行在一个独立的进程中,对系统其余部分的访问非常有限。
- 内核加固:实现了经过安全强化的 usercopy、PAN 模拟、初始化后变为只读以及 KASLR。
- 用户空间安全强化:为媒体堆栈实现了 CFI。 应用叠加层不能再遮盖系统关键窗口,并且用户可以关闭这些叠加层。
- 操作系统流式更新:在磁盘空间不足的设备上启用了更新。
- 安装未知应用:用户必须授予权限,系统才能从不是第一方应用商店的来源安装应用。
- 隐私权:对于设备上的每个应用和使用设备的每个用户,Android ID (SSAID) 都采用不同的值。对于网络浏览器应用,Widevine 客户端 ID 会针对每个应用软件包名称和网络来源返回不同的值。
net.hostname现在为空,并且 DHCP 客户端不再发送主机名。android.os.Build.SERIAL已被替换为Build.SERIALAPI(受到用户控制权限的保护)。改进了某些芯片组中的 MAC 地址随机分配功能。
Android 7
每个 Android 版本中都包含数十项用于保护用户的安全增强功能。以下是 Android 7.0 中提供的一些主要安全增强功能:
- 文件级加密:在文件级进行加密,而不是将整个存储区域作为单个单元进行加密。这种加密方式可以更好地隔离和保护设备上的不同用户和资料(例如个人资料和工作资料)。
- 直接启动:通过文件级加密实现,允许特定应用(例如,闹钟和无障碍功能)在设备已开机但未解锁的情况下运行。
- 验证启动:现在,验证启动会被严格强制执行,从而使遭到入侵的设备无法启动;验证启动支持纠错功能,有助于更可靠地防范非恶意数据损坏。
- SELinux。更新后的 SELinux 配置和更高的 Seccomp 覆盖率有助于进一步锁定应用沙盒并减小受攻击面。
- 库加载顺序随机化和改进的 ASLR。 增大随机性降低了某些代码重用攻击的有效性。
- 内核加固:通过将内核内存的各个分区标记为只读,限制内核对用户空间地址的访问,并进一步减小现有的受攻击面,为更高版本的内核添加额外的内存保护。
- APK 签名方案 v2:引入了一种全文件签名方案,该方案有助于加快验证速度并增强完整性保证。
- 可信 CA 存储区。为了使应用更容易控制对其安全网络流量的访问,对于 API 级别为 24 及以上的应用,由用户安装的证书颁发机构以及通过 Device Admin API 安装的证书颁发机构在默认情况下不再受信任。此外,所有新的 Android 设备必须搭载相同的可信 CA 存储区。
- 网络安全配置。通过声明式配置文件来配置网络安全设置和传输层安全协议 (TLS)。
Android 6
每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 6.0 中提供的一些主要安全增强功能:
- 运行时权限:应用在运行时请求权限,而不是在安装时被授予权限。用户可以为 M 及更低版本的 Android 应用启用和停用权限。
- 验证启动:在执行系统软件之前,先对其进行一系列加密检查,以确保手机从引导加载程序到操作系统均处于正常状况。
- 硬件隔离安全措施:新的硬件抽象层 (HAL),Fingerprint API、锁定屏幕、设备加密功能和客户端证书可以利用它来保护密钥免遭内核入侵和/或现场攻击。
- 指纹:现在,只需触摸一下,即可解锁设备。开发者还可以借助新的 API 来使用指纹锁定和解锁加密密钥。
- 加装 SD 卡:可将移动媒体设备加装到设备上,以便扩展可用存储空间来存放本地应用数据、照片、视频等内容,但仍受块级加密保护。
- 明文流量:开发者可以使用新的 StrictMode 来确保其应用不会使用明文。
- 系统加固:通过由 SELinux 强制执行的政策对系统进行加固。这可以实现更好的用户隔离和 IOCTL 过滤、降低可从设备/系统之外访问的服务面临的威胁、进一步强化 SELinux 域,以及高度限制对 /proc 的访问。
- USB 访问控制:必须由用户确认是否允许通过 USB 访问手机上的文件、存储空间或其他功能。现在,默认设置是“仅充电”,如果要访问存储空间,必须获得用户的明确许可。
Android 5
5.0
每个 Android 版本中都包含数十项用于保护用户的安全增强功能。以下是 Android 5.0 中提供的一些主要安全增强功能:
- 默认加密。在以开箱即用的方式搭载 L 的设备上,会默认启用全盘加密功能,以便更好地保护丢失设备或被盗设备上的数据。对于更新到 L 的设备,可以在设置 > 安全性部分进行加密。
- 经过改进的全盘加密功能。使用
scrypt保护用户密码免遭暴力破解攻击;在可能的情况下,该密钥会绑定到硬件密钥库,以防范来自设备外的攻击。 和以往一样,Android 屏幕锁定密钥和设备加密密钥不会被发送到设备以外,也不会提供给任何应用。 - 通过 SELinux 得到增强的 Android 沙盒。对于所有域,Android 现在都要求 SELinux 处于强制模式。SELinux 是 Linux 内核中的强制访问控制 (MAC) 系统,用于增强现有的自主访问控制 (DAC) 安全模型。这个新的安全层为防范潜在的安全漏洞提供了额外的保护屏障。
- Smart Lock。Android 现在包含一些 Trustlet,它们可以提供更灵活的设备解锁方式。 例如,Trustlet 可让设备在靠近其他可信设备时自动解锁(通过 NFC、蓝牙),或让设备在用户拥有可信面孔时自动解锁。
- 面向手机和平板电脑的多用户功能、受限个人资料和访客模式。Android 现在为手机提供了多用户功能,并包含一个访客模式。利用访客模式,您可以让访客轻松地临时使用您的设备,而不向他们授予对您的数据和应用的访问权限。
- 不使用 OTA 的 WebView 更新方式。现在可以独立于框架对 WebView 进行更新,而且无需采用系统 OTA 方式。 这有助于更快速地应对 WebView 中的潜在安全问题。
- 经过更新的 HTTPS 和 TLS/SSL 加密功能。现在启用了 TLSv1.2 和 TLSv1.1,首选是正向加密,启用了 AES-GCM,停用了弱加密套件(MD5、3DES 和导出密码套件)。如需了解详情,请访问 https://developer.android.com/reference/javax/net/ssl/SSLSocket.html。
- 移除了非 PIE 链接器支持。Android 现在要求所有动态链接的可执行文件都要支持 PIE(位置无关可执行文件)。这有助于增强 Android 的地址空间布局随机化 (ASLR) 实现。
- FORTIFY_SOURCE 改进。以下 libc 函数现在实现了 FORTIFY_SOURCE 保护功能:
stpcpy()、stpncpy()、read()、recvfrom()、FD_CLR()、FD_SET()和FD_ISSET()。这有助于防范涉及这些函数的内存损坏漏洞。 - 安全修复程序。Android 5.0 中还包含针对 Android 特有漏洞的修复程序。有关这些漏洞的信息已提供给“开放手机联盟”(Open Handset Alliance) 成员,并且 Android 开放源代码项目中提供了相应的修复程序。为了提高安全性,部分搭载更低版本 Android 系统的设备可能也会包含这些修复程序。
Android 4 และต่ำกว่า
每个 Android 版本中都包含数十项用于保护用户的安全增强功能。以下是 Android 4.4 中提供的一些安全增强功能:
- 通过 SELinux 得到增强的 Android 沙盒。 Android 现在以强制模式使用 SELinux。SELinux 是 Linux 内核中的强制访问控制 (MAC) 系统,用于增强基于自主访问控制 (DAC) 的现有安全模型。 这为防范潜在的安全漏洞提供了额外的保护屏障。
- 按用户应用 VPN。 在多用户设备上,现在按用户应用 VPN。 这样一来,用户就可以通过一个 VPN 路由所有网络流量,而不会影响使用同一设备的其他用户。
- AndroidKeyStore 中的 ECDSA 提供程序支持。 Android 现在有一个允许使用 ECDSA 和 DSA 算法的密钥库提供程序。
- 设备监测警告。 如果有任何可能允许监测加密网络流量的证书添加到设备证书库中,Android 都会向用户发出警告。
- FORTIFY_SOURCE。 Android 现在支持 FORTIFY_SOURCE 第 2 级,并且所有代码在编译时都会受到这些保护。FORTIFY_SOURCE 已得到增强,能够与 Clang 配合使用。
- 证书锁定。 Android 4.4 能够检测安全的 SSL/TLS 通信中是否使用了欺诈性 Google 证书,并且能够阻止这种行为。
- 安全修复程序。 Android 4.4 中还包含针对 Android 特有漏洞的修复程序。 有关这些漏洞的信息已提供给“开放手机联盟”(Open Handset Alliance) 成员,并且 Android 开源项目中提供了相应的修复程序。为了提高安全性,搭载更低版本 Android 的某些设备可能也会包含这些修复程序。
Android ทุกเวอร์ชันมีการปรับปรุงด้านความปลอดภัยหลายสิบรายการเพื่อปกป้องผู้ใช้ การปรับปรุงด้านความปลอดภัยบางส่วนที่มีให้ใช้งานใน Android 4.3 มีดังนี้
- แซนด์บ็อกซ์ของ Android ที่เสริมด้วย SELinux เวอร์ชันนี้ช่วยเพิ่มความแข็งแกร่งให้กับแซนด์บ็อกซ์ของ Android โดยใช้ SELinux ซึ่งเป็นระบบควบคุมการเข้าถึงแบบบังคับ (MAC) ในเคอร์เนล Linux ผู้ใช้และนักพัฒนาแอปจะไม่เห็นการเสริมความปลอดภัยของ SELinux และจะช่วยเพิ่มความเสถียรให้กับโมเดลการรักษาความปลอดภัยที่มีอยู่ของ Android ไปพร้อมๆ กับคงความเข้ากันได้กับแอปที่มีอยู่ เวอร์ชันนี้อนุญาตให้ใช้ SELinux ในโหมดอนุญาตเพื่อให้มั่นใจว่ายังคงใช้งานร่วมกันได้ โหมดนี้จะบันทึกการละเมิดนโยบายทั้งหมด แต่ไม่ทำให้แอปขัดข้องหรือส่งผลต่อลักษณะการทํางานของระบบ
- ไม่มีโปรแกรม
setuidหรือsetgidเพิ่มการรองรับความสามารถของระบบไฟล์ให้กับไฟล์ระบบ Android และนำโปรแกรมsetuidหรือsetgidทั้งหมดออก ซึ่งจะช่วยลดพื้นที่การโจมตีรูทและโอกาสที่จะมีช่องโหว่ด้านความปลอดภัย - การตรวจสอบสิทธิ์ ADB ตั้งแต่ Android 4.2.2 เป็นต้นไป การเชื่อมต่อกับ ADB จะได้รับการรับรองด้วยคู่คีย์ RSA ซึ่งจะช่วยป้องกันการใช้ ADB โดยไม่ได้รับอนุญาตในกรณีที่ผู้โจมตีเข้าถึงอุปกรณ์ได้
- จำกัด Setuid จากแอป Android
ตอนนี้ระบบได้เมานต์พาร์ติชัน
/systemแบบ nosuid สําหรับกระบวนการที่เกิดจาก zygote ซึ่งป้องกันไม่ให้แอป Android เรียกใช้โปรแกรมsetuidซึ่งจะช่วยลดพื้นที่การโจมตีของรูทและโอกาสที่จะมีช่องโหว่ด้านความปลอดภัย - การกำหนดขีดจำกัดความสามารถ
ตอนนี้ zygote ของ Android และ ADB ใช้
prctl(PR_CAPBSET_DROP)เพื่อยกเลิกความสามารถที่ไม่จำเป็นก่อนที่จะเรียกใช้แอป ซึ่งจะช่วยป้องกันไม่ให้แอป Android และแอปที่เปิดจากเชลล์ได้รับความสามารถที่มีสิทธิ์ - ผู้ให้บริการ AndroidKeyStore ตอนนี้ Android มีผู้ให้บริการคีย์สโตร์ที่อนุญาตให้แอปสร้างคีย์ที่มีการใช้งานเฉพาะได้ ซึ่งจะช่วยให้แอปมี API ในการสร้างหรือจัดเก็บคีย์ส่วนตัวที่แอปอื่นๆ ไม่สามารถใช้ได้
- KeyChain
isBoundKeyAlgorithmตอนนี้ Keychain API มีเมธอด (isBoundKeyType) ที่ช่วยให้ผู้พัฒนาแอปยืนยันได้ว่าคีย์ทั้งระบบเชื่อมโยงกับรูทความน่าเชื่อถือของฮาร์ดแวร์สำหรับอุปกรณ์ ซึ่งจะเป็นพื้นที่สำหรับสร้างหรือจัดเก็บคีย์ส่วนตัวที่ไม่สามารถส่งออกจากอุปกรณ์ได้ แม้แต่ในกรณีที่มีการบุกรุกรูท NO_NEW_PRIVSตอนนี้ zygote ของ Android ใช้prctl(PR_SET_NO_NEW_PRIVS)เพื่อบล็อกการเพิ่มสิทธิ์ใหม่ก่อนการเรียกใช้โค้ดแอป ซึ่งจะช่วยป้องกันไม่ให้แอป Android ดําเนินการที่สามารถยกระดับสิทธิ์ผ่าน execve (ต้องใช้เคอร์เนล Linux เวอร์ชัน 3.5 ขึ้นไป)FORTIFY_SOURCEการเพิ่มประสิทธิภาพ เปิดใช้FORTIFY_SOURCEใน Android x86 และ MIPS และคำเรียกstrchr(),strrchr(),strlen()และumask()ที่เสริมความปลอดภัย ซึ่งสามารถตรวจหาช่องโหว่ที่อาจเกิดขึ้นจากการเสียหายของหน่วยความจําหรือค่าคงที่สตริงที่ยังไม่สิ้นสุด- การคุ้มครองการย้ายที่อยู่ เปิดใช้การเปลี่ยนตำแหน่งแบบอ่านอย่างเดียว (relro) สําหรับไฟล์ปฏิบัติการที่ลิงก์แบบคงที่และนําการเปลี่ยนตําแหน่งข้อความทั้งหมดในโค้ด Android ออก ซึ่งจะป้องกันช่องโหว่ที่อาจเกิดขึ้นจากการทำให้หน่วยความจำเสียหาย
- EntropyMixer ที่ปรับปรุงแล้ว ตอนนี้ EntropyMixer จะเขียนข้อมูลสุ่มเมื่อปิดเครื่องหรือรีบูต นอกเหนือจากการผสมเป็นระยะ วิธีนี้ช่วยให้เก็บข้อมูลความผันผวนทั้งหมดที่สร้างขึ้นขณะที่อุปกรณ์เปิดอยู่ และมีประโยชน์อย่างยิ่งสำหรับอุปกรณ์ที่รีบูตทันทีหลังจากการจัดสรร
- การแก้ไขด้านความปลอดภัย Android 4.3 ยังมีการแก้ไขช่องโหว่เฉพาะ Android ด้วย เราได้แจ้งข้อมูลเกี่ยวกับช่องโหว่เหล่านี้ให้สมาชิกของ Open Handset Alliance ทราบแล้ว และสามารถดูการแก้ไขได้ในโปรเจ็กต์โอเพนซอร์ส Android อุปกรณ์บางรุ่นที่ใช้ Android เวอร์ชันเก่าอาจมีการแก้ไขเหล่านี้ด้วยเพื่อปรับปรุงความปลอดภัย
Android 提供了一个多层安全模型,Android 安全性概述中对该模型进行了介绍。每个 Android 更新版本中都包含数十项用于保护用户的安全增强功能。 以下是 Android 4.2 中引入的一些安全增强功能:
- 应用验证:用户可以选择启用“验证应用”,并且可以选择在安装应用之前由应用验证程序对应用进行筛查。如果用户尝试安装的应用可能有害,应用验证功能可以提醒用户;如果应用的危害性非常大,应用验证功能可以阻止安装。
- 加强对付费短信的控制:如果有应用尝试向使用付费服务的短号码发送短信(可能会产生额外的费用),Android 将会通知用户。用户可以选择是允许还是阻止该应用发送短信。
- 始终开启的 VPN:可以配置 VPN,以确保在建立 VPN 连接之前应用无法访问网络。这有助于防止应用跨其他网络发送数据。
- 证书锁定:Android 的核心库现在支持证书锁定。如果证书未关联到一组应关联的证书,锁定的域将会收到证书验证失败消息。这有助于保护证书授权机构免遭可能的入侵。
- 改进后的 Android 权限显示方式:权限划分到了多个对用户来说更清晰明了的组中。在审核权限时,用户可以点击权限来查看关于相应权限的更多详细信息。
- installd 安全强化:
installd守护程序不会以 root 用户身份运行,这样可以缩小 root 提权攻击的潜在攻击面。 - init 脚本安全强化:init 脚本现在会应用
O_NOFOLLOW语义来防范与符号链接相关的攻击。 FORTIFY_SOURCE:Android 现在会实现FORTIFY_SOURCE,以供系统库和应用用于防范内存损坏。- ContentProvider 默认配置:默认情况下,对于每个 content provider,以 API 级别 17 为目标的应用都会将
export设为false,以缩小应用的默认受攻击面。 - 加密:修改了 SecureRandom 和 Cipher.RSA 的默认实现,以便使用 OpenSSL。为使用 OpenSSL 1.0.1 的 TLSv1.1 和 TLSv1.2 添加了安全套接字支持
- 安全漏洞修复程序:升级了开放源代码库,在其中新增了一些安全漏洞修复程序,其中包括 WebKit、libpng、OpenSSL 和 LibXML。Android 4.2 中还包含针对 Android 特有漏洞的修复程序。有关这些漏洞的信息已提供给“开放手机联盟”(Open Handset Alliance) 成员,并且 Android 开放源代码项目中提供了相应的修复程序。为了提高安全性,部分搭载更低版本 Android 系统的设备可能也会包含这些修复程序。
Android 提供了一个多层安全模型,Android 安全性概述中对该模型进行了介绍。每个 Android 更新版本中都包含数十项用于保护用户的安全增强功能。以下是 Android 1.5 至 4.1 版中引入的一些安全增强功能:
- Android 1.5
- ProPolice:旨在防止堆栈缓冲区溢出 (-fstack-protector)
- safe_iop:旨在减少整数溢出
- OpenBSD dlmalloc 的扩展程序:旨在防范 double free() 漏洞和连续块攻击。连续块攻击是利用堆损坏的常见攻击方式。
- OpenBSD calloc:旨在防止在内存分配期间发生整数溢出
- Android 2.3
- 格式化字符串漏洞防护功能 (-Wformat-security -Werror=format-security)
- 基于硬件的 No eXecute (NX):旨在防止在堆栈和堆上执行代码
- Linux mmap_min_addr:旨在降低空指针解引用提权风险(在 Android 4.1 中得到了进一步增强)
- Android 4.0
- 地址空间布局随机化 (ASLR):旨在随机排列内存中的关键位置
- Android 4.1
- PIE(位置无关可执行文件)支持
- 只读重定位/立即绑定 (-Wl,-z,relro -Wl,-z,now)
- 启用了 dmesg_restrict(避免内核地址泄露)
- 启用了 kptr_restrict(避免内核地址泄露)