Android输入输出安全浅析

浅析Kotlin——新Android官方语言 写在前面: 在不久前Google io开发者大会上面,Google突然发出大招–Kotlin成为Android开发的官方语言。一夜间,大多数全球的Android开发者们一脸懵逼,绝大多数人之前压根不知道Kotlin是个什么东西。而这就意味着,在之后的Android项目开发中将逐步从Java语言转变为Kotlin语言,而在以后新增的代码文件将不再以Java代码的形式出现,而是以 Kotlin 代码... 阅读详情

转自优快云《程序员杂志》 作者:火点,Orlando

任何一款独立的操作系统都离不开输入输出环节,并且输入输出的安全与否关于到使用这个操作系统的用户隐私安全,Android系统也不例外,而且用户对手机的使用频率远远大于PC,这使得它的输入输出安全越发重要。本文抛砖引玉,对Android输入输出系统安全深入浅出的分析。

输入输出子系统的重任

简单的说,用户与手机的所有交互都是输入输出子系统承载的,用户通过各种输入设备向系统传达指令,如触摸屏,物理按键,各种sensor等等,然后结果输入子系统传递到某个具体应用完成用户想要的操作,然后通过输出子系统呈现给用户结果。由此可见,如果输入输入被攻破,用户的隐私数据将被轻松窃取,造成极大损失,如输入的银行卡号,密码,身份信息,隐私聊天记录,照片,视频等等,都有可能被窃取。那时,手机真的就变成手雷了。

那么,Android输入输出子系统到底安全吗?且看下面的分析。

输入子系统的漫漫长路

Android输入子系统工作内容主要包括以下几点:

1.      InputReader线程从按键,触摸屏等输入设备获取原始输入信息

开机后,Android中最重要的系统进程system_server中的InputManagerService在初始化中会创建两个线程用来处理输入事件,一个是InputReaderThread,一个是InputDispatcherThread。InputReaderThread在死循环中一直从EventHub中读取系统的输入事件,然后发送到InputDispatcher类中的一个队列里,用于InputDispatcher对其进行分发。

2.      InputDispatcher线程处理InputDispatcher队列中的事件。

在InputReaderThread使用了epoll机制,当有新的输入事件线程被唤醒,把转换好的消息发送到相应的窗口去,通过InputChannel把事件发送给具体的app进程。

3.      App进程收到事件后,最终通过一个view tree结构的根Décor View分发到最终会处理这个事件的Child View。

图1.输入子系统

上面涉及到2个进程通信,如果牵扯到输入法,就更复杂了,涉及到三方通信。如图2所示,输入法进程(以下简称IME,InputMethod),软键盘对于输入子系统来说就是touch事件,所有touch事件通过输入子系统到了IME进程,根据touch坐标转换成为真正的输入字符,然后IME利用InputConnection(实际上是对IInputContext Binder的封装)通过IPC将输入的字符串传给正在接受输入的app进程的某个TextView显示出来,传输的字符串都是明文啊!

图2.输入法通信模型

从上面的分析我们可以看到,输入的漫漫长路,任何一个环节都有可能被攻击,这里举几个例子。

0x01追根溯源

直接监听分析输入设备原始事件,在/dev/input/目录下的节点权限如下。

图3.Input设备节点

而通过adb登陆的shell因为调试需要,也加入了input这个group (如图4所示,可参考android系统源码文件adb.c),并且android内置了getevent事件工具,就目前经验,很少有厂商会从量产版本中去掉这个工具,所以可以非常轻松的通过adb shell拿到用户输入,整理如下,输入的坐标位置一目了然,如果再能结合其他信息,如使用哪个输入法,屏幕分辨率等,就可以计算出输入了哪些字符。也就是说一旦我们电脑中了病毒,而碰巧又是连接电脑在输入敏感信息,嘿嘿,那恶意程序就可以把所有的输入通通拿到,一览无余!


图4  adb shell调试权限如此之多


图5 通过getevent工具分析输入事件

0x02直击要害

前面的不过瘾,数据不直观,更高级的恶意程序可能已经获得了root权限,这样还不如直击要害,从前文分析中,在输入法通信模型中,直接注入截获InputConnection的commitText,就能轻松拿到输入字符,省事多了,如果你注入的是输入法IME进程,那些敏感app(如支付,金融,通讯类)的开发者可是要哭死了,因为它无法监控IME是否被入侵,只能心中无奈OS,“臣妾做不到啊!”。

0x03另类奇葩

很久之前听说一种名叫TapLogger的病毒,它可以通过动作传感器获取你的输入信息。也就是说即便是触摸屏幕的虚拟键盘,它也能搞清楚你到底在输入什么。据说4位数密码能够达到100%的正确率,6位能够达到80%的正确率。

 

