app安全浅谈

admin 2022年5月12日09:10:58评论6 views字数 3434阅读11分26秒阅读模式

一、背景

随着手机的快速发展,智能设备得到了很大的普及,小到手机、一副眼镜和一块手表,大到智能TV和汽车上的智能设备,Android系统已经深入到各个方面,形成了一个IT生态系统。人们的使用习惯也从pc端慢慢转移到移动端。企业为了快速占领市场,忽略了很多安全问题。

二、App现状

大部分APP开发人员缺乏安全知识,同时伴随着快节奏的敏捷开发,安全问题不言而喻。现阶段市场上主流的APP防护手段:加壳、代码混淆、so库加密、资源文件加密等等。这些加固手段需要不小的成本,小企业很难负担,只有少数大企业有专门的加固工程师。所以,很多应用采用市面常见的加固产品对app进行加固,这样,也只能起到一定的防护作用,很难抵御日益复杂的攻击。

三、app分析

移动应用程序是特定于平台的,实际上甚至可以提供特定于设备的功能。它们位于完整的移动操作系统之上,可以与其他移动应用程序进行交互;其中一些可能是恶意的。移动应用程序收集了大量网络应用程序没有的数据,移动设备往往随身携带。大约 98% 的 Web 应用程序在防火墙后面运行,在浏览器或客户端上运行的代码最少。然而,所有移动应用程序都在野外运行的设备上运行,几乎没有内置的安全或保护。这为黑客创造了一个更大、更容易的攻击面,并增加了渗透测试的复杂性。

四、面临的威胁

4.1 客户端

客户端主要涉及反编译:对AndroidManifest.xml文件反编译获取配置详情,对classes.dex文件反编译获取java源代码、对*.so文件反编译获取核心逻辑。

篡改/打包:对反编译的app,进行资源文件更改、代码逻辑更改,之后重新打包,从而进行盗版、供应链攻击等等非法活动。

动态调试:通过动态调试,熟悉app的业务流程、内部运行的逻辑和原理。可以对组件进行越权调用或者劫持,从而访问一些无权访问的页面、或者敏感数据。

HOOK:中文译为“挂钩”或“钩子”。通过hook可以让app程序执行自己所写的代码,改变app程序运行逻辑。从而绕过各种限制,比如绕过密码、破解内购等等。

4.2 数据

手机本地存储数据的安全;
使用过程内存中数据的安全;
使用过程中和其它设备或服务端交互数据的安全;

4.3 服务端

app的服务端和web类似,不同的是app更多采用api接口的方式。同样,常见威胁参照OWASP Top10

五、关于app渗透测试

站在攻击者的角度并利用移动应用程序,可以深入了解组织的安全状况和风险。全面的移动应用程序业务渗透提供了关于严重性、被利用的目标和影响的重要情况。这些信息,安全和开发团队就知道可以根据漏洞的高中低风险,合理安排解决问题的优先级。

5.1 客户端

环境准备

第一种、可以准备一个安卓测试机。
第二种、下载一个安卓模拟器,比如:夜神、雷电、mumu。
接着,是各种工具下载。

静态文件

先说客户端,一个apk文件其实就是一个压缩包,可以直接解压,主要包含以下文件。

文件名

描述

AndroidManifest.xml

应用程序的配置文件

res

存放应用程序的资源

assets

存放需要打包到apk中的静态文件

classes.dex

dex可执行文件,主要存放java源码

lib

程序依赖的native库,主要是so文件

META-INF

存放应用程序签名和证书的目录

resources.arsc

资源配置文件

AndroidManifest.xml:是Android应用程序的配置文件,一般都把代码中的每一个Activity,Service,Provider和Receiver在AndroidManifest.xml中注册,只有这样系统才能启动对应的组件,另外这个文件还包含一些权限声明以及使用的SDK版本信息等等。一般用工具AXMLPrinter反编译获取源文件。审计配置不当的组件或者权限。
classes.dex:一般用工具dex2jar反编译获取java源码,分析程序逻辑,动态调试等等。
resassets存放一些资源和文件,比如各种图标,网页模板等等。可以对资源文件进行修改,然后二次打包。
lib:一般是用C/C++编写的二进制文件,这里存放应用程序依赖的native库文件。通常用IDA进行分析。
resources.arsc:用来记录资源文件和资源ID之间的映射关系,用来根据资源ID寻找资源。可以直接用记事本打开此文件,里边可能会有一些敏感信息泄露。

