从零开始学Android应用安全测试(Part1)

时间:2022-04-30 13:03:47 其他范文 收藏本文 下载本文

“天各一方”为你分享4篇“从零开始学Android应用安全测试(Part1)”,经本站小编整理后发布,但愿对你的工作、学习、生活带来方便。

从零开始学Android应用安全测试(Part1)

篇1:从零开始学Android应用安全测试(Part1)

在本系列文章中,利用InsecureBankv2这款含有漏洞的安卓应用,我们可以了解到有关安卓应用安全的种种概念,我们将从一个新手的角度看待每一个问题。所以,我建议新手朋友可以关注下本系列文章。

由于教程是从零开始,前面的东西不免会比较基础,老鸟请先飞过吧。

移动渗透平台搭建

在对安卓应用测试之前,我们需要搭建一个合适的移动渗透平台。

首先,我们需要下载Eclipse ADT bundle,并安装。这里我就不再过多重复造轮子的事情了。

这里面有俩个文件夹,一个叫 tools,另外一个叫做platform-tools。这俩是非常重要的,是需要加入环境变量里面的。以下命令可以用来添加路径到环境变量中

export PATH=/path/to/dir:$PATH.

将tools和platform-tools文件夹都添加到环境变量中,完成操作过后,你就可以随意的使用所有的命令了。然后检查是否工作,可以键入adb命令,你可以得到以下的输出结果。

为了保证应用能够在我们的计算机上运行,我们还需要一款趁手的模拟器。Eclipse Android Virtual Device就是一款安卓模拟器,如何进行创建虚拟设备,朋友们可以在网上搜搜。然而,对于本系列文章,我会使用另一款工具Genymotion 来创建虚拟设备。这里有许多原因,其一是处理速度比较快,其二使用Genymotion创建的虚拟设备默认是自动获取了root权限的。这也就意味着,你可以自由的安装应用,对于审计安卓应用也方便。

完成Genymotion的安装后,你需要注册一个账号(免费的)并基于你的需求创建不同模拟器。

好了,现在我们就将InsecureBankv2的源代码从github上克隆过来。

打开你创建的虚拟设备,这一步骤十分简单。

在刚才从github克隆的项目文件中,存在一个apk文件。你可以使用adb install InsecureBankv2.apk 命令来安装这个应用。

在上图中你可以看到success,这就表示这个apk文件已经成功安装了,同时你在模拟的设备中看到对应的应用图标,

但是有时候你可能只是想编译这个文件而不是运行这个apk文件。这个时候你就需要打开Eclipse找到 File -> Switch Workspace,选择你创建的 Insecurebank文件夹,然后转到File -> Import并选择现有的Android代码放进工作区。

选择应用程序所在的文件夹,你可以看到Eclipse已经将应用程序放进了你的工作区。

这时候你就可以点击上端的play按钮,开始运行这个应用。在保证模拟器正常运行的情况下,选择运行安卓应用。

不出意外,这时候你就可以看到应用在模拟器中成功运行了。

同时启动后端的python服务,可以使用这个命令

python app.py –port 8888

在这个应用中填入ip地址以及端口。

现在你就可以使用默认凭证登录这个应用了。

dinesh/Dinesh@123$

jack/Jack@123$

请确保你安装了以下工具,在我们以后讨论的细节中,会用到的。

Drozer

Andbug

Introspy

dex2jar

apktool

另外,可以使用adb shell连接你的模拟器,然后看看你想要做些什么。

下节预告

在下一篇文章中,我们将了解下InsecureBankv2项目中存在的各种漏洞,更详细的了解安卓应用的安全性。

InsecureBankv2项目地址:https://github.com/dineshshetty/Android-InsecureBankv2

Eclipse ADT bundle:https://developer.android.com/sdk/installing/?pkg=adt

篇2:从零开始学Android应用安全测试(Part3)

