存档

‘未分类’ 分类的存档

vim 配置ctags/cscope/taglist

2017年3月24日 没有评论
ctags -R --exclude=out
find . -name "*.h" -o -name "*.c" -o -name "*.cc" -o -name "*.cpp" -o -name "*.java" -o -name "*.mk" -o -name "*.xml" -o -name "*.hpp" -o -name "*.aidl" -o -name "*.AIDL" -not -path "out" > cscope.files
cscope -bkq

wget https://vim.sourceforge.io/scripts/download_script.php?src_id=19574 -O taglist_46.zip
unzip taglist_46.zip -d ~/.vim/
wget http://cscope.sourceforge.net/cscope_maps.vim
mv cscope_maps.vim ~/.vim/plugin/

阅读全文…

分类: Linux, 未分类 标签: , , ,

SELinux配置

2017年3月23日 没有评论

1、查看selinux状态
查看selinux的详细状态,如果为enable则表示为开启
# /usr/sbin/sestatus -v
查看selinux的模式
# getenforce

2、关闭selinux
2.1:永久性关闭(这样需要重启服务器后生效)
# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
2.2:临时性关闭(立即生效,但是重启服务器后失效)
#设置selinux为permissive模式(即关闭)
# setenforce 0
#设置selinux为enforcing模式(即开启)
# setenforce 1

分类: Linux, 未分类 标签:

读《Android安全架构深究》:系统更新和ROOT访问

2017年3月22日 没有评论

引导加载程序:
引导加载程序(bootloader)是系统启动时自动运行的一个底层程序。程序的主要目的是初始化硬件,然后找到并启动主操作系统。
虽然大部分Android bootloader是闭源的,但是大部分基于高通芯片的ARM设备bootloader是基于Little Kernel(LK) bootloader修改得到的。而LK bootloader是开源的。

阅读全文…

分类: Android, 未分类 标签: ,

读《Android安全架构深究》:SELinux

2017年3月22日 没有评论

传统沙箱极大依赖于Linux默认的自主访问控制(DAC);SELinux(安全加强Linux)的强制访问控制(mandatory access control,MAC)可以通过以下方法尝试克服Linux DAC的局限:执行全局的细粒度安全策略,并要求只有系统管理员才能修改这些策略。

SELinux介绍:
SELinux是Linux内核的一个强制访问控制机制,作为一个Linux安全模块存在。Linux安全模块(LSM)框架允许第三方访问控制机制被链接到内核,修改默认DAC的实现。除了提供主要内核服务钩子以外,LSM框架也通过扩展procfs虚拟文件系统(/proc)添加各进程和各任务(线程)的安全属性,并且支持将文件系统扩展属性保存为安全属性。

阅读全文…

分类: Android, 未分类 标签: ,

读《Android安全架构深究》:NFC和元件安全

2017年3月22日 没有评论

NFC简介:Near Field Communication,NFC是近距离(10cm或更少)的设备之间通过建立无线电通信交换数据的技术。NFC是建立在一系列标准之上,这些标准定义了无线电通信频率、传输协议和数据交换格式。NFC建立在无线电射频识别(RFID)技术的基础上,使用13.56MHz的工作频率,并支持多个数据传输速率。NFC设备能够以三种不同的模式进行工作:读写(R/W)、点对点(P2P)和卡模拟(CE)。

分类: Android, 未分类 标签: ,

读《Android安全架构深究》:设备安全

2017年3月22日 没有评论