组件

对于app的组件,一般用drozer进行测试,此工具不仅可以对几种组件进行枚举、调用,自身还集成了一些漏洞扫描插件。
app一般有4种组件组成:activity、service、Broadcast receivers、content provider

activity:在Android apk里面activity是一个UI的概念,一个应用程序可以拥有多个Activity。实际上一个Activity就是一个窗口,而里面的内容就是各种view了。常见漏洞:界面劫持、界面越权访问等等。
service:就是常见的服务。常见漏洞有消息伪造、service劫持、权限提升等等。
Broadcast receivers:Broadcast Recevier 广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统代码的──比如,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。
常见漏洞有敏感信息泄露、权限绕过、消息伪造等等。
content provider:提供一个公共接口让应用程序将本身的数据共享出来,其他应用可以根据这些公共接口访问这些数据。它提供了一个适配口contentresolver,应用程序通过这个适配来操作content provider。
常见问题有明文存储敏感信息、目录遍历、SQL注入等等。

Hook

Hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。

app常用的Hook工具是frida。大致分为java层Hook和active层Hook。
过程:找到Hook点 -> 编写Hook代码 -> 进行Hook
渗透测试中的Hook,通常是改变函数返回的结果,有点类似web的中间人劫持。

5.2 数据

数据的话,主要就是在系统中存储了明文敏感信息,主要从以下几个位置查找:
/data/data/包名/:程序运行后所有的数据都在这个目录下存放着,有运行日志、包括程序创建的数据库文件,也在这个目录下边。可以把数据库文件用数据库工具打开,查看里边是否包含敏感信息、未公开接口等等。
安卓系统内存:程序是运行在安卓系统的内存中的,在运行过程中,可能会涉及一些数据处理和传输,查看内存中是否有敏感信息。可以直接使用adb工具对内存进行抓取。
传输过程中:包括app程序和服务器的交互、app程序和其他程序的交互等等。可以通过程序源码,分析传输用到的协议,是否存在被逆向的风险。

5.3 服务端

服务端渗透测试的话,最常用的工具就是Burpsuite了。对交互数据包进行拦截和修改、重放等操作。

常见漏洞:XSS注入、sql注入、跨域资源访问、服务端请求伪造和逻辑漏洞等等。

在对app服务端进行渗透测试过程中,最常碰到的问题就是抓不到包。有的是程序使用了自定义协议进行数据传输,有的是程序检测到开启代理停止运行。

接着,即使抓到数据包,传输的参数的值也是经过加密的,无法得知传输的是什么,也没办法修改。

可以通过Hook的办法,在程序中对传输的内容进行查看和修改。

六、未来展望

总体组织都了解应用程序渗透测试降低风险、支持合规维护企业品牌和战略的发展。综合网络防御战略的这一基本要素使企业能够在攻击者之前发现并修复安全、隐私和合规性漏洞。同时,团队都在努力构建能够有效控制速度、深度和成本的移动应用程序测试程序。报告遗漏了一个主要漏洞并让产生了错误的安全在其他情况下,他们内部有能力移动专业或完成手动评估的工具。因此,这个过程需要很长时间的知识,因此推迟了重要的移动应用程序的发布,或者安全测试人员不得不加班加点来完成工作。无论公司是外包移动应用测试还是基于内部应用安全进行测试,许多公司都在努力平衡时间、成本和范围。未来,需要复杂的知识、手工参与度高的渗透测试,定由专业和正确的工具所替代。以实现高效、可重复的流程,满足对时间、成本的要求。

原文始发于微信公众号(云智信安云窟实验室):app安全浅谈

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月12日09:10:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   app安全浅谈https://cn-sec.com/archives/1000529.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息