Monthly Archives: 五月 2015

利用Mono for Android开发的恶意软件

Post by Partrick

近期AVL移动安全团队首次发现一款使用Mono for Android开发的恶意APP,该应用除了使用C#语言开发,还加入了Lua环境,可以执行恶意Lua脚本。

Mono for Android简介

Mono for Android由Novell推出,是业界首个使用Microsoft Visual Studio 为Android平台开发Microsoft.Net应用程序的解决方案,该程序利用C#语法能进行开发基于Android和iOS的应用。

Mono for Android 由 Mono内核运行时间、原始 Android应用程序接口绑定,用于开发Android应用程序的Visual Studio插件和一个包含有构建、调试和部署应用程序所需的各种工具的软件开发工具包组成。

Mono框架作为Visual Studio的一个插件,基于一种用来执行针对该框架所编写的软件的虚拟机。这种虚拟机环境称为CLR(Common Language Runtime,公共语言运行时),主要负责安全、内存管理、程序运行以及异常处理。

在.NET Framework中编写的应用程序的源代码(比如Visual Basic或者C#)最初被编译为一种名为MSIL的中间语言。该初始编译由特定于语言的命令行编译器(Visual Studio或者其他生成工具)来执行。而当执行应用程序时通常会执行二次编译。二次编译将会获取中间语言并将其编译为可在操作系统中运行的可执行代码。二次编译被称为JIT(just-in-time,即时)编译,在其发布的时候会包含一个mono runtime。
1

Mono for android是一个运行时和开发堆栈,使.net开发人员可以充分利用他们现有的Visual Studio和C#知识为基于Android的设备开发应用程序。

      运行时:Mono for Android运行时是一个在Android堆栈的Linux内核上运行的应用程序。它负责解释Mono字节代码,并与Dlavik 运行时进行通信,以便调用本机Android API。
      开发堆栈:Mono for Android也是一个开发堆栈,它提供了创建和打包Android设备应用程序所需的工具。

Lua on Android

在Android手机上编写并运行Lua脚本的前提条件:

      1 加载Lua脚本解析引擎。
      2 以Native API方式调用引擎接口。

直接以JNI方式调用Lua解析引擎的接口十分麻烦,开源项目AndroLua、LuaJava对这些JNI接口进行了很好的封装。
AndroLua是一个包含了LuaJava的Android平台的Lua解析器,它提供一系列映射到Lua C实现函数的Java接口。详情可以参考:《执行Lua脚本的Android恶意程序

Mono for Android恶意软件分析

一、恶意apk文件分析

主要程序结构如下图所示:
2
以上四个类所对应的核心代码主要函数在native方法中:
3
4
5

AM简介
该程序主要定义以下功能:短信接收、监听开机状态。声明读写短信、接收短信等。

678

Mono插件会将编写主要代码编译成dll文件并封装到so文件里,之后通过ida进行动态dump,除了程序封装前的五个文件,依次是” Xamarin_Mobile.dll “、”Z_VFS_Android.dll “、“KopiLua_Android.dll”、” NLua_Android.dll”、” z-core.dll “,前两个文件为Mono运行库而后两个为Lua脚本依赖库,其中” z-core “文件则是核心程序代码。下面将对z-core.dll文件进行详细分析。

二、Dll文件分析

z-core.dll文件结构树如下图所示:
9

详细分析:

类OnBootHandler->OnReceive
概述:联网下载恶意lua脚本文件,并执行lua脚本文件,期间会和服务器通讯上传用户手机号、IMEI等设备信息,根据服务器指令发送短信、拦截短信、上传银行短信的讯息,上传收件箱、用户位置信息。

该程序会执行以下行为:

  • 1 在SD卡创建zcore.txt文件,并写入”Set start date time“和当前时间信息,同时也记录在sharedPreferences中的”me“文件中。
  • 2 动态注册短信接收器SMSReciver。
  • 3 注册ScriptLoader用来载入LuaScript脚本。
  • 4 执行Register函数时AES加密上传手机IMEI、根据返回的数据写到bootScript.lua文件中。
  • 5 和远程服务器通信进行下载/上传Lua文件数据操作。

1011

通过以上网址与服务器通讯并向”bootScript.lua“文件写入数据:
12

类SMSReciever->-> OnReceiver
根据指令该恶意软件有拦截短信、发送短信、上传银行短信的行为。
13

以下为“sms.lua”脚本文件的onSMS函数,程序首先会通过NetClient.Run方法上传接收到的短信,并且还会将指定的号码内容做上传操作,其中包含”900″、”Alfa-Bank”、 “TCS Bank”、”MTS-Bank”、”7494″、”000100″,这里多为俄罗斯银行,可能会给用户造成一定的财产损失。
14

类MainActivity->OnCreate
启动RunService服务后,隐藏图标,隔1秒钟后退出程序。
15

三、lua脚本分析

该恶意软件在data/data对应目录下有生成一些lua脚本文件:
16

lua脚本在本恶意软件中是寄宿在c#代码中被调用的,这里程序提供了个KopiLua的虚拟机,而lua文件都是运行在此之上。bootScript.lua文件中引导信息如下:
17
以上函数就是通过lua引擎(LoadScript函数)载入相关的lua文件,这里会依次调用taskprocessor.lua、sms.lua、echo.lua、teleinfo.lua、geo.lua、contacts.lua、scripteval.lua中的函数。

下面对lua文件进行依次分析:

1、taskprocessor.lua

下图代码是做了一个网络操作,并将数据写入log日志文件中。
18

2、sms.lua

执行onTask方法时,程序通过读取数据进行回调c#中的SendSMS函数进行发送短信操作,然后通过网络把发短信的信号发送给服务器,并把指定的号码添加到BlockedList中。
19

3、echo.lua

此文件定义一个辱骂性的消息。
20

4、teleinfo.lua

获取手机的设备信息,其中包含android版本、IMEI、手机号、运营商、国家等等。
21
22

5、geo.lua

上传用户的位置信息。
23

6、contacts.lua

此文件的功能主要是获取用户联系人信息并上传。
24
调用GetContacts函数上传用户联系人信息。
25

7、scripteval.lua

上传用户的UUID信息。
26

实际上除了以上列出的lua的对象外,程序还会根据远程通信下达指令下载额外的一个lua对象文件” chunk.lua“,但目前该url已失活。
27
28
另外,程序还会获取用户收件箱信息。
29

安全分析总结

该程序运行后会隐藏图标,后台和指定服务器进行通讯,下载恶意lua脚本文件并使用C#进行回调操作,期间会执行如下恶意行为:上传用户手机号、IMEI等设备信息,根据服务器指令发送短信、拦截短信、上传银行短信的讯息,上传收件箱、用户位置信息,给用户造成较为严重的隐私泄露和财产损失。

根据网址、银行信息等推测该程序出自俄国黑客之手,而该程序由于并不是把敏感的行为直接写到C#代码中,而是把重要数据运用lua脚本进行函数回调操作,从而实现用户隐私上传,因此当不联网的时候该程序则不会存在威胁。

AVL移动安全团队专注于移动互联网安全技术研究及反病毒引擎研发,提供强大的移动安全解决方案。欢迎关注我们的微信公众号AVLTeam,我们会定期发布一些移动安全相关资讯,希望能够对您有所帮助。 转载请注明来源:http://blog.avlyun.com/?p=2307

文章分享地址:
微信二维码

执行Lua脚本的Android恶意程序

Post by saya

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中,诱惑用户下载安装使用,具有大范围传播的可能。 1

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

图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等方法。 3

图2 lua环境初始化

4

图3 要加载的lualibs

5

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

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

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

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

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

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

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

12 13

图7 执行获取的msb脚本

屏蔽来自指定号码的短信

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

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

15

图9屏蔽短信

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

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

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

18

图 11添加书签

目前AVL Pro已能识别查杀该木马家族。

AVL移动安全团队专注于移动互联网安全技术研究及反病毒引擎研发,提供强大的移动安全解决方案。欢迎关注我们的微信公众号AVLTeam,我们会定期发布一些移动安全相关资讯,希望能够对您有所帮助。 转载请注明来源:http://blog.avlyun.com/?p=2280

文章分享地址:
微信二维码

Basic4android编写的恶意APP现身

Post by YupaiTS

近期AVL移动安全团队首次发现一款使用Basic4android开发的恶意APP。一旦用户点击运行,用户手机中的大量隐私信息就会被非法窃取。目前,AVL Pro已经可以全面查杀该恶意软件。

一 Basic4android语言介绍

Basic4android(简称B4A)是一个简单然而功能非常强大的Android应用开发环境。Basic4android语言类似于Visual Basic语言,支持更多的对象。Basic4android将代码编译成Android原生(native)应用,无需其它运行环境的支持。与其它的集成开发环境不同,Basic4android是完全用于Android应用开发的开发工具,不支持其它平台。Basic4android包含一个强大的GUI设计器,内建对多屏和坐标的支持,不需要开发者再写XML。开发者可以在Basic4android环境下利用Android模拟器或Android物理设备(利用USB连接或通过本地网络连接)进行程序开发和调试。同时,Basic4android带有非常丰富的库函数,支持所有的Android核心特性,因而使其非常容易进行高级应用开发。

Basic4android提供了SQL数据库、GPS、串口(蓝牙)、照相机、XML、JSON、Web服务(HTTP)、后台服务、动画、网络(TCP和UDP)、文本阅读(TTS)和声音识别、Web浏览、移动电话广告(AdMob)、图表、OpenGL、图像,开发相应功能时可以引用这些库函数来提高开发效率。 1

图1 basic4android功能类库

    采用Basic4android编写的android应用一般有以下几个比较明显的特征:

      1. 资源目录下通常包含以.bal结尾的界面布局文件,用编辑器打开之后可以看到一些常用的界面布局代码;
      2. 只要是引用了Basic4android的库函数,应用的dex文件反编译之后就会包含anywheresoftware.b4a包结构,该包结构中包含Basic4android库函数对应的java类及方法;
      3. 样本程序的入口Activity会继承B4AActivity,并且该入口Activity类中的很多代码都是自动生成的;
      4. 用Basic4android编写的自定义函数如sendsms_Click会在相应的java类中转化成名为\_sendsms\_click()的方法,并且在该方法中会注释java代码是通过编译哪一行Basic4android代码而生成的。

二 恶意代码实例

AVL移动安全团队发现的此款使用Basic4android开发的恶意APP会给用户造成严重的隐私泄露。主要会执行以下恶意行为:

      1. 安装无图标,开机强制启动后台服务,获取root权限。
      2. 将手机QQ好友及聊天记录、本机号码等信息上传至邮箱。

该恶意APP安装无图标,通过am指令启动相关界面,致使用户很难识别出手机已中毒,同时还会上传用户隐私至黑客邮箱。
蓄谋已久的“间谍“会偷偷设置用户隐私的接收邮箱,如图2所示。 2

图2 设置接收用户隐私的邮箱

三 安全建议

由于B4A是一个简单但功能非常强大的Android应用开发环境,所以非常容易进行高级应用开发。这样以来就大大降低了开发难度,让恶意APP开发者有机可乘。

AVL移动安全团队建议大家及时安装手机安装安全软件AVL Pro,并且定期对手机进行安全检测,及时发现手机中的恶意软件。

AVL移动安全团队专注于移动互联网安全技术研究及反病毒引擎研发,提供强大的移动安全解决方案。欢迎关注我们的微信公众号AVLTeam,我们会定期发布一些移动安全相关资讯,希望能够对您有所帮助。 转载请注明来源:http://blog.avlyun.com/?p=2270

文章分享地址:

微信二维码