在本节中内容中,我们将看看如何对安卓应用程序中的组件进行攻击测试,阅读前两节(http://www.2cto.com/Article/04/388673.html,http://www.2cto.com/Article/201504/388674.html)

在此之前,你的理解安卓应用程序中的组件是何方神圣。安卓组件是构成安卓应用的基础,这些组件都可以在安卓manifest.xml文件中去配置。这里我们简单的介绍其中四种相对来说较为重要的组件。

组件            描述

Activities          控制用户UI,处理用户在智能手机屏幕上的交互

Services           无须可视化界面,提供后台长时运行的功能

Broadcast Receivers        处理安卓应用程序与安卓系统之间的通信

Content Providers        处理数据与数据库之间的管理问题

Activities

一个Activity组件代表一个简单的用户界面。举例子说,Email应用可能有一个Activity组件用来显示新邮件列表,一个Activity组件用来写邮件,再有一个Activity组件用来读取邮件。一个Activity是一个界面,多个Activity表示多个界面。

一个Activity作为Activity class的子类执行,如下

public class MainActivity extends Activity {

}

Services

Services是一个提供后台长时间运行的组件。比如当你在听音乐的时候你依旧可以正常使用其他应用,再或者你也能够打开网络连接上网,而不影响用户的交互行为。

一个Services作为Services Class的子类执行,如下

public class MyService extends Service {

}

Broadcast Receivers

广播只是回应来自系统或者其他应用的广播消息。比如,应用程序可以启动广播告知其他应用设备中已经存在的数据,以及可以使用的数据等等。

一个Broadcast Receivers作为Broadcast Receivers Class的子类执行,如下

public class MyReceiver extends BroadcastReceiver {

}

Content Providers

Content Providers组件存储和取得数据,以及让它对所有应用程序可见。Android整理了一大堆content provider给公共数据类型(音频、视频、图像、联系人信息等等)。

一个Content Providers作为Content Providers Class的子类执行。必须使用一个标准的API,这样其他应用程序才能执行协议

public class MyContentProvider extends ContentProvider {

}

附加组件

以下这些组件可能我们也会用到,这里暂且简单的介绍一下。

组件            介绍

Fragments          Fragment表现Activity中用户界面的一个行为或者是一部分,

Views           是最基本的UI类,基本上所有的高级UI组件都是集成子View类的实现。

Layouts           Layout 是一个可横向和纵向排列布局的一个容器,布局组件。

Intents           Intent本身为一个数据载体,可以描述想要执行的操作以及用于这个操作的数据和其它属性

Resources          外部元素,比如字符串,常量,图片等等。

Manifest           应用配置文件

Android:exported

组件的中最重要的属性就是android:exported,以下文字来自于安卓官方文档

这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互。如果设置为true,则能够被调用或交互,否则不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。

它的默认值依赖与该服务所包含的过滤器。没有过滤器则意味着该服务只能通过指定明确的类名来调用,这样就是说该服务只能在应用程序的内部使用(因为其他外部使用者不会知道该服务的类名),因此这种情况下,这个属性的默认值是false。另一方面,如果至少包含了一个过滤器,则意味着该服务可以给外部的其他应用提供服务,因此默认值是true。

这个属性不是限制把服务暴露给其他应用程序的唯一方法。还可以使用权限来限制能够跟该服务交互的外部实体。

因此,如果一个Activity属性为exported,那么他就可以调用外部应用程序。为了测试InsecureBank应用中的Activity,我们首先打开Genymotion模拟器中的InsecureBank应用并启动后端服务。

一旦我们启动这个应用,我们就可以看到这个登录界面。如果登录成功过后activity的属性为exported,我们就可以直接调用activity

接着我们来看看manifest文件,或许我们能够找到相关的activity。如下图所示,首先使用apktool解压应用

下面就是manifest文件的样子咯。正如你看到的,有一个名为.PostLogin的Activity组件属性为exported

我们可以在模拟器中使用activity manager工具直接调用这个activity,我们来看看吧

使用am tool启动一个activity,命令如下

adb shell

am start -n com.package.name/com.package.name.ActivityName

在这个例子中,我们可以在manifest文件中看到这个包的名字为com.android.insecurebankv2

所以,我们使用如下所示命令来调用PostLogin activity

在这个应用中,你可以看到你已经成功绕过了登录页面

你也可以使用drozer调用Activity或者其他组件,下一节我们来介绍drozer。

这里有几个方法可以防止这类漏洞。

首先,除非真的有必要,请将android:exported 属性设置为FALSE

其次,如果应用需要调用特定的外部应用程序,你可以为activity组件增加自定义权限,仅仅允许应用程序请求权限调用activity组件。

在下一节开始之前,请大家预习一下安卓manifest文件,以及安卓应用程序中的不同组件。

篇3:用Android模拟器也可以开发和测试NFC应用

从Android2.3开始支持NFC,不过NFC应用只能在Android手机(或平板电脑)上测试和开发,而且Android手机还必须有NFC芯 片。而且如果测试NFC传输文件时至少需要两部支持NFC的手机。当然,如果测试读写NFC标签,还需要一些NFC标签或帖子。而且NFC在模拟器上时不 能运行的。所以从这一点来说,NFC开发需要更多的设备,比较麻烦。这也蓝牙、传感器是一样的。都不能在Android模拟器上开发和测试。真不知道 Google为什么不解决这一问题。

不过这种问题也不是不能解决,而且并不复杂。既然模拟器没有提供这样的功能。我们可以将NFC功能模拟出来(实际上,蓝牙、传感器都可以进行模拟,可能很 多读者用过一些传感器模拟软件,NFC模拟和这个类似)。而且要求是与真实的NFC环境无缝对接。也就是说,使用模拟NFC功能开发的Android应用 可以不需要修改一行代码,甚至不需要重新编译,就可以直接用在真实的NFC环境。

那么怎么解决这个问题呢?要想知道如何模拟NFC,需要先从宏观上了解NFC的工作原理。这里用NFC标签作为例子。NFC数据传输和这个类似。当NFC 标签靠近手机时,Android系统中有一个叫Nfc的系统应用(在/pakcages/apps/Nfc目 录中),该应用会发送一个Activity Action,该Action会调用一个在系统中注册的用于处理NFC请求的窗口(如果没有,就调用Nfc应用中默认的处理窗口)。这里的关键是 Activity Action。既然Nfc应用会发出一个Activity Action,那么用于模拟NFC的程序,也发送一个Activity Action,不就可以共享用于处理NFC请求的窗口(由用户建立的Activity)了吗?只要在发送Activity Action时加一个标志,就可以区分是Activity Action是Nfc系统应用发出的,还是模拟NFC的程序发出的。这样在处理请求的NFC窗口中就可以根据不同的情况进行处理。为了更透明,可以编写一 个Activity类(如NFCActivity),该类根据这两种情况进行处理。又因为不管是哪种情况,都需要提供写入NFC标签的数据,或接收NFC 标签中的数据。所以可以在该NFCActivity中提供一些回调方法,当需要提供或接收数据时,调用这些方法即可。最后需要使用NFC功能时,用户自己 编写的窗口类只需要从NFCActivity类继承,并实现相应的回调方法即可。例如,下面就是一个实现方法,可接收NFC标签的数据,并写入新数据。

复制代码

public class NFCManTestActivity extends NFCActivity

{

private NFCMan mNfcMan;

private EditText nfcTagText;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_nfcman_test);

nfcTagText = (EditText) findViewById(R.id.edittext_nfc);

mNfcMan = new NFCMan(this);

}