控制系统的启动和安装:
引导加载程序(bootloader):引导加载程序是一个专用的、与硬件相关的程序,在设备第一次启动时,这个程序将会运行。其作用是初始化设备硬件,提供一个小型的设备配置界面(可选),找到并启动操作系统。Android的bootloader一般与芯片上的系统(SoC)匹配,大部分bootloader都支持fastboot协议或者download模式,并支持对设备的持久性存储分区进行写入(刷机)或者不刷入系统直接启动临时系统。
恢复系统(recovery):recovery系统是一个小型的基于linux的操作系统,其中包括一个内核,包含有各种底层工具的RAM磁盘,和一个通过设备硬件按键操作的小型UI。recovery被用来应用系统更新。而更新一般是以OTA(Over-The-Air)更新包的形式来发布,其中包含新版本的系统文件(或补丁)和安装此更新的脚本文件。OTA文件一般都是被设备制造商的私钥签名过的。recovery保存在一个特定分区中, 阅读全文…

分类: Android, 未分类 标签: ,

读《Android安全架构深究》:企业安全

2017年3月6日 没有评论

设备管理:

Android2.2引入设备管理API,以支持开发可执行系统安全策略,并基于设备当前级别,动态调整相关特性的应用。这种应用被称为设备管理员(device administrator)。设备管理员必须在设备安全设置中显式打开,并且如果处于激活状态将无法被卸载。被打开之后,设备管理员可以获取系统特殊权限:锁定设备、改变锁屏密码,甚至擦除整个设备。设备管理员一般会搭配一个特殊的企业账户,允许企业管理员设置只有符合安全策略的设备才能获取企业数据。安全策略可以静态植入设备管理程序,也可以作为配置或同步协议的一部分在服务端进行设置后推送到设备。
Androdi4.4支持的策略类型如表9-1所示,策略常量定义在DeviceAdminInfo类中。

实现方法:
使用管理类DeviecePolicyManager来暴露下层DevicePolicyManagerService系统服务的部分功能。DeviecePolicyManager外观类仅仅定义了一些常量,并将服务异常转换为错误码,并没有添加任何实际功能。
DevicePolicyManagerService由system_server启动,以system用户运行。该服务可以帮助第三方应用(不需要特殊权限)获取到相关的特权操作(如修改锁屏密码)。
特权管理:
DevicePolicyManagerService运行时,将会在内存中为每个设备用户维护一个内部的策略结构体。每个策略结构体中包含对特定用户的当前策略,以及所有激活的设备管理员元数据清单。因为每个用户可以打开多个拥有设备管理员功能的应用,所以需要从中选择出最严格的作为当前策略。每个激活的设备管理员应用的元数据中包含有应用信息和相关策略清单。
应用若想请求策略,那么需要添加一个XML资源文件,该文件在标签下添加所有欲使用的策略。在设备管理员应用激活前,系统处理这个XML文件,并显示对话框,令用户在启动前检查其请求的策略。
策略保存:
设备管理员被激活后,关闭的操作或策略的更新会被记录到目标用户的device_policies.xml文件中。设备所有者被保存到/data/system/目录下,其他用户保存到用户系统目录/data/users//下。device_policies.xml文件中包含每个激活管理员(active administrator)及其策略信息,以及一些当前锁屏密码的全局信息。
策略执行:
设备管理员策略可以有不同的颗粒,能够选择仅仅对当前用户或者对设备上的所有用户执行。
添加设备管理员:
实现设备管理员:
需要声明一个需要BIND_DEVICE_ADMIN权限的广播接收者,列出使用策略的一个XML资源文件,和处理ACTION_DEVICE_ADMIN_ENABLED intent的intent-filter。
设置设备所有者:
如果一个设备管理员应用是系统镜像的一部分,那么可以通过调用setDeviceOwner(String packageName, String ownerName)隐藏方法,将其设定为系统拥有者。虽然这个方法不需要特殊权限,但是只有设备被准备(Settings.Global.DEVICE_PROVISIONED为0)好之前才能够被调用(只有负责系统初始化的系统应用才有机会调用)。
成功调用这个函数会在/data/system/目录下写入一个device_owner.xml文件。
托管设备:
安装着所有者管理员的设备(owner administrator)被称为托管设备(managed device),对影响设备安全配置的修改与非托管设备有很多不同。
企业账户集成:。。。

阅读全文…