输出子系统的如此简单

如果说输入子系统因为流程复杂导致安全风险,那么输出子系统则因为简单,从而导致攻击难度降低。

Android输出子系统主要是经典的Composite模式,如下图


图6 输出子系统

每个App都会传递自己的surface到SurfaceFlinger,SurfaceFlinger做一次composite形成一个显示的buffer传给FrameBuffer,再不考虑Overlay buffer的特殊情况下,LCD直接扫描FrameBuffer显示在屏幕上。

问题就出在这个FrameBuffer上,在系统中最终会放到/dev/graphics/fb0节点,如果这个节点不小心被很二的工程师配置成others可以读写,恶意程序就可以轻松通过读取FrameBuffer内容达到截屏的效果,而且Android为了系统截屏方便,还自带screenshot工具对FrameBuffer做了封装,用起来非常方便。我们就在国内某著名厂商的旗舰机中发现了类似问题,如图7所示,网上流行的号称非root截屏的app其实就是利用这个漏洞实现的。


图7 有安全漏洞的fb0节点

即便是没有这个漏洞,others没有任何权限(如图8所示),但是通过adb登陆的shell因为调试需要,也加入了graphics group(这一点在上面图4中代码中也可以看出来),也就是说一旦我们电脑中了病毒,而碰巧又是连接电脑在输入敏感信息,嘿嘿,各种敏感输入,各种猥琐聊天轻松被截屏。又是因为调试,看来安全和调试果然是冤家,个人认为,安全更重要,显然Google在此时倾向于调试功能的丰富。


图8  无安全漏洞的fb0节点

展望

近年来,芯片厂商,手机厂商,ROM开发者,甚至应用开发者对Android的深入定制都有可能引入新的安全漏洞。好的一面是Google已经越来越重视Android系统安全,随着版本不断升级,安全性也在不断提高,新发布的5.0使得手机root越来越困难,同时有实力的芯片厂商,手机厂商也在研发自己的安全解决方案,尤其是在移动支付领域,将安全带入新的高度。移动系统安全任重而道远。

 

[车联网安全自学篇] Android安全之Android加密算法浅析 车机渗透,博主感觉大致可分为:软件层、系统层、硬件层例如,我们测试软件层以及系统层的时候,会关注一些加密算法以及该密码或敏感数据是否加密或加密后又如何解析,它们又存放在哪个位置等等。例如,Android设备(也可以是手机,也可以是智能大屏等)解锁屏幕时输入的密码,那么这个密码存放在哪里?是否为明文存储?如果是加密存储,那么加密算法是什么?例如,连接一些车机WI-FI时,为了安全考虑会要求输入PIN码才能连接成功,那么此时我们要考虑该PIN码输入的密码,那么这个密码存放在哪里?是否为明文存储? 阅读详情

相关推荐

[车联网安全自学篇] Android安全之浅析Android APP是如何运行的

Android4.4版本以前是Dalvik虚拟机,4.4版本开始引入ART虚拟机,在4.4版本上,两种运行时环境共存,可以相互切换,但是在5.0版本以后,Dalvik虚拟机则被彻底的丢弃,全部采用ART。PS:采用ART预先加载代替用时查找以提升应用的性能。

橙留香Park的博客 2764

Android安全输入设计与思考

我不会顾忌别人怎么看,或者顾忌到放弃什么东西。我喜欢两句诗“天生我才必有用,千金散尽还复来”。当年离开方正,也是这样仰天大笑出门去…… ——周鸿祎  随着移动支付的快速普及,如何保障用户信息安全这个问题变得越来越重要。 本文对市面上的Android安全键盘进行了总结,详细分析了为什么采用安全键盘,怎么样实现安全键盘等问题。以及各个产品线使用的安全键盘有何优劣点。以方便开发者对自我开发安全项

北漂周的专栏(微信:stchou_zst) 1万+

Android中文件读写(输入流和输出流)操作小结

1. Android中文件读写的原理: (1).所有文件的储存都是字节的储存。 (2).在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。 (3).在读取文件(特别是文本文件)时,也是一个字节一个字节的读取以形成字节序列。 2. 字节流和字符流的区别: (1).字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,字符流就可以。 (2).字节流转换成字符流可以用InputStreamReader,OutputStreamWriter。 一般我们在使用的时候通常用字节流。 3. 文件读写的步骤: (1).首先建立通道。 (2).然后建

Android输入输出流

最近在联系的内容中,涉及了Android的文件复制,里面有关于Android输入输出流的内容,因此在网上查找了一些资料,记录在这里,方便以后查阅。 1、Android中文件读写的原理: (1)、所有文件的储存都是字节的储存。  (2)、在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。 (3)、在读取文件(特别是文本文件)时,也是一个字节一个字节的读取以形成字

