科技>计算机>操作系统
Android安全攻防实战

Android安全攻防实战"

作者:崔孝晨,武晓音
ISBN:9787121261077
定价:¥79.0
字数:392千字
页数:320
出版时间:2015-07
开本:16(185*235)
版次:01-01
装帧:
出版社:电子工业出版社
简介

Android是目前最为主流的移动设备操作系统,占据了全球近84%的市场份额。因此,Android系统中的安全问题也就变得十分重要。 本书通过大量极富针对性的实验,通过对常见的安全场景中解决方案的讲解,帮助读者全面掌握各种攻-防实用技能。因而,本书的实用性也很强,即使是一时不能完全理解其中的技术原理的新手,根据作者给出的方法,也能解决实践中遇到的大部分问题;而高手也能从中借鉴到一些好的做法。 全书共分九章,涵盖了基本的Android开发环境和工具;app组件之间及它们与系统的交互方式;Android安全评估框架“drozer”;app及Android原生代码的逆向技巧;各类漏洞的利用及防护方式;使用SSL在网络通信中进行更有效的验证;利用第三方代码库或Android中新增的特性,通过加密和在开发时使用设备管理策略,加固app等内容。

前言

译者序 ¬¬ 这是一本Android安全的实训教材,你甚至可以把它当成参加一次专家手把手的专题培训! 自从Android操作系统成为移动平台上的两大主流操作系统之一后,Android系统的安全性就受到了广泛的关注,确实也出版过几本Android安全方面专著,但是这些著作实在是太高大上了一些,一般都是要从高深的原理讲起,吓跑了许多对它感兴趣的爱好者。即使有人硬着头皮看下去,也如坠云里雾里,短期内无法把学到的知识,融会贯通地运用到实践中去。更别提那些只是不想让自己的代码沦为别人的“炮灰”的程序员了,他们确实学到了一些黑客知识,但是面对这些攻击时,又该怎样防护自己编写的代码呢? 本书的英文原名为《Android security cookbook》。其中的单词“cookbook”是“菜谱”的意思,也就是在给定场景下,如何进行操作的操作指南。顾名思义,书中的内容也就是针对典型的Android安全攻-防场景,通过实验来说明Android安全技术原理的。利用这种教学方法,能使学员快速上手,通过相对简短的培训,解决大部分实践中可能遇到的问题。由于本书同时也计划作为我校“网络安全与执法”专业“移动平台安全”课程的实训教材,所以我将书名直接译为《Android安全实验教程》。 实用性是本书最大的特色。除了常规工具外,作者还介绍了开源的Android安全评估框架“drozer”,利用这个工具,你不仅可以“敲一、两个命令”就能完成以前要花很大代价才能搞定的活。有经验的安全研究人员还能为自己定制开发一些针对特定问题的插件,让自己活得更滋润些。而且,由于这个框架能够暴露出Android app内部实现的许多细节,随着你越来越熟练的掌握这一工具,你对Android的理解也一定会越来越深入。 对于想要寻找代码加固方案的程序员来说,本书中更是针对常见的攻击方法,提供了详细且极富操作性的代码加固建议,其中不光有系统中自带的库或新增的特性的使用方法,也介绍了不少开源的库,通过对它们的使用,能把你的软件的安全性提高到一个新的级别。 本书的作者也不是光说不练的嘴把式,他们都是Android安全圈中的大牛,作者Keith Makan就是多个0day漏洞的发现者,数次入选谷歌应用安全名人堂(Google Application Security Hall of Fame);而作者Scott Alexander-Bown也是移动app开发、逆向和加固方面的专家,在多个国际会议上做过演讲。 单词“application”在书中,既是指用Java语言编写的Android应用,也指使用Android NDK编写的原生(native)应用程序,显然,在翻译时,将它们不加区分的全部译为“应用”或“应用程序”是不合适的。为了表示其中的区别,在翻译中,我们将用Java语言编写的Android应用一律译为“Android app”,而用Android NDK编写的原生应用程序则全部译为“应用”。 全书由上海公安高等专科学校的教师教官翻译完成的,全书共九章,分工安排如下: 第一至第四章由武晓音同志翻译,第五至第九章由我翻译。全书翻译完成后由我统一审校。 本书中文版的面世,特别要感谢博文视点的各位编辑老师,特别是顾慧芳、刘皎老师,感谢你们对我的一贯支持和耐心的指导,使我从中获益良多!同时也感谢你们为本书的出版所花费的大量时间!此外,也要感谢Team509安全研究小组的朋友们在本书翻译时给予的宝贵建议! 由于翻译时间仓促,书中存在错误在所难免,敬请读者不吝指正。 崔孝晨 2015年2月 前言 ¬¬ Android已经快速地成为了最主流的移动操作系统之一——这不光是对用户而言,也是对开发者和所有类型的公司而言的。当然也正是因为这个原因,它也成了恶意敌手眼里的一块肥肉。 自从2005年进入公众视线时起,Android在功能和复杂性上都有了长足的进展。移动智能手机中一般都存有其使用者的非常敏感的信息,而且还能访问他们的电子邮件、短消息,以及公共网络和专门网络的服务。就像其他所有软件一样,在功能和复杂性增长的同时,也会增加安全风险。软件越强大,越复杂,人们就得越努力地应对和适应险恶的大千世界。 这一点还特别适用于移动智能手机上的软件。这些存放私人信息和隐私信息的温床,必然存在于我们十分关心的一个安全的上下文环境中,同时,我们也要在这一环境中解决问题。从一方面看,移动智能手机的安全上下文环境,与网上的或“云”中的服务器中的安全上下文环境是截然不同的。因为究其本质而言,网上的或“云”中的服务器是不会移动的。它们不会被轻易地搬走或偷走。我们可以同时强制执行软件的和物理的防护措施保护它们,使之未经许可就不能被访问。我们也可以一直监视它们,并及时响应各个安全应急事件。但是对于我们经常放在口袋或手提包里,带着到处跑,还会被落在出租车里的设备来说,游戏规则就完全变了。 Android的用户和开发者需要持续关注他们的移动安全风险,而正是因为这一原因,对移动安全和风险评估专家和安全工程师的需求也一直是很旺盛的。本书致力于降低成为Android安全评估专家之初的学习难度,并希望成为经验丰富的Android安全专业人士手中的工具,帮助他们解决常见的Android安全问题。 本书的内容 第1章“Android开发工具”介绍了安装和运行开发者用来编写Android app和Android平台上的原生级组件的工具。这一章也为那些想要了解如何搭建常用的Android开发环境和相关工具的新手做了一个大致的介绍。 第2章“实践app安全”介绍了Android操作系统提供的,专门用来保护app的组件。这一章里将讨论:(对app的)手工检查和一些用来保护app的安全相关的工具和服务的使用方法,以及用它们与操作系统交互的方法。 第3章“Android安全评估工具”介绍了一些主流(新的或即将发布的)安全工具和框架,Android安全专业人士可以用它们来评估app暴露给用户的技术风险。在这一章里,你将学到如何安装、运行和扩展本书之后的这些章节中会使用到的黑客和逆向工程工具的功能。 第4章“利用app中的漏洞”介绍了针对Android app的目的漏洞利用技术的框架。这一章的内容涵盖了所有类型的Androidapp组件,从源码和app间上下文关系的角度,详述了如何检查这些组件的安全风险。另外,这一章里还将介绍在第 3 章“Android安全评估工具”中介绍的工具的一些高级用法。 第5章“保护app”的写作目的与第4章“利用app中的漏洞”的目的是完全相反的。这一章并不光讨论app中的漏洞,也讨论如何修补它们。它将引领读者学习那些开发者能够用来保护他们的app,免受第4章“利用app中的漏洞”中详细描述的一些攻击危害的,有用的技术。 第6章“逆向app”帮助读者学习如何破解app並教授他们Android逆向工程师用来检查和分析app时所使用的技术。你将会非常详细地学到Dex文件的格式,以及如何把Dex字节码解析成易于进行逆向工程的更有用的表示形式。这一章里也会介绍一些逆向工程师用来动态分析app和运行在Android操作系统上原生组件的新奇的方法。 第7章“网络安全”帮助读者深入研究一些app开发者能用来保护他们通过网络传输数据的实用方法。使用这些技术,你可以在安全套接字层(Secure Sockets Layer,SSL)通信中添加更有效的验证。 第8章“原生代码中漏洞的利用与分析”专门用来讨论关于Android平台上原生可执行程序的安全评估和测试技术。读者将会学到怎样去寻找能用于root手机和在Android系统中提权的安全漏洞——那些能用来对原生服务进行包括内存溢出攻击和利用竞争条件漏洞在内的底层攻击的漏洞。 第9章“加密与在开发时使用设备管理策略”将专注于如何正确地使用加密技术和避免一些常见的错误做法,以保护你的app中数据的安全。这一章中将给你使用几个健壮的,帮助你节省开发时间的第三方库,来快速且安全地加固你的app的安全性的建议。为了使讨论内容完整,我们还将介绍如何使用Android设备管理API,来实现和强制执行企业安全策略。 阅读本书时所需的软件 虽然,在阅读本书时需要使用一些软件,但是在本书的许多实验里,在真正下载和用这些软件做实验之前,都讨论了下载和安装它们的方法。 话虽如此,但在开始做实验之前,你可能还是最好先准备好下列软件: The Android Software Development Kit (SDK); The Android Native Development Kit (NDK); GNU C/C++ 编译器(GCC); GNU 调试器(GDB); Python,最好是2.7,3.0可能有时会无法正常工作; Virtual box; Ettercap (for Windows版的或Linux/UNIX版的); Dex2Jar; Objdump; Radamsa; JD-GUI; The Java Development Kit (JDK); drozer,一个Android 安全评估框架; OpenSSL 命令行工具; keytool命令行工具。 这本书是写给谁的 本书中有些章节是专门用来讨论如何利用Android app中漏洞的,而另一些章节则讨论如何加固它们。本书的目标是:同时展示硬币的两面——攻击和防御。 安全研究人员,分析师和渗透测试人员会喜欢如何利用Android app中漏洞的部分。而想要学习更多安全方面知识的app开发者,将会从保护app免受攻击危害的部分中获得切实可行的建议。 字体风格约定 在这本书中,你会看到一些不同排版风格的文字——这些不同的排版风格是用来区分各类不同的信息的。下面是一些排版风格的样例及对其所表示的意思的解释。 文字中的“Code word”字体的部分,表示数据库中表的名字、目录名、文件名、文件扩展名、路径、URL和用户的输入。比如:“上一步中你选中的系统镜像的ID可以用-t参数来指定”。 代码块是像下面这样表示的: from drozer import android from drozer.modules import common, Module class AttackSurface(Module,common.Filters, common.PackageManager): 如果我们希望你注意代码块中的某些部分,那么相关的行或语句就会被加粗: from drozer import android from drozer.modules import common, Module class AttackSurface(Module,common.Filters, common.PackageManager): 命令行窗口中的输入或输出,则被表示成这样: sudo aptitude update //如果你已经装好了aptitude 第一次出现的术语和重要的单词会被加粗。在正文中,你会在屏幕上,菜单栏或对话框中看见的文字,也会像这样出现:“当你同意了用户许可协议之后,你可以单击“安装”按钮,收集你的文档和API”。 警告或重要的提示会出现在这样的地方。 小窍门或小技巧会这样显示。 读者反馈 我们总是欢迎你——亲爱的读者提出宝贵的意见。请让我们知道你对本书的看法——无论你喜欢还是不喜欢。反馈意见对我们今后出版你真正最需要的东西是非常重要的。 如果只是一般的意见,请给feedback@packtpub.com发送电子邮件,并在主题中注明书名即可。 如果你对某个主题特别有研究,或者你有兴趣写一本书或投稿,请移步我们的作者指南页面www.packtpub.com/authors。 售后服务 你现在已经是尊贵的Packt book的客户了。我们愿意为你的购买提供全面的服务,使你获得更多东西。 下载示例代码 你可以在网站http://www.packtpub.com你的账户中,下载所有你已经购买了的Packt books的示例代码。无论你是在哪里购买这本书的,你都可以用你的电子邮箱注册一个账号,访问http://www.packtpub.com/support页面。 勘误 尽管我们已经非常仔细地校对了稿件,但错误仍然是不可避免的。如果你在我们的书中发现了错误——不论是文字,还是代码错误——都请告诉我们,我们将感激不尽。这样做,你不仅可以帮助其他读者免受错误的困扰,也能帮助我们改进这本书后续版本的质量。如果你发现了任何错误。请访问http://www.packtpub.com/submit-errata网页,选中你的书籍,单击“errata submission form”链接,并输入你发现的错误的详细信息,把它告诉我们。一旦你报告的错误被确认之后,你的意见将会被接受,该错误也会被发布在我们的网站上,或被添加到一张该书籍的勘误表中。在http://www.packtpub.com/support网站中选中您的书目,就能看到所有目前已知的错误。 版权 互联网上,可复制媒体的版权保护问题是个一直困扰着所有媒体的问题。在Packt,我们是非常严肃地对待版权保护和用户许可协议问题的。如果你在网上发现任何非法复制我们的书籍的情况——无论是以何种形式,请立即通过我们公司的地址或网站联系我们,以便我们采取补救措施。 请通过邮箱copyright@packtpub.com联系我们,并附上疑似盗版材料的链接。 我们感谢你为保护我们的作品而提供的帮助,并且我们也将尽我们的所能,向你提供物质回馈。 疑难解答 如果你对本书的任何方面有所疑问,请通过邮箱questions@packtpub.com联系我们,我们将尽力去解决它。 作者简介 ¬¬Keith Makan 以前他是计算机科学和物理学专业的学生,现在是狂热的业余爱好者和安全研究员。他把绝大多数业余时间都用在了阅读源码、逆向工程、fuzz测试和编写Web应用技术中的相关漏洞的利用代码上。 Keith工作起来就像是一个IT安全评估专家一样专业。他的个人研究已经使他多次入选“谷歌应用安全名人堂”(Google Application Security Hall of Fame)。他还编写了谷歌Chrome的WebKit XSSAuditor,火狐浏览器的NoScript插件中漏洞的利用代码。此外,他还数次报告了WordPress插件中的漏洞,并写出了相应的利用工具。 我要感谢我的妈妈、爸爸以及其他支持我疯狂的想法,并总是给我极大鼓励的家人们。 Scott Alexander-Bown 他是一名在金融服务,软件开发和移动app客户端开发方面有着丰富经验的研发高手。他一直沉湎于Android之中,热爱移动app安全。 Scott目前是一位高级开发人员,专长于移动app的开发、逆向工程以及app加固。他也热衷于发表与app安全相关的演讲,活跃在多个国际移动app开发者大会上。 最重要的,我要感谢我的妻子Ruth,没有你的爱和鼓励,我将一事无成。我爱我们的儿子Jake,他的笑声和可爱的笑脸是我前行的动力。 此外,我还要感谢以下诸公: Keith, Barbara,Kirk Bown,Mhairi和Robert Alexander ,感谢你们给予我的爱和支持。 Andrew Hoog 和viaForensics 小组的成员,感谢你们在移动安全领域的支持、洞察力和经验。 Mark Murphy, Nikolay Elenkov, Daniel Abraham, Eric Lafortune, RobertoTyley, Yanick Fratantonio, Moxie Marlinspike, the Guardian Project和the Android 安全团队,你们博客中的文章、论文、演示和/或示例代码对于学习Android安全是很有趣且非常有用的。 感谢Keith Makan 的热心和指导,在你的带领下,我才能完成本书的编写。 感谢本书的各位技术审校对细节的关注和极具价值的反馈意见。最后,感谢您——亲爱的读者——我希望,您能从本书中获益,并由此写出更安全的app。 审稿人简介 ¬¬ Miguel Catalan Bañuls是一名年轻的工程师,他唯一的梦想是希望自己的努力能为世界的改变做出贡献。他是一名软件开发人员,也是一名团队的带头人。 他拥有工业工程学士学位,是Geeky Theory的合伙人。他还是Miguel Hernandez大学(西班牙分校)的IEEE学生分会的副会长。 我想感谢我的妻子与父母,感谢他们对于我工作的理解与宽容。 Seyton Bradford是一名在移动设备安全和取证上有着超过10年经验的软件开发人员和工程师。 目前,他在viaForensics任高级软件工程师,主攻app和移动设备的安全性。 他的作品在全球各地均有出版,同时还是多部学术期刊的评审。 感谢我的家人及朋友对我事业与工作的支持。 Nick Glynn目前受聘担任技术培训师和顾问,在英国和世界各地提供关于Android、Python和Linux的课程和专业知识。他在许多领域,无论是主板启动代码、Linux驱动程序开发和系统开发,还是全栈部署、Web应用程序开发,以及Linux和Android平台的安全强化,都拥有丰富的经验。 我要感谢我家人给我的爱,感谢我漂亮的宝贝女儿,是你照亮了我的生活。 Rui Gonçalo就读于葡萄牙布拉加的Minho大学,他现在正在完成Android安全领域的硕士论文。他正在开发一项新功能,旨在使用户能以非常细的粒度,控制互联网连接。他对移动安全的浓厚兴趣源于大学里“密码学”和“信息系统安全”这两门课程,在几次有关的活动中他得到了这一领域里葡萄牙最重要的公司的支持。他建议渴望成为安全领域专家的Android安全初学者把这本书作为必读书目。 我要感谢Packt出版社负责此书的工作人员,是你们让我完全相信,对移动安全的研究会占满我对探索软件世界的所有好奇心。 Elliot Long从小在硅谷长大,2005年起就编写了多个移动app。他是移动旅游线路生成软件mycitymate SL/GmbH的共同创始人。2009他加入了Intohand有限公司,负责Android和黑莓开发。 推荐序 想做一名优秀的英文技术资料译者实属不易,除了要有深厚的英文功底,还需要对所翻译的技术领域有深入的了解,同时还要译者有博大分享之心和躬耕不辍之志。拜读了小崔的最新译作《Android安全攻防实战》后,我更是由衷地感到他对技术与文字的把握已相当娴熟,能受邀为其新作做一推荐也令我甚感荣幸。 我与小崔初识于2003年,彼时他尚在从事电子取证及数据鉴定领域的工作且颇具造诣,待到后来Team509成立,我们便成为了莫逆之交。当时团队的成员各有所长,但小崔一直是最勤奋的一员,其勤奋不仅仅在于对技术孜孜不倦的追求,也在于其不吝花费时间翻译大量的英文技术资料并乐于分享。想来他优秀的翻译功底便是那时练就的吧。之后,他翻译的“大部头”作品便陆续问世,且一部好过一部。 如今,这部新作的推出与当下的移动领域技术潮流匹配得恰到好处,本书可以作为初学者熟悉Android系统攻防的快速入门教程,其中的大量操作实例也可以为高手们提供一些值得借鉴的做法。此书的翻译忠实原意,对原著的意思把握得十分准确,语言生动活泼,令人读起来十分愉快。希望读者能够喜欢,并从中受益。 2014&2015pwn2own winner Team509创始人之一 赵泽光 2015年5月

