新的电话拦截恶意软件-Android.HeHe


发布人:admin分类:网络安全浏览量:25发布时间:2017-12-12

FireEye研究实验室最近发现一个新的Android恶意软件,有六个变种,并且能窃取短信、拦截电话。所有样本一致使用相同的Activity名称,所以命名为“Android.HeHe”。

这是已知变种的列表:

MD5值

VirusTotal 检测率

1caa31272daabb43180e079bca5e23c1

2/48

8265041aca378d37006799975fa471d9

1/47

2af4de1df7587fa0035dcefededaedae

2/45

2b41fbfb5087f521be193d8c1f5efb4c

2/46

aa0ed04426562df25916ff70258daf6c

1/46

9507f93d9a64d718682c0871bf354e6f

1/47

总结

    该应用程序伪装成一个给用户推送系统更新的软件,名字为“android security”(图1)。它主动连接C&C服务器,并自动注册,然后就开始监视收到的短信。从C&C服务器获取定义好的一个电话号码列表。如果其中任意一个号码发信息或者打电话给一个感染后的手机,恶意软件会拦截短信或电话,关闭设备自身的通知,并删除相关痕迹或日志。并且该条短信会被记录到内部数据库,发送到C&C服务器。而来自这个列表里的任意来电都将会被拒接,并且悄无声息。

图1

分析过程

    程序启动时,HeHeActivity主函数就开始运行了。其构造函数调用android.os.Handle新建一个句柄,作为一个线程等待android.os.Message从而去执行不同的动作,这也是下面将要提到的。

    因为HeHeActivity遵循DailogInterfaceOnClickListener标准,所以应用程序启动时会显示一个showAlterDailog消息(图2)。

图2.上面的消息让用户相信程序正在检查系统更新

应用程序在后台启动了3个系统服务,如下:

沙箱逃脱策略

它通过调用isEmulator函数来判断是否为虚拟环境:

1.它会检查设备的MODEL值(谷歌ADTbundle模拟器的MODEL变量会含有字符串“SDK”)。
2.它还会检查IMSI码是否为空值(模拟器没有相关联的IMSI码)。

下面是isEmulator函数的相关代码:

String v0 =TelephonyUtils.getImsi(((Context)this));
if(v0 == null) {
   return;
}
 
public static boolean isEmulator() {
   boolean v0;
   if((Build.MODEL.equalsIgnoreCase("sdk")) ||(Build.MODEL.equalsIgnoreCase("google_sdk"))) {
   v0 = true;
    }
   else {
       v0 = false;
    }
   return v0;
}

该代码将会检查是否正在Android QEMU模拟器下运行,并且检查IMSI值是否为空。

注册服务

服务在后台运行,启动时调用setComponentEnabledSetting方法:

this.getPackageManager().setComponentEnabledSetting(newComponentName(((Context)this), HeheActivity.class), 2, 1);

从主菜单自动删除让用户以为它已经不存在了。然后通过如下检查网络状态:

public void checkNetwork() {
   if(!this.isNetworkAvailable()) {
       this.setMobileDataEnabled();
    }
}

服务被创建后,OnStart方法被调用,它会检查intent消息中类型为START和LOGIN的消息。

START

    如果消息类型为START,则调用sendReigsterRequest()方法。这个方法会首先检查模拟器的存在与否(如上面沙箱逃脱里所说)。

    然后,它收集IMSI(全球用户识别号),IMEI(设备号),手机号码,地址信息和推送通道ID。将这些信息打包放在一个JSON对象中。JSON对象随后转换为一个字符串发送到C&C服务器。与C&C服务器通讯后面会提到。

LOGIN

如果消息类型为LOGIN,则调用sendLoginRequest方法收集以下信息:

1.该应用程序的版本号(硬编码为1.0.0)
2.手机型号
3.操作系统版本
4.设备关联的网络类型(GSM/CDMA)

这些信息也将打包成一个JSON对象,转换成字符串,并被发送到C&C服务器。

RegisterBroadcastReceiver服务

这个服务在启动时注册,然后反过来注册IncomeCallAndSmsReceiver(),用于对以下三个intent做出响应。

1.android.provider.Telephony.SMS_RECEIVED,设备收到短信时的通知。
2.android.intent.action.PHONE_STATE,设备的状态变化时的通知,比如RINGING或者OFF_HOOK。
3.android.intent.action.SCREEN_ON,屏幕打开或关闭时的通知。

此外,它会查看安卓的一些URI:

1.SmsObserver用于查看content://sms,这使它能够访问存在于设备上的所有短信。
2.CallObserver用于查看content://call_log/calls,这使它能够访问设备上的所有来电,去电以及未接来电的记录。

Connection服务

一开始提到的主函数HeHeActivity中,ConnectionService类的ACTION_START intent如下:

Intent v2 = new Intent(((Context)this),ConnectionService.class);
v2.setAction(ConnectionService.ACTION_START);
v2.setFlags(268435456);
this.startService(v2);
LogUtils.debug("heheActivity","start connectionService service");

然后启动一个定时器,间隔为5000秒,执行的任务如下:

1.创建android.os.Message类的实例对象
2.设置消息对象的what值为1
3.消息句柄在构造函数中初始化,然后反过来调用showFinishBar方法用于显示信息“현재 OS에서 최신 소프트웨어버전을 사용하고있습니다”,翻译过来就是“您正在使用的操作系统已经是最新版本”

