android lint 安全分析

来源:互联网 发布:淘宝急需开通直播 编辑:程序博客网 时间:2024/06/18 15:10

Androidlint 安全性检查简介

1、  lint简介

lint是一个比较出名的C语言工具,用来静态分析代码。与大多数C语言编译器相比,lint可以对程序进行更加广泛的错误分析,是一种更加严密的编译工具。最初,lint这个工具用来扫描C源文件并对源程序中不可移植的代码提出警告。但是现在大多数lint实用程序已经变得更加严密,它不但可以检查出可移植性问题,而且可以检查出那些虽然可移植并且完全合乎语法但却很可能是错误的特性。

Android也引进了lint,为了静态分析android源代码,AndroidSDK为开发者提供了一个静态代码分析工具,也就是lint。他可以通过扫描工程内所有代码和资源文件后根据所得结果将检测问题分成6大类向开发者报告:

正确性

可用性

安全性

无障碍性

性能

国际化

开发者可以根据问题的内容和类型来对代码进行分析修改。Lint检查的范围很广。这里也就只是介绍一下安全相关的部分。

 

2、  lint工作流程

lint是扫描静态代码,然后找出其中的问题。Lint流程图如下:



以上内容分成4部分:

App Source Files:工程源文件,包括java代码,xml文件,icon图片, ProGuard 配置文件等。

Lint.xml:lint的配置文件,在里面你可以设置想要检查的内容。

Lint tool:静态代码扫描工具,Eclipse上有相应插件,也可以在命令行上执行。

Lint Output:lint扫描结果的输出,可以指定使用html5格式输出。

 

3、  lint简单使用

如果使用Eclipse,并且安装了ADT插件,那么在Eclipse上有相应的插件。


上图打上记号的地方就是lint。有一个下拉菜单,里面可以选择你的工程进行lint检查。点击检查之后,在Eclipse下方就会出现一个栏目:lint warning。

 

 


4、  lint安全类检查项目

lint会进行一些安全性分析。对于代码本身的安全性,lint主要包括11项:

项目

检查内容

说明

PackagedPrivateKey

查找私钥文件

一般情况下,私钥文件不应该存在于工程之中

GrantAllUris

检查<grant-uri-permission>项是否共享了所有内容

通常情况下<grant-uri-permission>路径不应为‘/’(共享所有内容),应该制定确切的子集

SetJavaScriptEnabled

检查是否包含了SetJavaScriptEnabled

JavaScript交互会出很多问题,一些常见的webview问题前提就是该项为true

ExportedContentProvider

检查是否未设置权限就共享了content provider

默认情况下content provider是共享的,任何应用程序都可以通过它来读写数据。如果content provider提供的是敏感数据,应该禁止共享或增加权限控制

ExportedService

检查是否公开了服务

所有公开的服务都应该设置权限,否则所有应用程序都可以绑定在这个服务上

ExportedReceive

检查是否没设置权限就共享了receiver

如果receiver的exported属性设置为true,或intent-filter没有指明exported属性为false,那么该receiver是共享的,任何程序都可以使用这个receiver,这是很不安全的。

HardcodedDebugMode

检查在mainifest中是否为android:debuggable设置了固定值

默认情况下,程序调试时编译器会自动将android:debuggable设置为true,在发布的是否将其设置为false。如果在发布的时候manifest中包含该属性为true的语句,可能会泄露一些敏感的调试信息。

WorldReadableFiles

检查调用openFileOutput()和getSharedPreferences()函数时是否使用了MODE_WORLD_READABLE参数

建议在将文件设置成全局可读属性前确保文件内不会有敏感信息。

WorldWriteableFiles

检查调用openFileOutput()和getSharedPreferences()函数时是否使用了MODE_WORLD_WRITEABLE参数

建议在将文件设置成全局可写属性前确保文件内不会有敏感信息。如果有恶意软件修改了该文件,会导致程序严重出错。

AllowBackup

检查manifest中是否包含了allowBackup的设置

allowBackup默认为真,如果允许备份,用户可以讲程序中所有数据备份出来,以便修改后可以恢复回去。开发者应该仔细考虑自己的程序是否允许用户备份,这个在manifest中可以设置android:allowBackup

ExportedActivity

检查是否没有设置权限就共享了Activity

如果没对Activity设置权限控制,任何程序都可以使用它。

 

5、  lint.xml文件

我自己在Eclipse下搜寻lint.xml文件,内容如下:

<?xml version="1.0"encoding="utf-8"?>

<!--

 Copyright 2013 Google, Inc

 Licensed under the Apache License, Version 2.0 (the"License");

  youmay not use this file except in compliance with the License.

  Youmay obtain a copy of the License at

 

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software

 distributed under the License is distributed on an "AS IS"BASIS,

 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  Seethe License for the specific language governing permissions and

 limitations under the License.

-->

<lint>

</lint>

什么内容都没有,不过你可以向里面添加内容。注意添加的内容是不让lint扫描的或者调整lint扫描等级的。

官方给出了一个实例:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- Disable the given check in this project -->
    <issue id="IconMissingDensityFolder" severity="ignore"/>
    <!-- Ignore the ObsoleteLayoutParam issue in the specifiedfiles -->
    <issue id="ObsoleteLayoutParam">
        <ignore path="res/layout/activation.xml"/>
        <ignore path="res/layout-xlarge/activation.xml"/>
    </issue>
    <!-- Ignore the UselessLeaf issue in the specified file -->
    <issue id="UselessLeaf">
        <ignore path="res/layout/main.xml" />
    </issue>
    <!-- Change the severity of hardcoded strings to"error" -->
    <issue id="HardcodedText" severity="error"/>
</lint>

关于java文件和xml文件的lint检查过滤,可以参看网站:http://developer.android.com/tools/debugging/improving-w-lint.html

 

6、  参考文件

《Android安全机制解析与应用实践》

http://developer.android.com/tools/help/lint.html

android lint检查问题列表:http://blog.csdn.net/thl789/article/details/8037333

 

 

0 0