目录

目录 ¬¬ 第1章 Android开发工具 1 1.1 简介 1 1.2 安装Android开发工具(ADT) 2 1.3 安装Java开发包(JDK) 5 1.4 更新API资源 9 1.5 另一种安装ADT的方法 11 1.6 安装原生开发包(Native Development Kit,NDK) 15 1.7 虚拟Android设备 16 1.8 使用命令行创建Android虚拟设备(AVD) 19 1.9 使用Android调试桥(ADB)与AVD交互 21 1.10 从AVD上复制出/复制入文件 22 1.11 通过ADB在AVD中安装app 23 第2章实践app安全 24 2.1 简介 24 2.2 检查app的证书和签名 24 2.3 对Android app签名 33 2.4 验证app的签名 37 2.5 探索AndroidManifest.xml文件 37 2.6 通过ADB与activity管理器交互 47 2.7 通过ADB提取app里的资源 50 第3章 Android安全评估工具 56 3.1 简介 56 3.2 制作Santoku启动盘和安装Santoku 58 3.3 安装drozer 62 3.4 运行一个drozer会话 71 3.5 枚举已安装的包(package) 72 3.6 枚举activity 78 3.7 枚举content provider 80 3.8 枚举service 83 3.9 枚举broadcast receiver 85 3.10 确定app的受攻击面(attack surface) 87 3.11 运行activity 89 3.12 编写drozer模块——一个驱动枚举模块 91 3.13 编写一个app证书枚举器 94 第4章利用app中的漏洞 98 4.1 简介 98 4.2 收集logcat泄露的信息 101 4.3 检查网络流量 106 4.4 通过activity manager被动嗅探intent 111 4.5 攻击service 117 4.6 攻击broadcast receiver 121 4.7 枚举有漏洞的content provider 123 4.8 从有漏洞的content provider中提取数据 126 4.9 向content provider插入数据 129 4.10 枚举有SQL-注入漏洞的content provider 131 4.11 利用可调试的app 134 4.12 对app做中间人攻击 139 第5章保护app 146 5.1 简介 146 5.2 保护app的组件 147 5.3 通过定制权限保护组件 149 5.4 保护content provider的路径(path) 152 5.5 防御SQL注入攻击 155 5.6 验证app的签名(防篡改) 157 5.7 通过检测安装程序、模拟器、调试标志位反逆向工程 161 5.8 用ProGuad删除所有日志消息 164 5.9 用GexGuard进行高级代码混淆 168 第6章逆向app 173 6.1 简介 173 6.2 把Java源码编译成DEX文件 175 6.3 解析DEX文件的格式 177 6.4 解释Dalvik字节码 194 6.5 把DEX反编译回Java 202 6.6 反编译app的原生库 205 6.7 使用GDB server调试Android进程 207 第7章网络安全 211 7.1 简介 211 7.2 验证SSL自签名证书 212 7.3 使用OnionKit库中的StrongTrustManager 221 7.4 SSL pinning——限定受信SSL的范围 223 第8章原生代码中漏洞的利用与分析 231 8.1 简介 231 8.2 检查文件的权限 232 8.3 交叉编译原生可执行程序 241 8.4 利用竞争条件引发的漏洞 249 8.5 栈溢出漏洞的利用 254 8.6 自动fuzzing测试Android原生代码 261 第9章加密与在开发时使用设备管理策略 274 9.1 简介 274 9.2 使用加密库 275 9.3 生成对称加密密钥 277 9.4 保护SharedPreferences数据 281 9.5 基于口令的加密 283 9.6 用SQLCipher加密数据库 287 9.7 Android KeyStore provider 290 9.8 在开发时使用设备管理策略 293

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个