「干货」剪贴板+键盘缓存+UI界面+自动截屏敏感信息挖掘

原创 橙留香Park 2022-10-06 00:01

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大

少走了弯路,也就错过了风景,无论如何,感谢经历


更多关于Android安全的知识,可前往:https://blog.csdn.net/ananasorangey/category11955914.html



0x01 剪贴板敏感信息泄露

在 Android 中,由于 Android 操作系统的规范或 Android 操作系统提供的功能,应用程序实现难以保证安全。如果这些功能被恶意第三方滥用或被用户随意使用,就有导致信息泄露等安全问题的风险

复制和粘贴是用户经常随意使用的功能。例如,许多用户使用这些功能将邮件或网页中需要记住的奇怪信息或重要信息存储在记事本中,或者从存储密码以防忘记的记事本中复制或粘贴密码。这些操作看起来非常非常正常,但实际上可能存在用户处理信息被盗的潜在风险

此风险与 Android 系统中的复制和粘贴机制有关。用户或应用程序复制的信息会存储在名为剪贴板的缓冲区中。当用户或应用程序粘贴时,剪贴板中存储的信息将分发到其他应用程序。因此,此剪贴板功能存在导致信息泄露的风险。这是因为剪贴板实体在系统中仅有一个,任何应用程序都可以使用 ClipboardManager 随时获取剪贴板中存储的信息。这意味着用户复制/剪切的所有信息都有可能泄露给恶意应用程序

在文本框中经常会使用到复制粘贴的功能,这个时候数据是保存在剪切板中的。而剪切板是安卓系统提供的功能,所有的应用都可以访问,并且无需特殊权限申请。如果在剪切板中存储了敏感信息,就存在泄漏的风险。比如以下的应用通过监控剪切板内容,成功获取了身份证号码

在Android 4.0 中底层引入了TextLayoutCache,当每个测量过的文字都被添加到缓存中,下次需要相同的文字时,可以从缓存中获取,不用在测量。

打开预测文本的Android 设备会自动记录用户输入的记录缓存。Android 预测文本功能,将通过记住用户之前输入的单词作为未来输入建议的一部分,使键盘上的输入更容易,如下所示。但是,一旦单词已经写入,则禁用预测文本并在将来启用它。被记住的消息还在

如果您不使用Android键盘,则这些步骤可能会有所不同。不同手机版本开启预测文本的步骤也是不太相同的

演示如下:

代码如下:

package com.example.testpoc4;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// 获取控件id
Button button = findViewById(R.id.button);
// 监听点击事件
button.setOnClickListener(new View.OnClickListener() {
@Override// 获取剪贴板内容并在打印出来
public void onClick(View v) {
ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData data = cm.getPrimaryClip();
ClipData.Item item = data.getItemAt(0);
String content = item.getText().toString();

Toast.makeText(MainActivity.this,content,Toast.LENGTH_SHORT).show();
}
});
}
}

 缓解措施

可以采用以下方法来禁用剪切板相关功能:

  • 通过禁用长按视图也可禁止复制/剪切,可在 xml 布局文件中指定禁用长按视图在 EditText 中加入属性 android:longClickable="false"

如果视图在应用程序中显示敏感信息,并且允许在视图(例如 EditText)中复制/剪切信息,则信息可能通过剪贴板泄露。因此,必须在显示敏感信息的视图中禁用复制/剪切

  • 重写 EditText 的回调方法,从 EditText 字符串选择的菜单中删除复制/剪切项目(从字符串选择菜单中删除 android.R.id.copy和android.R.id.cut)

通过 TextView.setCustomSelectionActionMODECallback() 方法,可以自定义选择字符串时的菜单。通过使用此功能,如果在选择字符串时可以从菜单中删除复制/剪切项目,用户将无法再复制/剪切字符串。

 

0x02 检查键盘缓存是否存在敏感信息泄露

当用户在输入信息时,一般情况下软件默认会自动保存数据,这个特性功能对于消息传递类的应用程序非常有用。但是,当用户选择此类应用程序的输入框来输入信息时,键盘缓存就可能暴露敏感信息给攻击者收集用户个人信息的提供了途径

