1、Windows 安全组件:访问控制的判断(Discretion access control )允许对象所有者可以控制谁被允许访问该对象以及访问的方式。对象重用(Object reuse)当资源(内存、磁盘等)被某应用访问时,Windows 禁止所有的系统应用访问该资源,这也就是为什么无法恢复已经被删除的文件的原因。强制登陆(Mandatory log on)要求所有的用户必须登陆,通过认证后才可以访问资源审核(Auditing)在控制用户访问资源的同时,也可以对这些访问作了相应的记录。对象的访问控制(Control of access to object)不允许直接访问系统的某些资源。必须是
2、该资源允许被访问,然后是用户或应用通过第一次认证后再访问。Windows 安全子系统:安全子系统包括以下部分:WinlogonGraphical Identification and Authentication DLL (GINA) Local Security Authority(LSA)Security Support Provider Interface(SSPI) Authentication PackagesSecurity support providers Netlogon ServiceSecurity Account Manager(SAM)Winlogon and Gin
3、a:Winlogon 调用 GINA DLL,并监视安全认证序列。而 GINA DLL 提供一个交互式的界面为用户登陆提供认证请求。GINA DLL 被设计成一个独立的模块,当然我们也可以用一个更加强有力的认证方式(指纹、视网膜)替换内置的 GINA DLL。Winlogon 在注册表中查找 HKLMSoftwareMicrosoftWindows NTCurrentVersionWinlogon ,如果存在 GinaDLL 键,Winlogon 将使用这个 DLL,如果不存在该键,Winlogon 将使用默认值 MSGINA.DLL本地安全认证(Local Security Authorit
4、y):本地安全认证(LSA)是一个被保护的子系统,它负责以下任务:调用所有的认证包,检查在注册表HKLMSYSTEMCurrentControlSetControlLSA 下AuthenticationPAckages 下的值,并调用该 DLL 进行认证(MSV_1.DLL) 。在 4.0 版里,Windows NT 会寻找HKLMSYSTEMCurrentControlSetControlLSA 下所有存在的SecurityPackages 值并调用。重新找回本地组的 SIDs 和用户的权限。创建用户的访问令牌。管理本地安装的服务所使用的服务账号。储存和映射用户权限。管理审核的策略和设置。管
5、理信任关系。安全支持提供者的接口(Security Support Provide Interface):微软的 Security Support Provide Interface 很简单地遵循 RFC 2743 和 RFC 2744 的定义,提供一些安全服务的 API,为应用程序和服务提供请求安全的认证连接的方法。认证包(Authentication Package):认证包可以为真实用户提供认证。通过 GINA DLL 的可信认证后,认证包返回用户的 SIDs 给 LSA,然后将其放在用户的访问令牌中。安全支持提供者(Security Support Provider):安全支持提供者是
6、以驱动的形式安装的,能够实现一些附加的安全机制,默认情况下,Windows NT 安装了以下三种:Msnsspc.dll:微软网络挑战/反应认证模块Msapsspc.dll:分布式密码认证挑战/反应模块,该模块也可以在微软网络中使用Schannel.dll: 该认证模块使用某些证书颁发机构提供的证书来进行验证,常见的证书机构比如 Verisign。这种认证方式经常在使用 SSL(Secure Sockets Layer)和 PCT(Private Communication Technology)协议通信的时候用到。网络登陆(Netlogon):网络登陆服务必须在通过认证后建立一个安全的通道。
7、要实现这个目标,必须通过安全通道与域中的域控制器建立连接,然后,再通过安全的通道传递用户的口令,在域的域控制器上响应请求后,重新取回用户的 SIDs 和用户权限。安全账号管理者(Security Account Manager):安全账号管理者,也就是我们经常所说的SAM,它是用来保存用户账号和口令的数据库。保存了注册表中HKLMSecuritySam 中的一部分内容。不同的域有不同的 Sam,在域复制的过程中,Sam 包将会被拷贝。Windows 访问控制模型中有两个重要的部分1 访问令牌 Access Token 2 安全描述符 Security Descriptor 访问令牌中的主要内容
8、: 1 当前用户的 SID 2 当前登录账户所属的用户组的 SID 列表 3 受限制的 SID(Restricted SID)列表 4 当前登录用户以及它所属用户组的权限(Privileges)列表 5SID(安全标识符)是 Windows 中每个账户和账户组都有的一个标识符唯一的S-1-5-21-1004336348-1275210071-725345543-1003SAM(Security Account Manager)即安全账号管理器,它存储了散列运算的用户密码的副本。此数据库是使用本地存储的系统密钥加密的 Windows 中对用户账户的安全管理使用了安全账号管理器 SAM 的机制,安
9、全账号管理器对账号的管理是通过安全标识进行的,安全标识在账号创建时就同时创建,一旦账号被删除,安全标识也同时被删除。 读取:该权限可以查看文件夹内的文件名称与子文件夹名称,查看文件夹的属性,查看文件夹的所有者,查看文件夹的权限等写入:该权限可以在文件夹内添加文件与文件夹、改变文件夹的属性、查看文件夹的所有者、查看文件夹的权限列出文件夹目录:该权限除了拥有“读取”的所有权限之外,它还有“遍历子文件夹”的权限,也就是具备进入到子文件夹的功能读取和运行:它拥有与“列出文件夹目录”几乎完全相同的权限,只有在权限的继承方面有所不同:“列出文件夹目录”的权限仅由文件夹继承,而“读取和运行”是由文件夹和文件
10、同时继承修改:它除了拥有前面的所有权限外,还可以删除子文件夹完全控制:它拥有所有 NTFS 文件的权限8.1.1 root 账户的管理与用户(user)和用户组(group )相关的配置文件;与用户(user)相关的配置文件;/etc/passwd 注:用户(user)的配置文件;/etc/shadow 注:用户(user )影子口令文件;与用户组(group)相关的配置文件/etc/group 注:用户组(group)配置文件/etc/gshadow 注:用户组(group)的影子文件; 如果查看/etc/shadow 下存放的普通帐号信息如下: (1):帐号名称 (2):密码:这里是加密过
11、的,但高手也可以解密的。要主要安全问题(代!符号标识该帐号不能用来登录) (3):上次修改密码的日期 (4):密码不可被变更的天数 (5):密码需要被重新变更的天数(99999 表示不需要变更) (6):密码变更前提前几天警告 (7):帐号失效日期 (8):帐号取消日期 (9):保留条目,目前没用 基于权限字的访问控制传统的用户用户组其他用户(UGO)访问控制机制文件包括两个属性(所有者、访问权限)文件权限(读,写,执行)rwxLinux 文件权限按文件所有者,所有者同组,其他用户区分权限。基于位的访问控制权限文件属性由 10 位表示(1 位文件类型,2-4 位所有者权限,5-9 位所有者组权
12、限,其他用户权限)目录 d符号链接 i(类似快捷方式)套接字文件 s块设备文件 b(标准接口)字符设备文件 c命名管道文件 p(不同进程间的信息传输)普通文件-查看权限 ls -l改变权限 chmod(重新设定对客体的访问权限)chmod ugoa +或者-或者= rwx 文件.chmod nnn 文件( 用户组其他成员)chmod -R u+x g+x-w /home/ww/testfloder -r 表示对目前目录下的所有档案与子目录进行相同的权限变更( 即以递回的方式逐个变更) 将档案 file1.txt 设为所有人皆可读取 chmod ugo+r file1.txt 用数字表示权限 c
13、hmod 数字 文件r=4,w=2 ,x=1 chmod 777 file 查看权限 ls -l改变文件拥有者 chown(系统拥有者)将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie :chown jessie:users file1.txt 更改某个文件或目录的用户组 chgrpchgrp 组名 目标 1 目标 2 . chgrp -v bin log2012.log 控制文件缺省权限 unmask(补位)umask 值为 022,则默认目录权限为 755,默认文件权限为 644分区层面在系统运行时,最外层安全保护是由 Linux 系统提供的,其中 syst
14、em.img 所在的分区是只读的,不允许用户写入,而 data.img 所在的分区是可读写的,用于存放用户数据。分区的用户权限在 init.rc 中定义。单独文件单独文件访问权限控制分群组、用户、权限。权限分可读、可写、可执行。命令:chownchgrpchmod。通过命令行和 Eclipse 可以生成发布模式的数字证书;在命令行方式下利用 Keytool 来生成数字证书,并利用 Jarsigner 来为 APK 进行数字签名;使用 ADT Export Wizard 进行签名;只有同一包名且采用同一数字证书的应用才被认为是同一个应用;数字证书的最大用途是应用升级和设置应用间通信的权限;所有的
15、 Android 应用程序(。apk 文件)必须用证书进行签名认证,而这个证书的私钥是由开发者保有的。该证书可以用以识别应用程序的作者。该证书也不需要 CA 签名认证(注:CA 就是一个第三方的证书认证机构,如 verisign 等)。Android 应用程序允许而且一般也都是使用 self- signed 证书(即自签名证书 )。证书是用于在应用程序之间建立信任关系,而不是用于控制程序是否可以安装。签名影响安全性的最重要的方式是通过决定谁可以进入基于签名的 permisssions,以及谁可以 share 用户 IDs。 Android 安全机制: Android 的数字证书是免费的,分调试
16、模式和发布模式两种;Android是多进程系统,在系统中,应用程序(或者系统的部分) 会在自己的进程中运行。系统和应用之间的安全性通过 Linux 的 facilities(工具,功能) 在进程级别来强制实现的,比如会给应用程序分配 user ID 和 Group ID。更细化的安全特性是通过“Permission“ 机制对特定的进程的特定的操作进行限制“per-URI permissions“可以对获取特定数据的 access 专门权限进行限制。 所以,应用程序之间一般不可以互相访问的,但是 anroid 提供了一种 permission 机制,用于应用程序之间数据和功能的安全访问。 And
17、roid 是一个权限分离的系统 。 这是利用 Linux 已有的权限管理机制,通过为每一个 Application 分配不同的 uid 和 gid , 从而使得不同的 Application 之间的私有数据和访问( native 以及 java 层通过这种 sandbox 机制,都可以)达到隔离的目的 。 与此 同时, Android 还 在此基础上进行扩展,提供了 permission 机制,它主要是用来对 Application 可以执行的某些具体操作进行权限细分和访问控制,同时提供了 per-URI permission 机制,用来提供对某些特定的数据块进行 ad-hoc 方式的访问。应
18、用程序框架(Application Framework)Android 的应用程序框架为应用程序层的开发者提供 APIs 上层的应用程序是以 JAVA 构建的本层次提供的首先包含了 UI 程序中所需要的各种控件一个 Android 的应用程序可以利用应用程序框架中的以下几个部分: Activity (活动)、Broadcast Intent Receiver (广播意图接收者)、Service (服务)、Content Provider (内容提供者)Android 应用程序权限申请:每个应用程序的 APK 包里面都包含有一个 AndroidMainifest.xml 文件,该文件除罗列应用程
19、序运行时库、运行依赖关系之外,还会详细地罗列出该应用程序所需的系统访问。程序员在进行应用软件开发时,需要通过设置该文件的 uses-permission 字段来显式地向 Android 系统申请访问权限如何进行应用程序权限申请:自己写android:protectionLevel:权限级别,分为 4 个级别:normal :低风险权限,在安装的时候,系统会自动授予权限给 application。dangerous:高风险权限,系统不会自动授予权限给 app,在用到的时候,会给用户提示。signature :签名权限,在其他 app 引用声明的权限的时候,需要保证两个 app 的签名一致。这样系
20、统就会自动授予权限给第三方 app,而不提示给用户。 signatureOrSystem:这个权限是引用该权限的 app 需要有和系统同样的签名才能授予的权限,一般不推荐使用。接入权限:权限主要用来对应用的操作增加限制,防止恶意应用进行非法操作给用户造成敏感数据泄漏和设备被非法控制,防止恶意收费等; Android 的接入权限: Normal 权限 Dangerous 权限 signatureOrSystem 权限Signature 权限 框架层权限定义位置 :frameworks/base/core/res/ AndroidManifest.xml权限可用于整个应用、Activity、Ser
21、vice 等。 所有的 Android 应用程序( 。apk 文件)必须用证书进行签名认证,而这个证书的私钥是由开发者保有的。该证书可以用以识别应用程序的作者。该证书也不需要 CA 签名认证(注:CA 就是一个第三方的证书认证机构,如 verisign 等)。Android 应用程序允许而且一般也都是使用 self- signed 证书(即自签名证书)。证书是用于在应用程序之间建立信任关系,而不是用于控制程序是否可以安装。签名影响安全性的最重要的方式是通过决定谁可以进入基于签名的 permisssions,以及谁可以 share 用户 IDs。 Android 与 IOS 对比:加密机制 An
22、droid 系统仅仅在 3.0 版本以上才提供硬件加密功能来保护设备上的数据信息 iOS 在加密机制上,采用硬件 AES-256 加密所有存放在flash 内存上的数据。同时还可以指定保护的数据选项,例如对电子邮件加密。 隔离机制 ndroid 系统通过 sandbox 机制来实现 iOS 系统设计为每个应用独立运行,互不干扰。应用间不能查看或修改数据和运行逻辑,并且应用在执行过程中也不可能查看到设备上已安装其他应用 基于许可权限的访问机制Android 在默认情况下 ,当许可没有明确要求用户这样做的时,大多数 Android 应用什么都不能做。每个 Android 程序包含一个嵌入式列表的权限, 需要它才能正常运行。请求的权限以非技术语言提供给用户,并安装在移动设备上。 iOS 系统有四种资源需要授权使用,其他资源采用隔离机制来限制访问。这四种资源分别是通过全球定位系统 GPS 来获取位置数据; 接受来自互联网的通知提醒功能(通常,是基于云的服务发送通知给移动设备);拨打电话; 发送短信或电子邮件。