【译】安卓安全(1)

整个系列是在2011年的,分了五个方面,觉得还是蛮有意思的,空的话可以看看哦!

原文链接:【Android安全系列索引】

毕竟,这是智能手机时代,不是吗?


Kuu 是一家风险投资公司的工程师。在与同事 Yuya 和开发团队负责人 Natsu-san 一起进行 Web 应用程序开发时,我一直参加学习课程以获取有关 Web 应用程序安全性的知识。接下来他感兴趣的是……

Kuu :“我创建了一个 Android 应用程序♪”

Yuya: “嗯?你为什么要做那样的东西?”

Kuu :“我自己学习♪现在,你甚至无法开发智能手机应用程序♪”

Yuya :“哇。这太棒了。你做了什么?”

Kuu :“这是一款与网络服务器结合使用的游戏。我希望能够通过输入ID和密码做很多事情,但目前看来它只是一个排名功能〜♪还有一个在设备上保存密码的功能~”

Misawa Homes 创建了一个培训电子邮件系统,在内部“做可能的事和不可能的事”

Yuya :“嘿。让我看看。”

Kuu :“呵呵。好吧,试试玩吧。”

Kuu 向 Yuya 吹嘘他创建的应用程序。

Yuya :“你的密码是用‘kuu&pa$$!’之类的吗?”

Kuu :“呃!嘿!你怎么知道?什么?你的设备坏了吗?或者即使你能看到它,也不要看它!”

小酷哭了,因为他的设备坏了。

Yuya :“没有。我只是和我的电脑正常通讯。”

Kuu :“平常可以做这样的事吗?”

Android终端等智能手机与传统的手机终端有很大不同,可以使其表现得更像PC。

Android设备有时会使用Android OS这种基于Linux的操作系统,因此如果使用Android SDK的adb命令,就可以像操作Linux控制台一样进行操作(初始状态下可用的命令有限,但可以安装附加命令。)

图1 您可以使用命令提示符以与Linux相同的方式操作Android设备。
 此外,如果密码以明文形式存储在设备上,如果攻击者获得了设备的访问权限,则存在使用命令查看密码的风险。

此外,作为 Android 设备的标准功能,可以通过 Wi-Fi 访问互联网。换句话说,与传统手机不同的是,通讯不再需要通过移动运营商网络进行限制,使得通过局域网环境进行通讯变得更加容易。

对于某些 Android 设备,可以配置代理设置。然而,由于某些模型的功能有限并且本身没有代理设置,因此似乎很难有意地将它们路由到特定的观察环境。

然而,实际上,很容易配置这样的配置,其中来自 Android 设备的通信通过使用 Wi-Fi 通信的 LAN 环境传递,从而通过攻击设备进行路由。一旦环境建立,通信就可以自由查看和篡改。

图 2 还可以通过 Wi-Fi 连接通过代理工具传递通信(= 查看和篡改通信)。
图3 使用代理工具获取HTTP请求示例

对于 Android 设备以外的智能手机也同样如此,只要它们可以使用 Wi-Fi 通信通过 LAN 进行通信即可。

以前困难的攻击现在可以实现

对于传统的移动电话终端,通过沿途查看和收集认证信息来攻击向外部服务器发送认证信息的应用程序是很困难的。然而,如上所述,Android设备的通信内容可以被查看,使得以前难以进行的攻击成为可能。

特别是,典型用户经常在多个站点上使用相同的密码。一旦您的认证信息被第三方查看,多项服务将受到影响,并可能导致严重问题。

此外,通过篡改通信内容,有可能攻击正在进行通信的服务器(第 2 部分:“如果修改请求,您可以看到漏洞是如何工作的!” )。特别地,许多传统的移动网站不认为通信内容可能被篡改。如果服务器端被构建为它的扩展,那么攻击将变得非常容易。


HTTPS 可以覆盖什么,不能覆盖什么

Kuu: “啊?用手机也能做到吗???”

Yuya :“这是一部智能手机,对吗?你不能像以前一样思考它。”

Kuu :“你现在可以做这样的事情了…我认为这只是方便,但我想你必须将其视为不同的东西…”

Yuya :“嗯,有时它会变得更方便,但你应该记住,因为它更方便,你需要考虑哪些事情。”

Kuu :“但是那我该怎么办呢……?啊,我应该使用HTTPS吗?”

Yuya :“那么,我看一下使用 HTTPS 的网站的密码怎么样?”

Misawa Homes 创建了一个培训电子邮件系统,在内部“做可能的事和不可能的事”
Kuu :“什么?你能做到吗?停下来!”

库大喊“站住!”

在考虑防止查看或篡改通信内容的措施时,经常会提到 HTTPS 等通信加密。但需要考虑这种方法在什么情况下有效之后再采取对策。

例如,假设第三方(攻击者)在合法用户使用终端时拦截通信。在这种情况下,使用 HTTPS 可以被认为是一种有效的对策,因为它可以通知用户正在使用无效的证书。

但是,如果设备丢失或攻击者可以访问该设备怎么办?与通用Web浏览器一样,即使HTTPS连接期间使用的证书无效,如果可以忽略警告并且可以继续通信,则可以查看通信本身的内容。

图4 如果证书无效,浏览器上将显示警告屏幕。

另外,假设证书在这样的攻击期间变得无效,如果应用程序端配置为如果证书不合法则无法进行通信怎么办?同样在这种情况下,如果攻击者能够在 Android 设备上安装自己的证书,他们就可以让应用程序认为正在使用合法证书(注 1 )。

[注1]:在设备上安装证书需要Root权限。然而,对Android设备进行root的方法是众所周知的。因此,最好考虑假设已获得某种程度的 root 权限的对策。但是,必须小心,因为允许获得管理权限可能会违反服务条款。