接收器

来电和短信的接收

    RegisterBroadcastReceiver在应用程序启动时注册为接收器。当设备收到一条短信时,IncomeCallAndSmsReceiver获取到intent。由于接收器监听三个intent之一,程序会检查接收器接收到的任意intent的类型。

    如果接收到的intent类型为android.provider.telephony.SMS_RECEIVED,它将会提取短信内容和发信者号码。如果电话号码的前三个字符匹配一个名为tbl_intercept_info表中电话号码的前三个字符,则SMS intent被中止,短信被从设备的短信收件箱中删除,用户将永远看不到它。然后抑制短信通知,该应用程序捆绑短信如下:

{
   "content":"TESTING",
   "createTime":"2014-01-10 16:21:36",
   "id":null,"messageFrom":"1234567890",
   "token":null
}

然后把它发送到C&C服务器(http://108.62.240.69:9008/reportMessage)

同时把短信记录在其内部数据库中的tbl_message_info表。

如果接收到的intent是类型为android.intent.action.PHONE_STATE的,应用程序会检查本地数据库中的tbl_intercept_info表。如果来电者的号码出现在该表中,然后将手机的振铃模式设置为静音,抑制来电通知并断开来电。它从通话记录中删除相应的条目,删除该设备的所有相关痕迹。

不过没有为android.app.action.SCREEN_ON意图定义任何行为,即使IncomeCallAndSmsReceiver接收器是容器。

C&C服务器

这个程序使用了两个硬编码IP地址来定位其C&C服务器:122.10.92.117和58.64.183.12。该应用程序通过HTTP POST请求执行所有通信。在HTTP POST里的内容,使用AES与被硬编码到应用程序中的一个128位的密钥进行加密。该应用程序将其最新版本号发送到122.10.92.117,用于检查版本。IP地址58.64.183.12则用于报告收到的短信。

因为IP地址ping不通,服务器的响应就无法进行分析。可以明确的是,服务器会发送一个JSON对象的响应,其中会包含一个“token”字段。

虽然C&C服务器当前不可用,但是我们可以推断出应用程序如何通过检查处理接收到的响应。

该应用程序将不同的数据结构转换成等效的JSON对象发送到C&C服务器。此外,所有JSON对象的响应转换成其等效的内部数据结构。我们还观察到用于填充内部数据库的一个表(tbl_intercept_info),表内为需要拦截的电话号码。

该应用程序使用hxxp://122.10.92.117:9008和hxxp://58.64.183.12:9008将信息发送到C&C服务器。

这些URL在其内部类的数据结构中的映射如下所示:

GetLastVersionRequest

/getLastVersion

RegisterRequest

/register

LoginRequest

/login

ReportRequest

/report

GetTaskRequest

/getTask

ReportMessage Request

/reportMessage

其含义和结构将在下面的章节说明。

GetLastVersionRequest

当应用程序第一次安装在设备上将发送这个请求。发送设备版本号(目前设定为1.0.0)到C&C。C&C服务器应响应一个可用的有更新的URL。响应中一个“更新”字段代表一个更新的可用性。

发送到C&C的检查版本请求

RegisterRequest

当应用程序发送一个类型为LOGIN的intent(上面提到过)。该请求包含IMSI,IMEI,电话号码,短信地址(电话号码),通道ID,令牌和正在使用的IP地址。这会导致受感染设备在C&C注册。

LoginRequest

这个请求被发送到C&C进行进一步验证,它包含先前接收到的令牌,恶意软件版本,手机型号,操作系统版本,网络的类型和其他活动的网络参数,诸如信号强度。回应为一个结果值。

ReportRequest

这个请求将tbl_report_info表中的信息发送到C&C。此表为其他请求已经发送但是失败的信息。

GetTaskRequest

这个请求从C&C服务器请求任务。响应包含了重试时间间隔和sendSmsActionNotify值。当LoginRequest的回应值为401而不是200时就会发送这个消息。

ReportMessageRequest

这个请求将设备上接收过的短信发送给C&C服务器。它包括短信内容,短信的时间和短信发送者。在logcat的输出可以看到:

结论

Android恶意软件变种如雨后春笋般出现。如Android.HeHe和Android.MisoSMS等恶意软件揭露攻击者对监控短信和电话呼叫记录的兴趣越来越大。它们也可以作为一个很好的提醒,从非信任的商店安装应用程序将会是多么危险。

[via fireeye]


被黑站点统计 - 文章版权1、本主题所有言论和图片纯属会员个人意见,与本文章立场无关
2、本站所有主题由该文章作者发表,该文章作者与被黑站点统计享有文章相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和被黑站点统计的同意
4、文章作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、被黑站点统计管理员有权不事先通知发贴者而删除本文

免责声明

本站主要通过网络搜集国内被黑网站信息,统计分析数据,为部署安全型网络提供强有力的依据.本站所有工作人员均不参与黑站,挂马或赢利性行为,所有数据均为网民提供,提交者不一定是黑站人,所有提交采取不记名,先提交先审核的方式,如有任何疑问请及时与我们联系.

admin  的文章


微信公众号

微信公众号


Copyright © 2012-2022被黑网站统计系统All Rights Reserved
页面总访问量:21406983(PV) 页面执行时间:77.355(MS)
  • xml
  • 网站地图