shona_chen的博客 1831

STM32驱动AD2S1210实现旋变解码与角度读取

旋转变压器作为一种耐高温、抗振动的角度传感器,在工业伺服、机器人关节和电动汽车电驱等场景中占据重要地位。其输出信号需要经过专用转换芯片处理才能被MCU高效使用。AD2S1210是一款典型的旋变数字转换器(RDC),内部采用Type II型跟踪环,将模拟SIN/COS信号实时解算为数字角度与速度,降低了处理器负担并提升抗干扰能力。本文基于STM32平台,详细介绍了AD2S1210的硬件接线、SPI通信配置、寄存器初始化流程,以及读取位置数据时的SAMPLE脉冲时序等关键实现。同时总结了常见故障如全FF、角度跳

weixin_34194829的博客 196

如何缩减layout电路面积?减少晶体管的数量——以全加器为例【VLSI】

How to reduce the number of transistors to reduce circuit area? -- Take the Binary Full Adder as an example 优化面积的方法 1. 减少晶体管的数量 2. 改变gate matrix的布局

Jie_MSD的博客 6437

手机输入法存在严重漏洞,国内超10亿用户面临泄密风险

此外,三星和vivo的设备也捆绑了存在漏洞的键盘输入法,仅搜狗、百度和讯飞这三家的输入法市场份额就占中国第三方输入法市场的95%以上,用户数量约为10亿。根据citizenlab发布的安全报告显示,百度、荣耀、讯飞、OPPO、三星、腾讯、vivo、小米,的手机云输入法应用均存在严重漏洞,黑客可利用这些漏洞完全窃取到用户输入内容,或实施网络窃听。手机是我们日常使用的通信工具,如果存在普遍性严重漏洞,那么将对隐私安全、国家安全造成不小的影响。4、担心泄密的用户,可切换到完全在设备上运行的本地输入法。

互联网安全研究院 2043

cosi-corr操作详细步骤