// 当NFC标签靠近手机时调用,data用于接收NFC标签中的数据,

// 返回值会重新写到NFC标签中

@Override

public String onNear(NFCData data)

{

// 返回要写入NFC标签的文本

return nfcTagText.getText.toString();

}

// 将数据成功写入NFC标签后会调用该方法

@Override

public void onNFCSuccess()

{

// 显示成功写入数据的提示

Toast.makeText(this, “成功写入数据”, Toast.LENGTH_LONG).show();

}

// 写入数据失败后调用该方法

@Override

public void onNFCFailed(int error, String errorMsg)

{

// 显示写入数据异常的编码和信息

Toast.makeText(this, “error:” + error + “n” + “msg:” + errorMsg,

Toast.LENGTH_LONG).show();

}

}

复制代码

从NFCManTestActivity类的代码可以看出,共有如下三个回调方法,

分别处理读写NFC标签数据,写入成功和写入失败三个事件。

onNear

onNFCSuccess

onNFCFailed

篇4:如何评估和使用Web应用程序安全测试工具?

前些日子的安全事件大多与Web应用程序密切相关,许多单位和个人也由此看到了采取必要措施防护Web应用程序安全的重要性,笔者觉得有必要在采取防范措施之前先对自己的系统进行一次严格的渗透测试。因为一些专业的应用程序渗透测试工具和服务有助于防止自己的网站变成 和恶意软件的桥头堡。