大部分中文应用弹出的默认键盘是简体中文输入法键盘,在输入用户名和密码的时候,如果使用简体中文输入法键盘,输入英文字符和数字字符的用户名和密码时,会自动启动系统输入法自动更正提示,然后用户的输入记录会被缓存下来

系统键盘缓存最方便拿到的就是利用系统输入法自动更正的字符串输入记录。 缓存文件的地址应该是下面的这个路径:

导出该缓存文件,查看内容,一切输入记录都是明文存储的。因为系统不会把所有的用户输入记录都当作密码等敏感信息来处理。 一般情况下,一个常规用户高频率出现的字符串就是用户名和密码

所以,一般银行客户端app输入密码时都不使用系统键盘,而使用自己定制的键盘,主要原因如下:

  • 避免第三方读取系统键盘缓存

  • 防止屏幕录制 (自己定制的键盘按键不加按下效果)

在一个activity的布局定义中,可以定义有XML属性的TextViews。如果XML属性android:inputType给了值textNoSuggestions,可以将文本框的输入类型设置为android:inputType="textNoSuggestions"此时就不会再显示键盘缓存建议。用户就必须手工输入内容,不会再自动有缓存信息,下面一个是有源码的情况下的静态查看方式和没有源码的情况下的查看是否禁用键盘缓存

<EditText
android:id="@+id/passwordText"
android:inputType="textNoSuggestions" />

无源码的情况下,反编译APK并查看\res\layout 路径下的xml文件是否有配置android:inputType="textNoSuggestions"

然后打开APP运行,输入相关之前输入过的内容,看看是否会自动提示补齐输入的信息

注:并不是说文本框不设置android:inputType="textNoSuggestions"就是有问题的,而是该文本框是否在使用过程中有输入敏感信息。如果有,则就有可能被攻击者窃取这些敏感信息,所以该EditText就需要配置android:inputType="textNoSuggestions"

  • 缓解措施

在文本框输入的内容,有时候会被输入法缓存,以提升用户体验。但是在涉及到敏感信息输入框的时候,就可能会造成信息泄漏。可以指定 android:inputType 为 textNoSuggestions 来缓解该风险,如下:

:上述涉及到的风险点通常需要根据应用的类型进行判断,例如如银行类 APP可能需要规避本文中的风险,而工具类 APP 则无需考虑大部分本文的风险点

0x03 UI界面敏感数据泄露

大多数APK应用程序会建议用户输入一些敏感数据,比如在注册新账号或付款时输入的敏感信息以明文显示数据,没有用*(型号)或圆点代替输入的来屏蔽敏感数据,则可能导致敏感数据泄露

如何检测此类敏感信息泄露?只需要我们在检查设备上所有显示此类信息或将其作为输入的 UI 组件,并搜索敏感信息的任何痕迹并根据自身经验来来评估确认是否需要将其屏蔽或完全删除

3.1 静态分析

  • 文本字段

反编译APK并查看AndroidManifest.xml,检查文件中 EditText 的定义是否有以下属性(因为配置该设置,文本框中的文字将显示点(而不是输入字符)将显示在文本字段,防止应用程序泄漏密码或 PIN (例如锁住手机时,要求输入密码)到用户界面):

android:inputType="textPassword"

  • 程序通知

UI界面这里的程序通知导致的敏感信息泄露【静态分析】,跟第三方导致的敏感数据静态分析操作差不多,自行翻看对应的内容查看

3.2 动态分析

动态运行APK应用程序并识别显示此类信息或将其作为输入的组件,来判断APK应用程序是否向UI界面泄露敏感信息

  • 文本字段

如果用户输入的信息被屏蔽,例如:用星号或圆点代替输入的信息,则APK应用程序不会将数据泄漏到用户界面

  • 程序通知

UI界面这里的程序通知导致的敏感信息泄露【动态分析】,跟第三方导致的敏感数据静态分析操作差不多,自行翻看对应的内容查看

0x04 自动截屏泄露敏感信息

