许多iOS
应用都包含一些越狱检测机制,有些会被攻击者绕过,有些却非常困难。之前我也在公众号上放了一篇iOS有反检测能力的越狱工具shadow的分析和检测,但没有整理检测的方法。
下面是一些比较常见的检测越狱iOS
设备方法
越狱进程会修改文件系统,加入,移动和改变文件和目录。这些改变是可以检测到,用来决定这个设备是否被越狱。
在越狱过程中,一些额外文件会在设备上创建。查找这些文件是一种简单的检测越狱的方法,同时对于恶意用户来说,也是最容易检测和绕过的。一个攻击者可以在应用上搜索一个字符串,然后改变这些可疑文件名来防止检测。
下面列出了越狱检测所基于的最流行的文件:
/private/var/stash
/private/var/lib/apt
/private/var/tmp/cydia.log
/private/var/lib/cydia
/private/var/mobile/Library/SBSettings/Themes
/Library/MobileSubstrate/MobileSubstrate.dylib
/Library/MobileSubstrate/DynamicLibraries/Veency.plist
/Library/MobileSubstrate/DynamicLibraries/LiveClock.plist
/System/Library/LaunchDaemons/com.ikey.bbot.plist
/System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist
/var/cache/apt
/var/lib/apt
/var/lib/cydia
/var/log/syslog
/var/tmp/cydia.log
/bin/bash
/bin/sh
/usr/sbin/sshd
/usr/libexec/ssh-keysign
/usr/sbin/sshd
/usr/bin/sshd
/usr/libexec/sftp-server
/etc/ssh/sshd_config
/etc/apt
/Applications/Cydia.app
/Applications/RockApp.app
/Applications/Icy.app
/Applications/WinterBoard.app
/Applications/SBSettings.app
/Applications/MxTube.app
/Applications/IntelliScreen.app
/Applications/FakeCarrier.app
/Applications/blackra1n.app
就像通过查找某些新文件来检测越狱设备一样,分区和文件夹上的某些权限也可以标明越狱设备。
在越狱过程中,会修改对根分区的访问权限。如果根分区具有读/写权限,则设备已越狱。
/etc/fstab
文件的大小/etc/fstab
文件包含系统的挂载点。许多越狱工具通过向该文件添加条目、更改其文件大小来修改该文件。典型的iOS
应用程序不能读取文件,但它可以检查文件的大小。
不过,请注意,文件大小可能会因为苹果版本更新而改变。
有些目录最初位于较小的系统分区中,然而,在越狱过程中会覆盖此分区。因此,必须将数据重新定位到更大的数据分区。由于旧文件位置必须保持有效,因此创建了符号链接。下面的列表包含可能是越狱设备上的符号链接的文件/目录。应用程序可以检查这些符号链接,如果它们存在,则检测越狱。
/Library/Ringtones
/Library/Wallpaper
/usr/arm-apple-darwin9
/usr/include
/usr/libexec
/usr/share
/Applications
在越狱设备上,应用程序安装在/Applications文件夹中,因此被授予root权限。越狱设备可以通过让应用程序检查是否可以修改沙箱之外的文件的方式检测到。这可以通过让应用程序尝试在/private目录中创建文件来实现。如果文件创建成功,则设备已越狱。
如果在越狱设备上运行,iOS提供的某些API
调用的行为会有所不同。基于API
调用检测越狱设备既有效,也很难被识别和绕过。
fork
沙箱拒绝非越狱设备上的进程创建子进程。通过检查fork()上返回的进程ID,应用程序可以检测它是否已成功创建子进程。如果创建子进程成功,应用程序可以推断它是在越狱设备上运行的。
system
在非越狱设备上使用空参数调用 system()
函数将返回0。在越狱设备上执行相同的操作将返回1。这是因为该函数将检查/bin/sh
是否存在,并且它只存在于越狱设备上。
dyld functions
此检测方法首先调用_dyld_image_count()
和_dyld_get_image_name()
等函数来查看当前加载了哪些dylib
。由于补丁本身是Dylib
的一部分,这种方法很难动态打补丁。
攻击者很难绕过这种检测方法。
越狱设备可以运行非越狱设备通常不存在的服务,最常见的是OpenSSH服务。
请注意,此检测方法可能非常慢。如果设备上未安装或运行SSH,则连接超时可能需要一些时间。攻击者只需更改OpenSSH服务的端口,即可轻松绕过此方法。
大多数越狱设备都安装了Cydia
。虽然攻击者可以更改Cydia
应用程序的位置,但他们不太可能同时更改Cydia
应用程序注册的URL
方案。如果从您的应用程序调用Cydia
的URL方案(cydia://)成功,则可以确定设备已越狱。
很难改变Cydia的方案,但在测试过程中简单地移除Cydia是可能的。
一般来说,越狱检测越复杂,越难检测和绕过。实现越狱检测时最常见的错误通常存在于实现本身。
我们经常遇到有很好的越狱检测功能的应用程序,但是实现在一个函数中,该函数根据设备是否越狱返回TRUE或FALSE。在这些情况下,我们使用Cycript或类似的工具来反转检测函数的返回值,从而绕过越狱检测。
在实践中,最好的越狱检测是将多种技术结合起来,并将它们集成到其他功能中,使它们不容易被绕过。
=========================================
文中和文末的小广广,渴望你手指的触碰!!!
请关注,转发,点“在看”,谢谢!!
如需要转载,请在公众号留言!!
暗号:b4b65