有人认为单位的网站有了Web防火墙的保护就不需要其它保护措施了。这是错误的,因为最近的攻击以及将来的攻击将越来越依赖存在于Web应用程序中的缺陷,这些缺陷通常都包含着易于被利用的漏洞。据有关数据统计显示,如今多数支持外部访问的应用程序都是基于Web的,而其中的多数又都包含着可被利用的漏洞。

所以,在将Web应用程序推向实际使用之前,最好先借助Web应用程序渗透工具测试一下。目前,这类工具多数都可以执行Web应用程序的自动扫描,它们可以实施一些威胁模式测试,从而揭示一些常见的漏洞,例如许多程序可以揭示Sql注入式攻击漏洞、跨站脚本攻击等。有时,这些工具还可以提供一些参数供用户修正所发现的漏洞。

用户需要在攻击者实施破坏之前先对自己“狠”一点。当今的Web 渗透测试已经被多数机构看作是一个保障Web应用程序安全的关键步骤,这种安全测试已经成为机构风险管理的至关重要的部分。否则,单位就是将这种“测试”拱手交给了 。

而如今的安全测试市场并没有绝对的标准,所以有必要探讨一些评估和使用这些工具的服务和方法。(本文所涉及的Web应用程序渗透测试工具也指Web应用程序扫描工具)

三个要素

1、使用者:

由于其复杂性,将保障Web应用程序的安全性的责任分配给适当的人员并不是一件简单的事情。对开发人员和咨询人员来讲,这可谓是一个新的概念。安全管理成员也许更熟悉网络问题,而不是应用程序问题。那么,谁来做这件事情呢?笔者认为,由安全专家们实施测试,然后将结果交给开发人员的做法并不明智,甚至难以实施。不过,这正是目前许多公司正在使用的方法,至少在开发人员乐意使用这种工具之前是这样的。

如有的信息安全专家就承担了Web应用程序安全的责任,他们相信维护和保障企业网络安全最终是他们的责任,所以不必由应用程序的开发人员解决漏洞问题。如果开发人员说,不要紧,我检查一下,应该没事儿的。你怎么办呢?

试想如果我们将测试工具将由开发人员使用,他检查出来的安全报告篇幅又较长,还不把他们给吓坏了?实际上,安全团队可以帮助开发人员使用这种工具。安全人员由于具备了专业的知识和技能,也就能够区分安全问题的优先顺序和严重程度,并可以编辑这些报告,从而便于开发人员实施修正措施。如果由开发人员自己解决这些问题,如果发现了200个问题,他又如何判断哪些是高风险的漏洞,哪些是低风险的呢?

所以,先要决定这种漏洞扫描程序给什么人用的问题。

2、这种扫描的性质:

也就是要看它是一种工具还是一种服务?用户可以购买相关工具,并投入资源来打造一个强健的测试机制,或者通过一个厂商来远程扫描企业的Web应用程序,验证所发现的问题并生成一份安全聚焦报告。但由于控制、管理和商业秘密的原因,许多公司喜欢自己实施渗透测试和扫描,但专业的扫描服务将会不断发展壮大。

公司也可以选择兼而用之。如有的安全管理人员自己先不使用安全测试,而是委托其它的专业厂商进行。特别是在发现自己的公司并没有这方面的专业人员来管理安全测试所生成的海量数据时,这应该是一个明智的选择。否则,企业会发现受到许多似是而非的东西的影响,并不能得到真正漏洞的完整报告分析。企业可以求助于专业的公司分析测试结果,并与开发人员协商来修正问题。在逐渐熟悉这种服务或工具之后,企业可以扩展这种工具的使用,并且可以采取一种三步走的方法,

第一步,开发人员测试代码,并与安全测试厂商协调。第二步,安全管理人员用安全测试工具进一步测试程序。第三步,将应用程序推向互联网,由专业的测试公司或工具来实施测试。

3、如何整合?

这些工具在通过本地化方式或通过应用程序接口(API)与开发人员或咨询团队所使用的其它系统整合后,运行起来将达到最佳状态。如与内容管理工具、项目管理工具等工具的整合,从而也便于跟踪并修正其它方面的代码缺陷。如与微软的可视化开发开台Visual Studio.net的集成,就可使开发人员从其桌面上执行扫描,它的使用界面类似于其开发工具的界面。