Android 系统厂商或制造商,在设计系统时为了考虑用户体验性,通常会在应用程序启动和退出时为设备用户提供美观的体验考虑,此特性就使用了屏幕截图保存功能,以便在应用程序当前状态是在后台的使用。可能使用该功能会存在安全风险,比如用户在显示敏感信息时故意对应用程序进行截屏,如果敏感信息没有做星号/圆点处理,那么就存在被其它恶意APK应用程序持续捕获屏幕截屏内容的导致敏感信息泄露,需要注意屏幕截图是存储在本地的,就有可能存在被窃取的可可能性

正题开始之前,我们先说一下就算我们在 EditText 标签中指定android:inputType 为 textPassword,来让密码进行掩码显示并不能抵御截屏获取敏感信息。在 Android 5.0之前,要实现截屏需要有 root 权限,但Android 5.0 之后,Google 开放了录屏 API,无需 root 权限就能够截屏了。比如说以下图片中依然可以看到输入的密码明文,只是输入后变成了掩码,但只要能录屏,一样存在风险,如下图:

可以在承载的 Activity 中,加入以下代码来防止截屏获取敏感信息,如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.activity_sp);

etUsername = findViewById(R.id.et_sp_username);
etPassword = findViewById(R.id.et_sp_password);
}

为了验证效果,我们做以下实验来验证:

  • 在以下界面(未做防护),执行命令adb shell screencap -p /sdcard/1.png 进行截屏。

adb shell screencap -p /sdcard/1.png

  • 在以下界面(做了防护),执行命令adb shell screencap -p /sdcard/2.png 进行截屏

adb shell screencap -p /sdcard/2.png

 

看一下截图文件,发现 1.png 大小正常而 2.png 大小为 0 字节,说明成功阻止了屏幕截图的攻击,如下图:

   

4.1 静态分析

在APK应用程序进入后台时Android设备会自动截取当前活动的屏幕截图(这一点大家经常使用手机的人,应该都晓得),当我们再次返回APK应用程序前台时,为了好看,会在一个轮播图中显示出来,此设计特性就存在可能泄露没有做过处理的文本框导致的敏感信息泄露

检查是否可以使用应用切换器暴露敏感信息,只需查看有么有设置FLAG_SECURE选项,如果未配置该选项,则该APK应用程序容易被恶意APK应用程序持续屏幕捕获,如下代码示例:

Java 中的示例:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);

setContentView(R.layout.activity_main);

Kotlin 中的示例:

window.setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE)

setContentView(R.layout.activity_main)

4.2 动态分析

打开应用程序进入到后台导航切换栏,可以切换到任何含有敏感信息的屏幕,查看快照。如果FLAG_SECURE设置了,则快照为空;如果未设置标志将显示活动信息。如下(点击按钮,切换到后台界面,只要查看是否出现快照能显示截图的内容):

解决方案:

  • 在支持基于文件的加密 (FBE)的设备上,快照存储在/data/system_ce//文件夹中。取决于供应商,但最常见的名称是snapshots和recent_images。如果设备不支持 FBE,/data/system/则使用该文件夹。需要注意访问这些文件夹和快照需要root权限哦

上面有些内容细节,可以前往:[车联网安全自学篇] 三十七. Android安全之数据存储与数据安全【大集合】

参考链接

https://android-developers.googleblog.com/2017/09/keystore-key-attestation.html

https://github.com/OWASP/owasp-mstg/blob/master/Document/0x05d-Testing-Data-Storage.md

https://mp.weixin.qq.com/s/j5BIcOAeXyNG8MsAHIsKzw

https://blog.csdn.net/qq_38436214/article/details/119424903

https://wizardforcel.gitbooks.io/android-app-sec-guidebook/content/4.10.html

https://blog.csdn.net/xuanwenchao/article/details/103783224

https://github.com/JinxKing/android_app_security_checklist

https://orangey.blog.csdn.net/article/details/124431951


你以为你有很多路可以选择,其实你只有一条路可以走



橙留香Park 橙留香来自一位三流剑客之乡,担任威胁猎手,脑子不会转弯,属于安全特学脑。橙留香同学[小菜鸟],定期分享从零入门车联网安全(包括基础知识储备)技术。只为你呈现有价值的信息,专注于车联网安全领域之Android终端反入侵技术研究。
评论
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 80浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 145浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 75浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 104浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 127浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 71浏览
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 100浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 119浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 48浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 173浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 87浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 85浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