交易所安全测试(十)丨APP安全 · 下篇
lipiwang 2024-11-04 14:32 13 浏览 0 评论
一. 概述
如今,随着人们使用手机,平板等移动端设备上网的时间与频率增加,移动app的发展也是愈来愈迅速。各大交易所在与用户交互的这方面,除了网页浏览以外,也就是移动端的app了。
尽管app时下相当流行,但其安全性却一直没有得到足够的关注。在app安全的领域上,大部分厂商都做得比较初级,很多用户也不具备相对应的安全意识。由此,app也就变成了恶意攻击者的一个有效突破口。
零时科技安全团队在经过大量对app进行的安全测试之后,总结出了一份相对完整有效的测试列表,建议各大交易所以此自查,防患于未然。
二. 测试列表
App安全
- 秘钥硬编码安全检测
- 数据存储安全检测
- 数据传输安全检测
- 日志信息泄露检测
- App组件导出检测
- App组件权限检测
- webview 多项漏洞安全测试
- App Webview DOM 安全测试
- 本地SQL注入安全测试
- SQLite 存储安全审计
三. 案件分析
秘钥硬编码安全
被测试的app,若通信存在加密处理,即可检查源码或者静态资源文件中是否存在硬编码的加密秘钥,从而破解通信加密的数据。
零时科技安全团队在对某交易所app进行安全测试时,检查是否存在秘钥硬编码漏洞,此app请求数据默认是通过请求数据排列,然后加上appkey加上另外一个秘钥进行md5,再通过算法后去字符串再次md5得到最后的签名。
这里加密使用的appkey硬编码到apk中。如下图:
另一个加密key在so文件中,通过逆向可以获取:
这样一来即可通过修改数据后重新签名构造任意数据了,加签也就失去了意义。
(以下为第二个例子。)
零时科技安全团队在对另一个app进行测试时,使用burp工具截取该app传输的数据包,发现响应包内容已经过加密并有base64的特征。
对apk进行逆向获取到加密方式为aes cbc补码方式为pkcs7。
在反编译源码中未查询到aes秘钥相关信息 对apk进行解压 在静态资源文件中发现aes_key与aes_iv。
使用收集到的aes_key与aes_iv 以pkcs7为补码方式构造aes cbc解密获取到明文数据。
数据存储安全
如果安卓手机用户的app文件存放在external storage,例如SD卡,那这些文件就是全局可读写的,external storage可以被任何用户操作,且可以被所有的应用修改使用。
零时科技安全团队在对某交易所app进行安全测试时,使用动态方法监测/data/data/<packagename>/目录下所有生成的目录是否带有明文信息泄露。
进入到/data/data/com.xxx.wallet/shared_prefs目录,查看config.xml文件,此文件存储了用户的支付信息等非常敏感的信息,而这些信息可被其他用户接触导致信息被盗取等。
零时科技安全团队建议,app的敏感数据不要存放在external storage,如若不得不这样做,请对数据进行加密处理。
日志信息泄露
在APP的开发过程中,为了方便调试,通常会使用log函数输出一些关键流程的信息,这些信息又通常会包含敏感内容,如执行流程、明文的用户名密码等。这会让攻击者更加容易的了解APP内部结构方便破解和攻击,甚至直接获取到有价值的敏感信息。
零时科技安全团队在对某交易所app进行安全测试时,检测存在漏洞,程序中使用Log.v、Log.d、Log.e、Log.i、Log.w、Log.f、Log.s函数对日志信息输出,在反编译apk后,在源码中查找到日志信息输入接口函数,如下图:
零时科技安全团队建议各大交易所app开发人员移除Log打印。
App组件导出检测
检测app中Activity、activity-alias、service、receiver组件对外暴露情况,如果检测到组件的exported属性为true或者未设置,而且组件的permission属性为normal或者dangerous或者未设置组件的permission属性时,app将存在组件导出漏洞,导致数据泄露和恶意的dos攻击以及钓鱼攻击。
零时科技安全团队在对某交易所app进行安全测试时,检测到该app存在Activity组件导出漏洞。
检测app中Activity、activity-alias、service、receiver组件对外暴露情况,先检测组件的exported属性,再检测组件的permission对应的protectionlevel属性。
具体检测存在漏洞的方法如下:
零时科技安全团队建议:
- 最小化组件暴露。对不会参与跨应用调用的组件添加android:exported=”false”属性。
- 设置组件访问权限。对跨应用间调用的组件或者公开的receiver、service、activity和activity-alias设置权限,同时将权限的protectionLevel设置为”signature”或”signatureOrSystem”。
- 组件传输数据验证。对组件之间,特别是跨应用的组件之间的数据传入与返回做验证和增加异常处理,防止恶意调试数据传入,更要防止敏感数据返回。
SQLite 存储安全
此类安全问题的检测,使用adb工具将sqlite数据库拖到本地,使用sqlite数据库连接软件查看是否存在敏感数据即可。如下为零时科技安全团队测试某交易所app发现的漏洞范例。
随着移动互联网的发展,如今移动设备已与我们的生活息息相关,但其安全性却一直没有得到足够的关注。
时不我待, 于无声处听惊雷,守护移动安全从现在开始。
相关推荐
- 前端入门——css 网格轨道详细介绍
-
上篇前端入门——cssGrid网格基础知识整体大概介绍了cssgrid的基本概念及使用方法,本文将介绍创建网格容器时会发生什么?以及在网格容器上使用行、列属性如何定位元素。在本文中,将介绍:...
- Islands Architecture(孤岛架构)在携程新版首页的实践
-
一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:维护/...
- HTML中script标签中的那些属性
-
HTML中的<script>标签详解在HTML中,<script>标签用于包含或引用JavaScript代码,是前端开发中不可或缺的一部分。通过合理使用<scrip...
- CSS 中各种居中你真的玩明白了么
-
页面布局中最常见的需求就是元素或者文字居中了,但是根据场景的不同,居中也有简单到复杂各种不同的实现方式,本篇就带大家一起了解下,各种场景下,该如何使用CSS实现居中前言页面布局中最常见的需求就是元...
- CSS样式更改——列表、表格和轮廓
-
上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。1.列表List1).列表的类型<ulstyle='list-...
- 一文吃透 CSS Flex 布局
-
原文链接:一文吃透CSSFlex布局教学游戏这里有两个小游戏,可用来练习flex布局。塔防游戏送小青蛙回家Flexbox概述Flexbox布局也叫Flex布局,弹性盒子布局。它决定了...
- css实现多行文本的展开收起
-
背景在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景:那么,如何通过纯css实现这样的效果呢?实现的难点(1)位于多行文本右下角的展开收起按钮。(2)展开和收起两种状态的切换。(3)文本...
- css 垂直居中的几种实现方式
-
前言设计是带有主观色彩的,同样网页设计中的css一样让人摸不头脑。网上列举的实现方式一大把,或许在这里你都看到过,但既然来到这里我希望这篇能让你看有所收获,毕竟这也是前端面试的基础。实现方式备注:...
- WordPress固定链接设置
-
WordPress设置里的最后一项就是固定链接设置,固定链接设置是决定WordPress文章及静态页面URL的重要步骤,从站点的SEO角度来讲也是。固定链接设置决定网站URL,当页面数少的时候,可以一...
- 面试发愁!吃透 20 道 CSS 核心题,大厂 Offer 轻松拿
-
前端小伙伴们,是不是一想到面试里的CSS布局题就发愁?写代码时布局总是对不齐,面试官追问兼容性就卡壳,想跳槽却总被“多列等高”“响应式布局”这些问题难住——别担心!从今天起,咱们每天拆解一...
- 3种CSS清除浮动的方法
-
今天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。下面我就讲3种常用清除浮动的...
- 2025 年 CSS 终于要支持强大的自定义函数了?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.什么是CSS自定义属性CSS自...
- css3属性(transform)的一个css3动画小应用
-
闲言碎语不多讲,咱们说说css3的transform属性:先上效果:效果说明:当鼠标移到a标签的时候,从右上角滑出二维码。实现方法:HTML代码如下:需要说明的一点是,a链接的跳转需要用javasc...
- CSS基础知识(七)CSS背景
-
一、CSS背景属性1.背景颜色(background-color)属性值:transparent(透明的)或color(颜色)2.背景图片(background-image)属性值:none(没有)...
- CSS 水平居中方式二
-
<divid="parent"><!--定义子级元素--><divid="child">居中布局</div>...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)