cosi-corr是一个可以加载到ENVI的软件包,由加利福尼亚理工学院的François Ayoub,  Sébastien Leprince,  and Lionel Keene开发,并且提供源代码,该软件受到了NSF的资助。软件的主要功能是可以满足各种影响的正射校正和影像配准。 针对下载下来的软件包参考《cosi-corr_guide.pdf》,进行配置使用具体详细过程如下: (本机环境

u013299471的专栏 1万+

Android使用输入/输出流存储文件

描述:使用 FileOutputStream 将新建文件存储到内部存储器和SD存储器当中,并使用 FileInputStream 读取文件内容。知识点:权限申请、FileOutputStream、FileInputStream。判断当前软件是否有写入数据权限(tool -> FileStorage.java)使用输入/输出流存储文件(内部存储andSD存储)

守夜人 1294

第33次CCF-CSP认证考试 第一题 词频统计 满分题解

本人小白一枚,抱着学习的态度想到网上找一些csp的参考答案,但由于实力有限,大佬的代码大都看不太懂,于是萌生了想用一些简单,基础的语句完成csp前两题的想法并公开,以便与像我这样实力不强的同学交流学习,如有更好的建议,还请斧正,感谢!

qq_75242106的博客 1869

浅谈Android MVI架构---大自然的搬运工~~~

浅谈 Android MVI架构

hong_world的博客 2158

Android 将输入流InputStream的方法转化为输出流OutputStream

字符串相关学习资料:https://edu.51cto.com/video/3832.htmlhttps://edu.51cto.com/video/4055.htmlAndroid中将InputStream转化为OutputStream的实现方法 作为一名经验丰富的开发者,我非常乐意帮助刚入行的小白们解决实际问题。今...

weixin_40582778的博客 257

下载和运行GitHub上的代码教程总结

从昨天开始就想着从GitHub上下载一个开源的Vue的实战项目,希望能从中学习更多的Vue的实用内容,结果搞了半天好不容易下载了,不知道怎么弄。然而,今天终于成功了,激动地我赶紧来记录一下。 如何从GitHub上下载自己需要的项目: 1.首先,你要有一个自己的GitHub(https://github.com/)的账号。关于如何注册GitHub的账号以及如何获取你的SSH密钥这个问题,请大家参...

不怕万人阻挡,只怕自己投降 29万+

iphone没有android安全,安卓真的不如苹果安全吗?

对于手机的选择,你是不是曾经在安卓(Android)和苹果(iOS)之间犹豫不决;你是不是“贪恋”安卓的自由,却又惦记着苹果的操作速度?没错,你不是一个人!相信大家都有过这样的问题:安卓和苹果,该怎么选择?作为安全领域的专家,怎么能不对两者的安全性进行比较呢!或多或少我们都听过苹果系统比安卓安全的说法。事实真的如此吗?苹果vs安卓 安全性大比较---------------------------...

weixin_39993454的博客 283

华为昇腾(Ascend)开发考试原题目解析 (2024) (题库一)——HCIP-AI-Ascend Developer——第一部分

给出一段代码如下,以下哪个选项描述错误?...A.中的语句由 MindSpore 接管,有语法限制B. 算子在中定义,并用来建立网络C.__init__()中的语句由 Python 解析执行D. 网络定义必须继承基类nn.Cell正确答案: B__init__()用于定义算子和网络层。所有需要用到的层(如卷积层、全连接层等)都应该在这里进行实例化。这部分代码由Python解释器执行。用于构建前向计算图。它调用在__init__()中定义好的算子和层来描述数据的流向。

qq_38334677的博客 1054

华为OD机试 - 直捣黄龙 - 广度优先搜索BFS(Python/JS/C/C++ 新系统 200分)

从样例 1 可知:5 / 2,2 -> 输出 2 9如果按“移动步数”计算应该是 8,但题目输出是 9,说明这里的“路径长度”统计的是 路径上经过的节点数量。最短路径条数:ways[end]路径长度:dist[end] + 1。

学Java,找哪吒 125

为什么说安卓系统会比iOS系统更安全?_安卓安全性优势(1)

为了帮助大家更好的学习网络安全,小编给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,所有资料共282G,朋友们如果有需要全套网络安全入门+进阶学习资源包,可以点击免费领取(如遇扫码问题,可以在评论区留言领取哦)~😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓👉优快云大礼包🎁:全网最全《网络安全入门&进阶学习资源包》免费分享**(安全链接,放心点击)**👈​!

ZL_1618的博客 2244

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android安卓安全审计mobiseclab

关于安卓上的app分析,安全审计,有很多的本地化软件可以胜任,不过,今天给大家介绍一款在线的安全审计,恶意软件(android app)检测和分析工具,mobiseclab,有着强大的分析和源码审计功能.

亚飞正传的专栏 2774

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

为什么说安卓系统会比iOS系统更安全?_安卓安全性优势

为了帮助大家更好的学习网络安全,小编给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,所有资料共282G,朋友们如果有需要全套网络安全入门+进阶学习资源包,可以点击免费领取(如遇扫码问题,可以在评论区留言领取哦)~😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓👉优快云大礼包🎁:全网最全《网络安全入门&进阶学习资源包》免费分享**(安全链接,放心点击)**👈​。

2401_83621384的博客 2202

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

安卓与苹果系统安全性之比较

总体而言,不能简单地说安卓或苹果系统谁绝对更安全,它们在不同的安全维度各有优劣,用户需要根据自身的需求和使用习惯来选择适合自己的操作系统。在智能手机领域,安卓和苹果系统是两大主流操作系统,它们在安全性方面各有特点。

车轮的博客 4533

安卓Android入门

Android基于Linux内核,这使得它具有强大的硬件兼容性和稳定性。

m0_74154295的博客 2283

Syncthing-Android 安卓文件同步终极完整教程

Syncthing-Android 是专为安卓设备打造的私密数据备份和跨设备同步神器。作为 Syncthing 的安卓包装器,它能够让你在没有中央服务器的情况下,安全地在多个设备之间实时同步文件。所有数据传输都经过加密保护,确保你的照片、文档和个人文件完全私密。无论是备份手机照片还是跨设备同步工作文件,Syncthing-Android 都能提供可靠的企业级同步解决方案。 [![同步文件夹图标]

gitblog_00118的博客 1272

[免费专栏] Android安全之Android加密算法浅析

转移发布平台通知:将不再在优快云博客发布新文章,敬请移步知识星球... ...

橙留香Park的博客 1050

如何快速安全地移除安卓预装应用:Universal Android Debloater完整指南

安卓手机预装应用过多导致设备卡顿、电池耗电快、隐私泄露?Universal Android Debloater(UAD)正是解决这些问题的终极工具!这款跨平台GUI工具采用Rust语言编写,通过ADB连接帮助非Root安卓设备安全移除预装应用,显著提升设备隐私保护、安全性和电池续航能力。 ## 🔍 为什么你需要移除安卓预装应用? 安卓设备厂商和运营商经常预装大量"垃圾应用",这些应用不仅占用

gitblog_00303的博客 331
上一篇: 不一样的安全视角之“微信密友”
鲶鱼团队
博客等级 码龄14年 36粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值