分类: Android, VPN, WIFI, 未分类 标签: ,

读《Android安全架构深究》:在线账户管理

2017年3月3日 没有评论

AccountManager和AccountManagerService:
AccountManager是完成实际工作的AccountManagerService的外观类(facade)。AccountManager服务并不实现特定账户的认证,而是维护一组可扩展的账户类型(Google,Twitter,Microsoft Exchange等)认证模块。

认证模块:
认证模块是由应用定义并拥有的,且每个模块都实现了android.account.IAccountAutherticator的AIDL接口的一个特定服务。这个接口中包含增加账户、请求用户输入账户凭据、获取一个认证令牌、更新账户元数据等方法。工程中,应用不直接实现这个接口,而是继承android.accounts.AbstractAccountAuthenticator类,它会将实现函数和内部AIDL的存根(stub)关联起来。
AbstractAccountAuthenticator类还确保了AIDL存根的调用者拥有ACCOUNT_MANAGER的权限。这个权限是系统签名权限,只有系统组件才可以直接调用认证模块。其他客户端都必须间接通过AccountManagerService类进行调用。

认证缓存模块:
AccountAuthenticatorCache类提供了“可插拔性”,会在系统中扫描已经定义的认证模块包,将其与AccountManagerService关联。该缓存建立在与PackageManagerService服务的,关于本机已安装包的注册的Intent动作,和元数据情况的协商通信,的基础上。会不断通过广播接收来保持更新:当增加、更新或删除一个包的时候,会触发这个广播接收者的方法,并将缓存写入/data/system/registed_services/目录下,并以相应的intent动作命名。 在多用户设备上,每个用户都会有各自的缓存文件。

账户管理服务的操作和权限:
AccountManagerService类利用权限组合、调用者UID、签名校验等方法,实现访问控制。

列出和认证账户:
管理账户:
使用账户凭证:

账户数据库:
位于/data/system/users/<user ID >/accounts.db。包含6个表:accounts、extras、authtokens、grants、shared_users、和 meta。
密码安全:
虽然凭据(通常是用户名和密码)集中存储在/data/system/目录下的数据库中,且只有系统应用才能够访问到,但是凭据并没有被加密;如果需要的话,加密或者其他保护凭据的方法,需要认证器模块自行实现。为了避免密钥包含在备份或者系统转储中的风险,应用可以使用与设备相关的密钥,对密码进行加密,或者在初始登录完成后,将密码替换为可作废的主令牌。

增加一个认证器:
认证器模块是一个实现了android.accounts.IAccountAuthenticator AIDL接口的绑定服务,并且可以使用android.accounts.AccountAuthenticator intent动作绑定。
大多数认证器逻辑在Android提供的AbstractAccountAuthenticator基类派生的认证器类中进行实现:包括添加账户、检查用户提供的凭据、获取认证令牌等。
当实现账户认证器后,可以简单的创建一个响应android.accounts.AccountAuthenticator intent动作的服务。为了支持AccountAuthenticatorCache和AccountManagerService的调用,这个Service需要声明android.accounts.AccountAuthenticator intent动作并匹配元数据;访问账户和令牌需要的权限也需要添加到manifest中;最后,账户类型、标签和图标都必须在引用的XML资源文件中进行声明。

Google账户支持:

读《Android安全架构深究》:凭据存储

2017年3月3日 没有评论

Android的凭据库不仅可以用来存储系统内置特性(如WIFI和VPN连接)的凭据,也可以被第三方应用使用。应用可以使用标准SDK的API访问凭据库来安全管理它们的密钥。

VPN和WIFI EAP凭据:

VPN的实现由于隧道技术的哦不同而有所区别,但是都需要建立在安全连接之前对客户端进行认证。一些VPN使用共享密钥或密码作为验证方法,但企业级的解决方案一般都依赖于基于PKI的客户端认证。扩展认证协议(EAP)是一个经常被用于无线网络和P2P连接的认证框架,在企业环境中推荐使用的方法是EAP-TLS,特别是已经部署好PKI的公司。