上面的例子展示了如何拦截和重写HTTP请求,但这不仅限于HTTP通信。同样,可以使用专有协议(例如 Socket 类)查看和篡改通信。因此,有必要在所有通信中考虑类似的风险。

最近,建议锁定您的设备,以防您的设备被攻击者窃取。然而,即使在这种情况下,由于它使用触摸屏方法,据报道可以根据指纹轻松确定密码(CNET Japan),可以说应该在应用程序端考虑对策。

图 5 根据显示屏上留下的指纹,可以高概率确定密码。

这样,与传统的移动终端不同,当针对智能手机时,需要以可以查看通信内容的假设来设计Web应用程序。

首先,如果可能的话,避免在本地存储密码等敏感信息。然而,这样做确实会导致便利性的丧失。如果重要信息必须存储在本地,最好对单个密码进行加密或使用质询-响应方法来防止密码通过通信通道传递。如果反编译的话,可能会直接分析出保存的密码,甚至加密也不一定能解决问题,所以更要小心。

图6 假设每个终端、通信路径和服务器受到损坏后采取对策很重要。
 未来,越来越多的人将使用 Android 设备上的浏览器查看 PC 网站。然而,很少有网站可以在设备丢失时处理 ID/密码。用户在使用密码存储功能时,需要注意其中的风险。


创建一个考虑到“篡改”的应用程序

Kuu :“……我知道有些东西很危险,但你为什么知道这么多?”

Yuya :“好吧,如果你不知道这么多,我们就无法谈论它。”

咕 :“咕噜咕噜……”

纳兹 :“你说的很有趣啊~♪你就不能制作一个Android应用程序吗?”

Kuu :“我开始在家里把它作为一种爱好,但我已经做得更好了!而且,Yuya 做的事情很糟糕!”

纳兹 :“是啊。我好像听到了。好吧,你不能把你的设备给这样的人渣。”

Yuya :“我的肚子是白色的。”

Kuu :“我不会再给你了!”

纳兹 :“我必须考虑一下我刚才所说的密码,但其他通信也可能相当危险。”

九 :“是这样吗?”

纳兹 :“Kuu制作的那个游戏应用程序有排名功能吗?那么,似乎可以作弊排名。”

咕 :“呃……”

小酷受到纳兹的警告

“通信可能被篡改”是指“如果从应用程序发送重要信息,则该信息有可能是欺诈性的。”

例如,当如上例那样发送排名数据时,如果简单地按原样发送分数数据,则在通信路径期间很容易伪造它。因此,该应用程序可能不再可行。

name=kuu&score=1234
    ↓改ざん
name=yuya&score=9999999999 [実現不可能なスコアなど]

列表1 篡改示例

因此,建议采取对数据进行加密等措施,使其一旦被篡改就会失效(注2)。

encrypted_score=107a67286b5a07ff15881be71377ea673e45f237fb9a04660c2cd2fb8ebd22dc
    ↓改ざん
encrypted_score=?????[改ざん不能]

清单 2 加密且不可篡改的示例

[2]然而,即使是加密的,如果反编译apk文件(Android应用程序的二进制文件),仍然有可能暴露加密密钥。

另外,需要假定存在由于篡改而混入不正确数据的可能性来操作应用程序。

在这些应用程序中,需要关注的不仅仅是排名数据等可见数据。如果发送到服务器的数据包括登录状态、计费状态等,则需要类似的对策。Android应用程序可能被设计为针对每个活动来完成,但如果可以在服务器端管理这些信息,那么使用会话管理等机制就不会在通信内容中出现重要信息,这样做是可取的。

GET / HTTP/1.1
Host: www.example.com
Accept-Encoding: gzip
Accept-Language: ja-JP, en-US
x-wap-profile: http://wap.sonyericsson.com/UAprof/SO-01BR201.xml
User-Agent: Mozilla/5.0 (Linux; U; Android 2.1-update1; ja-jp; SonyEricssonSO-01B Build/2.0.B.0.138) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17
Cookie: SESSIONID=27e2975951f392153f52866ea35045a4
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Connection: Keep-Alive

另一个问题是,传统的手机网站有时会根据源IP地址限制访问。然而,就智能手机而言,必须假设基于相同想法的对策将会很困难。一个因素是,首先没有足够的信息来识别源IP地址,但即使可以识别,也不是根本性的解决方案,因为攻击可以直接从智能手机进行。

例如,可以使用网络共享等方法通过智能手机从 PC 发送通信(注 3 )。还可以创建攻击应用程序并将其安装在智能手机上。

[注3]请注意网络共享可能违反使用条款。

因此,有必要引入一种“无法篡改通信内容”或“能够检测是否被篡改”的机制。

这样,在创建与服务器通信的 Android 应用程序时,了解每个设备、通信路径和服务器上可能发生的损坏非常重要。

Kuu :“这是显而易见的,但我们必须正确地做到这一点。”

Natsu :“嗯,这就是为什么,现在我已经了解了一定的知识,我决定参与即将到来的 Android 应用程序开发项目。”

Kuu :“哦!看起来很难,但看起来会很有趣♪我很乐意!”

Yuya :“但是Kuu创建的应用程序看起来很可疑。”

纳兹 :“没关系,没关系。从现在开始大家都要学习了♪”

Kuu :“好吧,我会尽力让它变得更好一点!”

纳兹 :“那么,我们来准备开发环境吧。

今天的谚语

让我们了解您可以使用智能手机做什么!

你能做的事情越多,你能攻击的区域就越多。

让我们准确了解它与以前的手机有何不同,并采取必要的措施。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值