安全应用程序审核 -- Lionmobi
由于Android生态系统对用户更加开放,因此你可以从许多来源下载和安装任何应用程序,而不仅仅是谷歌应用商店。但是,App开发人员和恶意软件作者也获得了同样的便利。安全问题始终是Android用户关心的一个重要话题,特别是对于中国用户。出于这个原因,市场上有很多针对Android发布的安全应用程序。在本系列中,我们将通过测试分析一些知名的安全移动应用程序,让非技术用户来了解它们真正的性能表现。让我们先从Play商店中一个非常受欢迎的应用程序开始:来自Lionmobi的Power Clean - Antivirus&Phone Cleaner App。
在谷歌应用商店,你可以看到几款来自Lionmobi公司的安全和工具类应用,我们测试分析了其中所有和安全相关的应用。但是在这篇文章中我们重点关注Power Clean这个应用,因为这个应用基本包含了其他几个应用的主要功能。对于同一功能在其他应用上的性能表现是类似的,其中的代码也有很多重复。
Power Clean自身拥有超过1亿下载量,从显示数据上看目前仍有超过250万活跃用户。除了此应用程序的流行程度之外,我们关注此应用程序的另一个原因是它具有非常多的安全和工具类功能,其中包括病毒/恶意软件扫描,wifi安全扫描,CPU降温,设备加速,内存/存储清理等。有些功能听起来很酷,对Android用户也很有帮助。但它的实际效果如何?让我们深入了解一下。
该应用程序的用户界面做的很专业,它在应用的上半部分显示一些设备状态,包括温度,内存,存储的使用率。功能框在下半部分显示。由于我们更关注安全功能,那就从防病毒部分开始吧。如果单击anti virus按钮,应用会显示一个类似雷达的动画显示扫描过程。在这个扫描过程中包括了Wi-Fi安全检测,病毒检测,和恶意软件检测:
对于Wifi安全检测,它声称可以检测DNS劫持,SSL劫持,ARP欺骗和获取WiFi加密方式。但是,从我们的测试来看,即使我们在搭建的钓鱼热点环境或ARP欺骗攻击中,这个功能的检测仍然给出安全的结果,并没有实际检测到相关的攻击。因此我们手工审核了应用的代码,并发现了一些非常有趣的结果:
public static int getEncryptionType() {
try {
WifiInfo connectionInfo = a.getConnectionInfo();
if (connectionInfo != null) {
String bssid = connectionInfo.getBSSID();
try {
List scanResults = a.getScanResults();
if (scanResults != null) {
String str;
for (int i = 0; i < scanResults.size(); i++) {
ScanResult scanResult = (ScanResult) scanResults.get(i);
if (scanResult.BSSID.equals(bssid)) {
str = scanResult.capabilities;
break;
}
}
str = null;
if (str != null) {
if (str.contains("WPA2")) {
return 3;
}
if (str.contains("WPA")) {
return 2;
}
return str.contains("WEP") ? 1 : 0;
}
}
} catch (Exception e) {
return -1;
}
}
} catch (Exception e2) {
}
return -1;
}
public static boolean checkDnsFake() {
return true;
}
public static boolean checkArp() {
return false;
}
public static boolean checkHttpsHookFake() {
return false;
}
似乎该应用只在函数getEncryptionType中,编写了真正的代码来获得WiFi加密类型,对于其他WiFi相关的安全检测,它只返回固定的结果。所以即使网络环境受到攻击时,它却仍然告诉你WiFi环境安全。
在WiFi扫描之后,应用程序将继续扫描病毒和恶意软件。为了测试恶意软件的检测率,我们从VirusTotal随机下载了50个恶意软件样本。这些样本被大多数反病毒厂商(AV)鉴定为恶意软件。由于Power Clean应用程序只能扫描已安装的应用程序,而不能对指定文件或文件夹进行扫描,因此我们需要在手机上安装所有测试样本。借助xargs和adb的帮助,我们在测试手机上安装了所有50个样本后,在下面的截图中我们可以看到手机上安装的部分应用:
从我们观察WiFi扫描功能的情况来看,我们对恶意软件扫描部分的检测率没有太大的期待。但是,考虑到我们下载的这些恶意样本大多数来自2018年,并且被大多数AV供应商对它们报毒,我们认为该应用应该至少能检测出大部分的样本。但结果仍旧令人失望:
除了在屏幕上成功显示广告之外,应用程序没有检测出任何样本并给予警告。至此我们从安全检测看到的情况是,Lionmobi Power Clean除了在界面上插播一下广告,实际上几乎没有任何保护你手机的实际功能。对于所有测试样本列表,你可以参考附录A。考虑到该应用并不是以安全为主要功能,因此我们将相同的50个样本测试另外一个Lionmobi App Power Security,其主要功能是移动安全。不出意料结果是一样的:
在测试并分析了该应用的安全性部分之后,我们还分析了它其他一些有趣的功能。例如,“设备降温” :
当你的手机CPU显示高温(如150F)的红色警告时,你可以单击“冷却”对设备进行降温,应用会播放一些动画效果,然后显示你的设备经过该功能降低了一些温度。但是,如果你真的查看了冷却逻辑的代码,你将看到以下代码片段:
private void b(boolean z) {
if (!isFinishing()) {
if (z) {
aaj.setLong("last_cooler_time", Long.valueOf(System.currentTimeMillis()));
int i = this.e - this.g;
if (i >= 45) {
i = 45 - ((int) ((Math.random() * 1.0d) + 1.0d));
}
aaj.setKeepTemperature(i);
}
uv.scheduleTaskOnUiThread(800, new Runnable() {
public void run() {
Intent createActivityStartIntent = aim.createActivityStartIntent(CoolerActivity.this, CoolerResultActivity.class);
createActivityStartIntent.putExtra("intent_data", Long.valueOf((long) CoolerActivity.this.g));
createActivityStartIntent.putExtra("back_to_main", CoolerActivity.this.shouldBackToMain());
CoolerActivity.this.startActivity(createActivityStartIntent);
CoolerActivity.this.onFinish(true);
}
});
}
}
它只是生成一些随机数来告诉你它冷却了多少度,而实际上什么也没做。它设备加速功能上,也是使用了一些随机数而已。
总之,我们在对Lionmobi Power Clean安全功能和一些工具类功能的测试中发现,该应用伪造了很多功能,其扫描病毒和恶意软件的功能虽然代码存在,但是并不具备实际有效的检测率,对手机没有没有实质的安全保护功能,基本不能防护常见的安全威胁。除此之外,它很多虚假的功能中都插入了大量的广告,严重影响用户体验。例如,当他们声称他们正在更新欺诈电话号码库时,除了在屏幕上显示一些广告之外,它实际的代码中什么也没做。 虽然声称自己是安全应用程序,实际上浪费了Android用户大量的计算存储空间。更糟糕的事情是,该应用可能误导用户已获得足够的安全防护,而使用户处于未知的风险之中,造成更严重的后果。
该文章中审核的所有Lionmobi应用均来自Google Play商店。
他们是:
Network Master Speed Test_v1.9.82 - 306030a2040861e0ce52e736cd396e05
Power Battery Battery Life Saver Health Test_v1.9.8.6 - 6736e8db37df6ad04dbf827b2c8b60ec
Power Clean Antivirus Phone Cleaner App_v2.9.9.64 - c06b7b8e78202ead80a2a1ec5ed1120f
Power Security Anti Virus Phone Cleaner_v2.1.6 - c9d069ff45397fdf7b6412093b59e80c
最后要感谢月落对所有样本的审核分析。
附录 A