认证密钥和证书:
对于EAP-TLS和基于PKI的VPN来说,客户端会保存一个认证密钥,并被签发一个对应的证书(经常是公司的CA)。当安全策略允许使用非物理设备保护的认证密钥时,密钥和对应的证书一般会使用标准的PKCS#12文件格式保存。

系统凭据库:
系统的凭据库是Android的一个系统服务,它会把在导入的凭据保存到外存之前将其进行加密。加密的密钥由用户提供的一个密码生成。凭据库系统服务保证了只有明确申请了访问权限的应用才能够访问存储的凭据。
访问系统凭据库的API在Android4.0中第一次被引入。系统凭据库之后被扩展支持了基于硬件的凭据存储,并且不仅提供了共享系统密钥,也支持应用私有密钥

阅读全文…

分类: 未分类 标签: ,

读《Android安全架构深究》:网络安全与PKI

2017年2月28日 没有评论

PKI与SSL概述

TLS和SSL是点对点的安全通讯协议,旨在为在TCP/IP上的通信提供身份认证、消息机密性和消息完整性服务。其身份认证功能主要依赖于公钥证书。
为了建立加密通信,客户端和服务器徐亚协商出一个两者共同支持的密码套件,然后通过证书互相确认对方的身份,最后双方协商出一个对称加密算法,并计算出一个共享密钥,用于加密双方所有的通信数据。尽管SSL协议支持双向身份认证,一般在实际使用中只进行服务器端的身份认证。

公钥证书:
公钥证书是一个将身份和公钥绑定的结构。对于X.509证书来说(应用于SSL协议),“身份”指的是一组属性值,主要包括一个主体的特征名(主题常用名、组织单位、国家),其他的主要属性包括签发者的特征名、有效期和一系列扩展字段。

直接信任和Private CA:
一般而言,客户端都会被配置一系列的信任锚,其中包含知名的签发者(Public CA)。不同浏览器和操作系统西安则默认信任锚的方式还是存在很大差别。

公钥基础设施:
在证书被Public CA签名之前,需要进行一些身份认证。认证过程差别很大,从最简单的邮箱地址认证(简易服务器证书),到需要多种形式的政府签发ID和公司注册文档(EV证书)都有可能。
Public CA为了实施实体认证服务,创建、管理和发布证书,需要依赖于很多人、系统、程序和策略,这些实体和系统被称为公钥体系结构(Public Key Infrastructure,PKI)。PKI结构十分复杂,但就安全通讯(尤其是SSL)而言,最重要的元素就是CA证书。因为CA证书扮演信任锚的角色,用于认证通讯实体的身份。

		在PKI中,拥有证书的个人或服务器称之为终端实体(end-entity,EE)。
		为了获得证书,EE需要给下注册机构(registration authority,RA)发送请求。RA需要从EE获取身份证明信息,并根据CA的策略要求对信息进行认证。当RA确认EE的身份后,检查EE的身份信息是否符合证书请求的条件,如果满足,RA会转发请求到负责签发的CA。
		然后CA对EE的证书请求进行签名,生成EE证书,并维护证书的撤销信息。
		根CA并不会直接对EE证书进行签名,只是对签发CA的证书进行签名,并维护签发CA证书的撤销信息。根CA的使用频率非常低,为了增加密钥的安全性,一般离线保存。
		

证书撤销:
撤销证书包括将证书的序列号和撤消原因,加入到CA定期发布的证书撤销清单(CRL)中。实体通过查找相应的证书序列号是否在CRL中,来判断证书状态。许多SSl客户端或者根本不检查撤销链信息,或者即使连接中的证书已经被撤销,任允许所有连接。SSL客户端这种宽容行为的原因主要是基于对获取当前撤销信息开销的考虑,从而确保连通性。

阅读全文…

分类: Android, 未分类 标签: , ,