Android中注入型漏洞基础理论总结

描述

背景

在Android应用开发过程中,基于项目需求一般是团队开发,这就会出现使用多种编程语言(java、Kotlin、C++等)和一些通用框架。因此,当忽略和没有重视安全编程实践时,常见的注入型漏洞(如SQL注入、XML注入和跨站点脚本(XSS)等)可能会在应用中表现出来,从而给项目带来一些安全风险和危害。

下面从基础理论方面做下这方面的小总结。

注入漏洞原理

注入漏洞它就是将用户输入或插入后端查询或命令时发生的一类安全漏洞。通过注入元字符,攻击者可以执行无意中被解释为命令或查询的一部分的恶意代码。

例如,通过操纵SQL查询,攻击者可以检索任意数据库记录或操纵后端数据库的内容。

这种注入类型漏洞在服务器端或web服务中最常见。android应用中也存在可利用的实例,但这种情况不太常见,而且攻击面更小。

SQL注入攻击

SQL注入攻击,它涉及将SQL命令集成到输入的数据中,模仿预定义SQL命令的语法。成功的SQL注入攻击允许攻击者读取或写入数据库,并可能执行管理命令,具体取决于服务器授予的权限。

Android应用程序中一般情况下,使用SQLite数据库来控制和管理本地数据存储。假设Android应用程序通过将用户凭据存储在本地数据库中来处理本地用户身份验证。当登录SQLite数据库后,应用程序查询数据库以搜索用户输入的用户名和密码的记录。

JAVA

如果上图中用户名和密码都设置为'1' = '1'并且都为真的情况下,这个查询后的数据库就会返回所有记录,这样就能够正常登录,这样就出现非正常授权的用户也能够正常登录数据库。

因此针对这种类型的注入攻击,除了对输入数据进行校验外,也可结合对用户进行多重身份验证。确保登录的用户为指定授权的用户。

XML注入攻击

在XML注入攻击中,攻击者注入XML元字符以从结构上去改变XML内容。这可以用来破坏基于XML的应用程序或服务的逻辑,也可能允许攻击者利用XML解析器处理内容的操作。

这种XML攻击的一个流行变体是XML外部实体(XXE)。攻击者将包含统一资源标识符(URI)的外部实体定义注入到输入XML中。在解析过程中,XML解析器通过访问URI指定的资源来扩展攻击者定义的实体。解析应用程序的完整性最终决定了攻击者所具备的能力,恶意用户可以在其中执行以下任何操作:访问本地文件,触发对任意主机和端口的HTTP请求,发起跨站点请求伪造(CSRF)攻击,并导致拒绝服务条件。

XXE示例:打开本地文件/dev/random,返回无限字节流,可能导致拒绝服务。

JAVA

当前的Android应用开发趋势主要集中于基于REST/JSON的服务,基于XML越来越不常见。但是在使用用户提供的或不受信任的内容来构造XML查询的罕见情况下,它可以由本地XML解析器进行解释。因此,在开发过程中应始终做好验证所述输入,并转义元字符。

注入攻击向量

android应用程序的攻击面与典型的web和网络应用程序截然不同。android应用程序通常不会在网络上公开服务,应用程序用户界面上的可行攻击向量也比较少。针对android应用程序的注入攻击最有可能通过进程间通信(IPC)接口发生,其中恶意应用程序攻击设备上运行的另一个应用程序。

在手动安全审查过程中发现,潜在漏洞需要执行以下任一操作:

1.识别不可信输入的可能入口点,然后从这些位置进行跟踪,以查看目标是否包含潜在的易受攻击的函数。

2.识别已知的、危险的库/API调用(例如SQL查询),然后检查未检查的输入是否成功地与相应的查询交互。

对于不受信任的输入,一般是通过以下常见的几个方式进入应用程序:IPC调用;自定义URL方案;二维码;通过蓝牙、NFC或其它方式接收的输入文件;粘贴板;用户界面。

降低注入攻击向量的实践方案:

1.使用可接受值列表对不受信任的输入进行类型检查和/或验证。

2.执行数据库查询时,使用带有变量绑定的准备语句(即参数化查询)。如果定义了准备好的语句,用户提供的数据和SQL代码将自动分离。

3.解析XML数据时,确保解析器应用程序配置为拒绝解析外部实体,以防止XXE攻击。

4.使用x509格式的证书数据时,请确保使用了安全的解析器。

跨站点脚本

跨站点脚本(XSS),它允许攻击者将客户端脚本注入用户查看的网页。这种类型的漏洞在web应用中很常见。

当用户在浏览器中查看注入的脚本时,攻击者能够绕过同源策略,从而实现各种攻击(例如窃取会话cookie、记录按键、执行任意操作等)。

在本地应用程序的环境中,XSS风险远没有那么普遍,原因很简单,这类应用程序不依赖web浏览器。然而,android中存在很多使用WebView组件,这样就可能容易受到此类攻击。

可以在android应用程序中,分析所有存在的WebView,并分析应用程序呈现的不可信输入。

如果WebView打开的URL部分由用户输入决定,则可能存在XSS问题。

JAVAJAVA

如果使用WebView显示远程网站,则逃避HTML的负担将转移到服务器端。如果web服务器上存在XSS漏洞,则可用于在WebView上下文中执行脚本。

降低跨站点脚本攻击实践:

1.除非绝对必要,否则不会在HTML、JavaScript或其它解释上下文中呈现不受信任的数据。

2.适当的编码应用于转义字符,例如HTML实体编码。特别注意:当HTML嵌套在其他代码中时,转义规则会变得复杂,呈现位于JavaScript块中的URL。

考虑如何在响应中呈现数据。如果数据在HTML上下文中呈现,则必须转义六个控制字符:

JAVA

针对跨站点脚本动态分析,可以使用手动或者自动输入模糊化来检测,即将HTML标记和特殊字符注入所有可用的输入字段,以验证web应用程序拒绝无效输入或转义其输出中的HTML元字符。

反射XSS攻击是指通过恶意链接注入恶意代码的攻击。为了测试这些攻击,自动输入模糊被认为是一种有效的方法。例如,BURP扫描程序在识别反映的XSS漏洞方面非常有效。

与自动化分析一样,确保所有输入向量都包含在测试参数的手动审查中。 






审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分