执行Lua脚本的Android恶意程序

AVL移动安全团队近期发现一种会执行lua脚本的Android恶意程序,该程序会在本地代码创建Lua环境,联网下载脚本、运行,能够回调Java层代码实现私发短信、添加书签等操作,影响手机的正常体验。

Lua 是一个小巧的脚本语言。其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。它作为一个强大、轻量的嵌入式脚本语言,可供任何需要 的程序使用。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译、运行。Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用

一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。很多应用程序、游戏使用Lua作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。

Android 平台直接以JNI方式调用Lua解析引擎的接口十分麻烦,但目前已有开源项目AndroLua、LuaJava对这些JNI接口进行了很好的封装。 AndroLua是一个包含了LuaJava的Android平台的Lua解析器,它提供一系列映射到Lua C实现函数的Java接口。

木马分析

该类型木马往往隐藏在“午夜视频”等极具低俗诱惑的APP中,诱惑用户下载安装使用,具有大范围传播的可能。

木马午夜视频01(1)

程序运行时,会加载libMS.so,而libMS.so加载Lua脚本前,会先解密msb文件,然后还添加一个mobile库,里面注册了sendsms、addbookmark等方法,这些函数是通过回调Java代码实现。运行流程详见图1。

图1 Lua环境

图1 Lua环境

So中创建Lua环境

程 序运行后,会将assets/module.zip文件拷贝到”/script/module/”目录下,并执行解压缩操作。之后会创建Lua接口指针, 加载Lua通用扩展库(package、table、io、os、string、math、debug、md5、json、socket、mime、 mobile、tea)。而mobile库会注册sendsms、addbookmark、getactiveapntype、messagebox、 querymessageboxvalue、cleansmsreceiver、popsmsreceiver等方法。

图2 lua环境初始化

图3 要加载的lualibs

图3 要加载的lualibs

图 4 mobile库所声明注册的方法

图 4 mobile库所声明注册的方法

解密运行smtm.msb脚本,获取相关配置信息

将assets/smtm.msb文件拷贝到”/script/cache/”目录下,解密获取一个Lua脚本,执行后返回smtmconfig和uid,并添加到一Vector容器中。从该容器中读出smtmconfig字段所对应的数据,解析获取相关配置。

解密06(1)解密07(1)

图5 smtm.msb文件所对应的Lua脚本

图5 smtm.msb文件所对应的Lua脚本

登录远程服务器,更新配置信息、执行相应操作

运行LoadingActivity这个主Activity,联网smtmLoginUrl上传用户手机固件信息,解析返回值,并执行获取的msb脚本。其中smtmReg所对应的数据为发送注册短信的号码、smtmScan存放要拦截来信号码。

登录09(1)

图6 解密运行smtmurl.msb,返回联网上传参数

图6 解密运行smtmurl.msb,返回联网上传参数

登录11(1)

图7 执行获取的msb脚本

图7 执行获取的msb脚本

屏蔽来自指定号码的短信

监听来信,屏蔽来自指定号码的短信,影响正常短信的接收,可能会导致用户资金损失。

图 8解密smtmScan对应的键值,与来信号码进行比对

图 8解密smtmScan对应的键值,与来信号码进行比对

图9屏蔽短信

图9屏蔽短信

后门程序,私自发送短信、添加书签等

该 程序在so中搭建好了Lua环境,且在运行过程中会下载加密的Lua脚本即msb文件并执行。而mobile库所对应的函数中,注册了sendsms、 addbookmark、getactiveapntype、messagebox、querymessageboxvalue、 cleansmsreceiver、popsmsreceiver等方法。当联网下载的脚本会调用mobile.sendsms或 mobile.addbookmark方法时,会回调java层的相关代码执行发送短信、添加书签等操作:

后门15(1)

图10 回调Java层代码发送短信

图10 回调Java层代码发送短信

图 11添加书签

图 11添加书签

[via@AVL Team]