美文网首页移动攻防
App安全测试指南(四)——密码安全

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

作者: book4yi | 来源:发表于2020-11-18 20:56 被阅读0次

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

    前言:


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

    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

    相关文章

      网友评论

        本文标题:App安全测试指南(四)——密码安全

        本文链接:https://www.haomeiwen.com/subject/ghbjbktx.html