App安全测试指南(四)——密码安全

本文仅作学习记录,如有侵权,请联系删除!

前言:


害!找不到工作的情况下就先好好沉淀自己呗,虽然我快吃不起饭了哈哈哈哈哈哈哈~

1.1 键盘劫持:

测试客户端程序在密码等输入框是否使用自定义软键盘。

安卓应用中的输入框默认使用系统软键盘,手机安装木马后,木马可以通过替换系统软键盘,记录手机银行的密码常来说,只有使用系统输入法的编辑框才能够进行键盘码记录。如果是自制的软键盘,则可以尝试进行触摸屏记录。不使用系统输入法,且按键随机分布的软键盘是安全的.

目前很多银行App基本都是使用自定义的软键盘

安装安卓按键记录工具(ns_keylogger.apk),在设置中选择我们的输入法,启动 APP,选择我们的测试键盘,使用 logcat/DDMS 查看测试键盘记录 -- 查看APP 案件能否被测试键盘记录。
安 装 android 键盘记录测试工具 。 "语言和键盘设置" 选择 "Hack Keyboard"。然后启动客户端,弹出提示框后选择“input method”(输入法),选择我们安装的软键盘。

查询信息时,使用软键盘输入,从ddms从发现无法看到输入的内容

通过logcat发现同样无法获取键盘记录:

进行查询时可观察到查询的内容

威胁等级:

能够劫持键盘风险为高,不能则为无风险。

安全建议:

尽量使用系统自定义的随机软键盘(而非系统输入法)来输入敏感信息。或者对Native 层输入记录功能进行 Hook(需要 root 权限)。

1.2 随机布局软键盘:

测试客户端实现的软键盘,是否满足键位随机布放要求:

威胁等级:

当客户端软键盘未进行随机化处理时为低风险;
当客户端软键盘只在某一个页面载入时初始化一次而不是在点击输入框时重新进行随机化也为低风险

1.3 屏幕录像:

客户端使用的随机布局软键盘是否会对用户点击产生视觉响应。当随机布局软键盘对用户点击产生视觉响应时,安卓木马可以通过连续截屏的方式,对用户击键进行记录,从而获得用户输入

adb.exe shell /system/bin/screencap -p /mnt/sdcard/book4yi.png

从代码方面进行验证:
检测需较高安全性的窗口(如密码输入框),看代码中在窗口加载时是否有类似下图的代码:
按照 android SDK 的要求,开启 FLAG_SECURE 选项的窗口不能被截屏
注意:FLAG_SECURE 可能存在兼容性问题,能否防护截图可能与硬件有关

目前 FLAG_SECURE 测试结果:

N-PASS,可截图
ZTE 880E, 可截图
ASUS TF300T,可阻止工具及 ddms 截图

风险点:

攻击者可以在用户进入登录页面,在输入密码的同时,进行连续截图,即可记录用户输入的密码。如果没有防截屏,那么即使是随机分布的、没有视觉反馈的软键盘也会被记录

威胁等级:

当使用第三方程序(或系统截屏)可以对客户端内容进行截屏时,为中风险;当客户端会对截屏操作进行有效抵抗时(无法截屏或截屏结果为黑屏等无意义图片)无风险。

安全建议:

在敏感信息的输入过程尽量避免视觉反馈,或者在操作系统层面对截屏相关功能进行Hook 以阻止敏感信息输入期间其它程序的截屏操作(需要 root 权限)。

1.4 系统底层击键记录:

拥有 root 权限后,安卓木马可以通过读取系统文件/dev/input/eventN 得到键盘码,从而获得用户输入。注意:目前很多 android 系统不再向 event 文件输出键盘码,如需测试需先确定键盘输入对应的 event 文件是否存在。

测试步骤:

运行客户端,在输入密码的同时,在 shell 中使用命令行监控输入。

1.5 手势密码:

主要从手势密码的复杂度、修改和取消、本地信息保存、锁定策略、抗攻击测试等方面进行测试

  • 手势密码的复杂度:
    1. 进入客户端设置手势密码的页面进行手势密码设置。
    1. 进行手势密码设置,观察客户端手势密码设置逻辑是否存在最少点位的判断。
    1. 反编译 APK 为 jar 包,通过 jd-gui 观察对应代码逻辑是否有相应的判断和限制条件。(一般设置手势密码若输入点数过少时会有相应的文字提示,通过此文字提示可以快速定位到代码位置)
  • 手势密码的修改和取消:
    1. 进入客户端设置手势密码的位置,一般在个人设置或安全中心等地方。
    1. 进行手势密码修改或取消操作,观察进行此类操作时是否需要输入之前的手势密码或普通密码。
    1. 观察在忘记手势密码等其他客户端业务逻辑中是否存在无需原始手势或普通密码即可修改或取消手势密码的情况。
    1. 多次尝试客户端各类业务,观察是否存在客户端逻辑缺陷使得客户端可以跳转回之前业务流程所对应页面。若存在此类逻辑(例如手势密码设置),观察能否修改或取消手势密码。
    1. 反编译 APK 为 jar 包,通过 jd-gui 观察对应代码逻辑,寻找客户端对于手势密码的修改和删除是否存在相应的安全策略
  • 手势密码的本地信息保存:
    1. 首先通过正常的操作流程设置一个手势密码并完整一次完整的登陆过程。
    1. 寻找/data/data 的私有目录下是否存在手势密码对应敏感文件,若进行了相关的信息保存,基本在此目录下。(关键词为 gesture,key 等)
    1. 若找到对应的文件,观察其存储方式,为明文还是二进制形式存储,若为二进制形式,观察其具体位数是否对应进行 MD5(二进制 128 位,十六进制 32 位或 16 位)、SHA- 1(二进制160 位,十六进制 40 位)等散列后的位数。如果位数对应,即可在反编译的jar 包中搜索对应的关键字以迅速对应代码。
    1. 通过代码定位确认其是否进行了除单项哈希散列之外的加密算法,若客户端未将手势密码进行加密或变形直接进行散列处理可认为其不安全,一是因为现阶段 MD5、SHA-1 等常用的哈希算法已被发现碰撞漏洞,二是网络中存在 www.somd5.com 等散列值查询网站可以通过大数据查询的方式获取散列前的明文手势密码。
  • 手势密码的锁定策略:

测试客户端是否存在手势密码多次输入错误被锁定的安全策略.

防止木马使用穷举法暴力破解用户密码。因为手势密码的存储容量非常小,一共只有 9!=362880 种不同手势,若手势密码不存在锁定策略,木马可以轻易跑出手势密码结果。手势密码在输入时通常以 a[2][2]这种 3*3 的二维数组方式保存,在进行客户端同服务器的数据交互时通常将此二维数组中数字转化为类似手机数字键盘的 b[8]这种一维形式,之后进行一系列的处理进行发送.

    1. 首先通过正常的操作流程设置一个手势密码。
    1. 输入不同于步骤 1 中的手势密码,观察客户端的登陆状态及相应提示。若连续输入多次手势密码错误,观察当用户处于登陆状态时是否退出当前的登陆状态并关闭客户端;当
      客户未处于登录状态时是否关闭客户端并进行一定时间的输入锁定。
    1. 反编译 APK 为 jar 包,通过 jd-gui 观察对应代码逻辑,寻找客户端是否针对输入次数及锁定时间有相应的逻辑处理。

手势密码的抗攻击测试:

    1. 下载并安装 Xposed 框架及 SwipeBack 插件。
    1. 启动客户端并进入手势密码输入页。
    1. 启动 SwipeBack 插件,观察是否可以通过滑动关闭手势密码输入页的方式进入登
      陆后的页面

威胁等级:

  • 手势密码的复杂度:

当用户设置或修改手势密码时服务器会对手势密码安全性(使用点数)进行判断时无风险,否则低风险。

  • 修改和取消:

当取消或修改手势密码时,如果不会验证之前的手势密码则为中风险;若存在验证则无风险。

  • 本地信息保存:

当本地保存了明文存储(数组形式)的手势密码时为高风险;当本地保存了只进行单项哈希散列的手势密码时为中风险。

  • 锁定策略:

当服务器不会验证手势密码输入错误次数时为中风险,会进行验证时无风险。

  • 抗攻击测试:

若客户端采用附着的方式将手势密码放置于登陆后的界面上时,如果无法抵抗SwipeBack 插件的滑动攻击则高风险,如果可以抵抗则无风险

参考如下:


Android APP渗透测试方法大全.pdf
App安全检测指南-V1.0.pdf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容

  • 1 移动APP安全风险分析 1.1 安全威胁分析 安全威胁从三个不同环节进行划分,主要分为客...
    你还真是学不乖丶阅读 970评论 0 2
  • 目录 一、安装包测试 1.1、关于反编译 1.2、关于签名 1.3、完整性校验 1.4、权限设置检查 二、敏感信息...
    Kevin_Luo阅读 24,435评论 2 33
  • 目录 一、安装包测试 1.1、关于反编译 1.2、关于签名 1.3、完整性校验 1.4、权限设置检查 二、敏感信息...
    宇文臭臭阅读 3,117评论 0 10
  • 一、安装包测试 1.1 关于反编译   目的是为了保护公司的知识产权和安全方面的考虑等,一些程序开发人员会在源码中...
    道书简阅读 6,341评论 1 4
  • 1.安装包测试 (1)能否反编译代码(源代码泄露问题): 开发:对代码进行混淆;测试:使用反编译工具进行查看源代码...
    alston123阅读 1,135评论 0 4