分析
乍一看,恶意APK样本是严重混淆过的,并使用了之前从未见过的一种技术。但并不是说他就使用了一种极其复杂的技术。它主要以来生成各种随机函数的方法来隐藏样本的真实功能。
在初步检查分析过程中,研究人员发现了生成函数的一些代码,然后用APK沙箱分析系统进行了静态和动态分析。
沙箱分析结果
从沙箱中获取的结果可以帮助我们更好地理解样本。首先,在dex operation区域,动态加载的文件有两条记录。第一个是与主应用加载函数相关,第二个引用了名为payload.apk的样本,这意味着样本在执行过程中可能会安装其他的应用。和信息窃取、连接初始化一样,最有趣的调用是在第一个应用的代码中执行的。
根据这些信息和近期活跃的其他恶意软件家族,研究人员开始分析该恶意软件的本质。首先进行分混淆分析。
混淆分析
代码中包含大量随机生成的函数代码。但研究人员识别出了所用的代码,大多数类是没用的,而且没有真实的功能。
每个垃圾类都有一个随机的小写字母和大写字母组成的名字。
图 1: 随机生成的无用类
另外,有用的类和无用的类之间也有明显的差别。但所有类中都含有原始的名字。每个合法函数或包都伴随着7个执行无用计算的函数或包。
代码中的字符串大都是用实现字节数组XOR解密的函数生成的。每个字符串都对应一个接受参数和返回String对象的特定函数。
恶意软件分析
混淆的样本其实是属于BianLian恶意软件家族,该恶意软件家族最早是2018年由ThreatFabric发现的。
BianLIan最开始只是其他恶意软件的释放器,但是开发者很快开始实现自己的恶意代码来攻击土耳其银行应用。一般的安卓恶意软件首先是隐藏其图标然后滥用Accessibility服务功能来请求权限直到授予需要的权限。
在获取这些权限后,恶意软件会初始化所有的模块。与2018年版本的恶意软件相比,开发者增加了一些新的功能。除了滥用Accessibility服务外,还增加了以下模块:
图 2: 权限请求
text: 用来发送、接收和记录SMS消息的模块
ussd: 用来运行USSD代码和调用的模块
injects: 用来运行overlay攻击的模块,主要攻击目标是银行应用
locker: 用来锁屏使用户无法使用设备的模块
除了这些模块外,BianLian样本还包含了以下2个模块:
· screencast
· socks5
Screencast模块分析
Screencast模块允许恶意软件记录设备屏幕信息。它使用安卓package android.media.projection.MediaProjection来创建录屏的虚拟显示。
首先检查屏幕是否锁定。如果是,就解锁然后开始录屏。录屏是远程启动的,与其他功能一样,使用了FCM(Firebase Cloud Messaging)技术。
图 3: Screencast Module
Socks5模块
该模块是使用JSCH(Java Secure Channel)来在设备上创建SSH服务器的模块,其中JSCH是纯Java实现SSH2的库。通过使用该工具,BianLian可以创建一个在端口34500上用远程端口转发技术运行SSH会话的代理,这样就会使用与C2的通信很难检测。
图 4: Socks5 Module
释放的文件
BianLian最初是作为释放器出现在恶意软件行业中的,但在该样本中却没有发现payload。在之前的BianLian版本中,payload是从APK的assets中解密的,而本样本中是从C2服务器下载的。
释放的APK文件其实并不是恶意软件自己。代码基很少因此执行一个函数。它会通过Google SafetyNet API来检查Google Play Protect是否运行。该代码是主应用通过Java反射来加载和使用的。
图 5: Payload.apk执行
事实上payload并不是其他的恶意软件,而是BianLian使用的一个工具。
结论
BianLian其实一直在开发和发展过程中。增加的函数是非常有效的,使该恶意软件家族变得非常具有威胁性。而且,其使用的新混淆技术可以绕过基于字符串的检测,很难通过静态分析技术进行检测。研究人员还发现了一些Anubis样本也使用了相同的混淆算法。这表明混淆器开发者要么在黑市出售亦或拥有这两个恶意软件家族的源代码。