最好的工具应当能够将结果直接导出到一个静态代码扫描工具中。这正是Web应用程序测试工具可以告诉用户是什么性质的漏洞,但却并不查明代码中是哪个位置有问题的原因。

10个评估标准

一款优秀的测试工具总有其自身的独特性,但不同厂商的扫描技术原理大同小异,其不同点也不过在于下面的这些特性:

1、与软件开发、生产过程、平台的高度集成。

2、可管理部署的多种扫描器。

3、针对不同环境进行调整的能力。

4、提供除应用程序扫描之外的特性和服务,如扫描源代码、其它的一致性分析、自动漏洞修正等,还可对进程设计提供帮助等。

5、漏洞检测和纠正分析。不但应当报告漏洞,还应当以一种开发人员可以理解的语言和方式来提供改正建议。这种扫描器应当能够确认被检测到漏洞的网页。并尽量排除那些似是而非的东西。

6、持续有效地更新其漏洞数据库。因为时过境迁,总有新的攻击出现,供应商应当根据新出现的漏洞更新其数据库。

7、报告和分析。这种工具应当能够有助于对检测到的漏洞进行分类,并根据其严重程度对其等级评定。此外,还要有漏洞的详细解释、建议的解决方案、到达现有补丁的链接等。这种报告最好还能够满足应用程序开发人员和不同水平的安全专业人士的需要。

8、非安全专业人士也易于上手。

9、协议支持:如今的多数扫描器仅使用HTTP协议来探测支持Web的应用程序。然而,如果它还支持其它协议的话,如增加SOAP协议等。就会极大地增加其可用性。

10、这种工具应当支持常见的Web服务器平台,如IIS和Apache,以及ASP、JSP、ASP.net等网络技术。

使用渗透测试工具的四个注意事项

首先,要保证贵公司不仅仅要投资于扫描工具,还要加强培训、员工管理,并围绕着发现和修正漏洞制定强健的进程。有些单位在拿到工具之后,不管三七二十一,就针对Web应用程序实施扫描和测试,却没有教育测试人员如何测试,也不花费点时间来教育员工如何配置,如何使用相关的插件来强化这种测试。这是盲动的表现。

第二、不要期望开发人员马上就喜欢这种工具。许多开发人员可能对这些工具所提示的安全状态不感兴趣或不屑一顾。企业应当关注如何让员工认识到所揭示内容的严重性和风险。

第三、要认识到这种工具的局限性。一些人相信,只要这些工具没有发现问题,他们就可以高枕无忧了。但笔者要说的是,这只能说明你的系统也许并不存在这些特定的问题。因为任何工具都不可能包含过去和未来的所有漏洞清单,所以这种工具并不是包治百病,从一定意义上讲,它们有时确实无能为力。单靠一种工具并不能发现所有的问题,经常出现这种情况,用一种漏洞扫描工具发现的漏洞,用另外一种漏洞扫描工具却无法发现。所以还需要人力资源来确认问题的存在。

第四、要真正认识到,安全并不是权宜之计,不是忙完了这阵子就算完。因为Web应用程序是动态变化的,企业需要经常地、不断地测试和检查,以保障不会出现新的漏洞。如有的单位每隔一个星期就扫描一下。笔者认为,只要人力、物力许可经常检测应当是一件好事。

安卓应用商店用户调查报告

面试自我介绍宝典

后台开发英文简历

苹果iOS和谷歌安卓用户界面风格对比及技术总结

软件公司实习报告

从零开始学Oracle―约束

新课标高一必修2 Unit 3 Computer―教案3

如何系统游有效学习java基础

4月软件公司实习报告总结

网络营销方案策划书的内容包括

从零开始学Android应用安全测试(Part1)
《从零开始学Android应用安全测试(Part1).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【从零开始学Android应用安全测试(Part1)(精选4篇)】相关文章:

网络营销方案策划书2023-02-05

android简历怎么写2023-10-26

软件工程英文简历表格2023-03-09

安卓实习心得感悟2023-08-22

安卓论文开题报告2022-09-16

工程师实习报告2022-05-14

软件工程实践报告2022-04-29

android实训实习报告总结2023-04-03

android实训心得体会2023-07-17

安卓论文总结报告2022-04-30

点击下载本文文档