译者:Janus情报局
预估稿费:260RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
简介
近期,McAfee移动研究团队在谷歌商店144个“木马化”的应用中发现了一种新型的Android恶意软件。McAfee团队将其命名为Grabos,因为该应用的代码中出现很多次该字符串,包括变量名和方法名。Grabos最初是在Android应用程序“Aristotle Music audio player 2017”中发现的,该应用程序声称自己是一款免费音频播放器:
图1 谷歌商店里被植入木马的音乐应用
发现Aristotle Music恶意应用时,这款应用的用户评价很高,下载量也高达100~500万之间。然而应用最新的评论也有用户说,这款应用被检测为恶意软件。
图2 用户反应Aristotle Music被检测为恶意软件
谷歌商店里的Grabos应用
McAfee移动研究团队在今年九月份发现Grabos后,第一时间上报给谷歌商店,谷歌商店迅速删除了恶意应用程序。而经过进一步调查,McAfee团队又发现了其他143款应用(参见本文文末的完整列表),目前这些应用已从谷歌商店下架。而在McAfee上报给谷歌商店后,以下六款应用立即被移除:
图3 谷歌商店其他被植入木马的Grabos应用
在撰写本文时,34款应用仍然可以通过缓存访问它们的网页,因此也可以获取一些应用相关的信息,比如应用安装量,最后一次更新日期和用户评分。这些应用最后一次更新大多在今年8月份和10月份。它们在谷歌商店的平均评分为4.4,有大约420万~1720万的下载量。
图4 谷歌商店的恶意应用详情
相关应用链接:http://cloud.appscan.io/monitor.html?id=5a0c5dc002723815d6a3361b
Grabos能够避开谷歌商店的安全策略,可能是因为注入的恶意代码受到商业混淆程序的保护,在不运行应用程序的情况下进行静态分析就很困难。如果不知道应用程序的检查策略,即使对它进行动态分析,也很难阻止其检查策略的执行。但只要我们脱了壳,一切就可以继续进行了。
孰真孰假
我们发现,文件资源管理器和音乐播放器也被注入了Grabos,而这其中有一些是开源的。每当应用程序启动,它就会检查以下设置,再决定要启动“假(合法功能)”还是“真(注入打包代码)”应用。
· isOnline: 检查设备是否有网络连接。
· getIsBlacklisted: 检查Android调试桥(adb)和开发设置是否启动,或者设备是否在模拟器中。如果是后者,该设备会被列入黑名单,并启动“假”应用程序
· getIsForcedBlacklisted: 由控制服务器设置的flag。
代码还有一个测试模式,允许执行“真”应用,以防在模拟器中运行或启动adb和开发设置。这些检查都是在检测应用程序是否被执行动态分析,并在必要时隐藏代码。
如果应用未被分析或处于测试模式,“真”应用就会被启动。这个隐藏的音乐下载器会在YouTube上搜索特定的歌曲。一旦歌曲被选中,它就会以MP3或MP4的格式下载并被离线播放。
图5 真假应用流程图
看到这里,应用程序似乎只是一个隐藏在木马程序中的音乐下载器,它检查动态分析行为,以防止由于音乐版权被谷歌商店下架。然而,在这背后,还有更多惊人的事情默默发生。
与控制服务器通信
除了“假”应用和“真”应用功能外,Grabos也作为一个广播接收器(receiver)出现在AndroidManifest中。当连接发生变化或安装应用程序时,接收器执行。
图6 AndroidManifest中的Grabos接收器
如果接收端由于连接性变化而被执行,则当设备脱机时,执行结束,或者自上次连接后不到5秒的时间结束。如果超过5秒,方法“updateRemoteSettingsSynchronousTask”执行。该方法收集和加密(Base64+高级加密标准)以下来自受感染设备的数据:
· 设备信息:
· android_version(Android版本)
· build_model(手机型号)
· install_referrer(安装来源)
· network_country(网络国家代码)
· sim_country(SIM卡国家代码)
· carrier_name(设备名称)
· language_code(语言代码)
· country_code(国家代码)
· time_timezone(时间时区)
· 设备定位:Grab使用免费的IP地理定位API服务获取IP地址信息,比如城市、国家、ISP、组织、区域和邮政编码。
· 设备配置:
· is_emulator
· is_rooted
· is_adb_enabled
· is_dev_settings_enabled
· allow_mock_location
· allow_non_market (unknown sources enabled/disabled)
· is_vpn_connected
· dp checks (除了商业混淆程序提供的root,调试,模拟器检查)
· 已安装Grabos应用信息:版本号、包名及安装时间
· 安装特定应用:如果受感染的设备中安装了预先定义的列表中的应用,Grabos会将此信息上报。(稍后详细解释)
所有信息都经过加密并传输给控制服务器。远程服务器接收到信息后作出响应,返回包含下载音乐参数(URLs、API keys、user agents,client_id等等)的加密数据,用来展示广告(nativead_id, interstitial_id, banner_id等等)、显示特定的通知,比如要求用户在谷歌商店对该应用评分:
图7 控制服务器提供的“rate this app”参数
在应用第一次打开时会弹出评分窗口,如果点击“5星好评”按钮,应用程序会打开谷歌商店,用户可以在谷歌商店对应用进行评分。
图8 评分弹窗
用同样的方法,远程服务器也可以提供参数,让用户与朋友共享应用,承诺享受更快的下载速度:
图9 控制服务器提供的“share the app”参数
控制服务器还发送参数“is_forced_blacklist”,如果值为“true”,则手动将该设备列入黑名单,以防止隐藏应用程序的执行。
神秘功能
除了报告被感染的设备的位置和配置信息之外,Grabos还利用方法isPackageInstalled和应用包名,检查设备中是否安装了特定的社交及谷歌官方应用。根据当前安装的应用程序,相应的值设置为true或false,该信息被加密,并传输远程控制服务器:
图10 向控制服务器报告设备中的社交及谷歌应用列表
McAfee将这一发现报告给了谷歌。然而我们并不知道报告这些应用程序的目的。然而,我们相信这些信息对恶意软件作者是有用的,因为Grabos已经实现了几种机制,诱使用户安装远程服务器提供的应用程序。让我们来看一下这些函数。
自定义推送通知和其他应用程序
在从远程服务器获得初始设置之后,将执行AsyncTask shownotificationifif,以检查控制服务器是否提供了参数n_title、n_description和n_package。如果已经提供了参数,Grabos会检查应用程序是否可以从谷歌商店获取(如果“pack”是一个名称而不是一个URL),或者从远程服务器获取(如果“pack”以HTTP开头)。
如果应用程序未被安装并且可获取,Grabos会从远程服务器收集其他参数(比如,图标和大图标),以创建自定义通知,诱导用户安装应用程序。
图11 控制服务器提供用于创建自定义通知的参数
Grabos也会检查远程服务器是否提供了以下参数:
· interstitial_letang_options:提供延迟和重复活动显示的值。 (initial_delay and min_interval)
· interstitial_letang:包括以下远程指令:
· admob: 执行方法 “showAdmobInterstitial”
· nothing
· grabos_direct
如果该指令是grabos_direct,Grabos会获取参数grabos_direct_interstitial的title、package和max_times_shown值,以打开谷歌商店该应用页面或触发下载应用。
图12 URL下载应用或打开谷歌商店应用界面
通知和interstitial_letang方法都是为了欺骗用户下载或安装应用程序,当连接发生改变时,触发执行。不过,当音乐下载器执行时,Grabos还实现了另一个应用程序传输方法。这个方法,ShowGrabosIfNeeded,与interstitial_letang类似,它检查需要的参数是否存在,应用程序是否可用,以及是否可以在未经用户授权的情况下打开应用程序:
图13 Grabos检查已安装应用是否可以被打开
一旦Grabos确认设备在线,应用可从谷歌商店或远程服务器获取,并且应用包未曾安装,恶意软件会从远程服务器获取以下参数,用于创建一个警告弹窗,并诱导用户下载另外一个应用:
图14 Grabos用于创建警告弹窗的参数
雷达下飞行:巧妙躲避分析
除了采用多种方式检测应用是否被进行动态检测(模拟器、adb、开发设置)和注入代码加密,Grabos每24小时会更新远程设置(除非处于测试模式下)。这个限制可以通过修改设备的日期和时间进行绕过,我们就可以进行进一步的应用分析。然而,最新版本的Grabos包含了检查设备是否自动获取日期、时间和时区,这对于接下来的分析也带来了不小的挑战。
图15 Grabos检查设备是否自动获取日期、时间和时区
这个设置的状态通过字段time_is_auto和time_timezone_is_auto上报给远程控制服务器。虽然这个检查没有在Grabos代码中使用,但是信息可以用来确定应用是否处于动态检测,并绝对是否传输额外的payload。
控制服务器所使用的URL也表明,Grabos一直试图将其网络流量伪装成合法的。乍一看,URL似乎属于熟悉的广告软件公司,名字是相同的。然而,Grabos所使用的并不是官方的“.com”域名,而是“.link”、“.click”这种,而这些域名并没有被该广告软件公司注册。
最后,Grabos定义了额外的机制,目前尚未实现,该机制用于将特定设备加入黑名单或白名单。例如,该设备可能会在未来版本被列入黑名单或白名单,这取决于受感染设备的国家代码或配置语言:
图16 基于语言和国家代码的黑、白名单功能
Grabos还定义(但尚未实现)了基于IP地址将设备列入黑名单的方法
图17 基于IP地址信息的黑名单功能
结论
在我们分析这一威胁时,控制服务器总是为自定义通知提供空参数,以欺骗用户安装应用程序。考虑到显示广告的功能和大量的下载,我们认为Grabos的主要目的是通过推广应用程序的安装牟利。
Grabos在谷歌商店越来越流行,因为它允许用户免费下载音乐,尽管它不断要求用户对应用进行评分。然而,用户并不知道该应用背后的隐藏功能。
鉴于Grabos还上报了在受感染设备上出现的特定社交和谷歌官方应用,我们猜测不法分子利用这些信息,使用在代码中定义的各种通知方法诱导用户下载安装其他应用。尽管在我们分析的过程中,远程服务器并未传输所需的参数触发自定义通知,但是这些设备已经被成功标记,沦为其他Android应用的下载器。
McAfee移动安全将这一威胁标记为Android/Garbos。为了保护您免遭此类威胁,请在您的移动设备上使用安全软件,检查该应用的用户评论,避免使用功能与实际不符的可疑应用。
Grabos包名列表
com.picklieapps.player
com.musicaplayer.stonetemples
com.mp3musicplayer.playmusicmp3
com.densebutter.musicplayer
com.airplaneapps.soundmeter
com.dinosaursr.musicplayer
com.tenuousllc.humneate
com.astropie.musicplayer
info.chargeshoes.videoplayer
com.callsaver.doubtful
com.unfestenedsail.freeapp
com.extendmilk.freeplayer
com.excellentlossapps.playermusic
com.AliciaTech.free
com.mp3player.musicplayer.freelocalmusicplayer
com.freemusicplayer.freemusicplayer.free
com.afromusicplayer.fremediaplayer
com.info_astro.glider_player
com.illfatednotice.humdrum
com.headybowl.musicplayer
com.musicgratisplayerfree.free
com.naturityllc.mp3player
info.anothertube.music.player
com.startdancingapps.callrecorder
com.social.video.saver.pro
es.gratis.video.downloader.hd
com.sportingapps.copyleft_music.player
com.auto_call_recorder.freeapp
com.freenewsreader.rssfeed
ar.music.video.player
com.curatorinc.ringtone.search
com.mp3musicplayer.local_files_player
com.copyleft.stream.musica.player
info_de.mp3.music.player
com.nobodybeats.musicplayer
com.file.manager.pronessbest
info.ark.music.mp3.player
com.air.browser.free
com.aneeoboapps.playlistmanager
com.local_music_player.free_mp3_player
com.greenlinellc.voicechanger
com.free.playlist.creator.tube
com.toporganizer.fileorganizer
com.thumb.webbrowse
com.aspirator.ringtones.player
com.freevideoplayer.musicplayer
com.vimfast.videodl
com.whimsical.piano.free
com.truckneat.freeapp
com.crowdedarmy.volume.controller
com.arnold_legal.mp3.musica
com.descent.shutterfly
com.thankyou.arrowplayer
com.pocahantasapps.musicplayer
com.astroplayer.freee
com.couchpotato.musica.play_stream
com.abstractly.musica.player
com.matsumoto.mp3player
com.musicequalizer.freeequalizer
com.lifesbad.fileexplorer
com.videolunch.free
legal.copyleft.cc.mp3.music
com.ark.music.mp3.player
info.musik.mp3.music
com.streamerplayer.stream_videos
info.voicerecorder.recordvoice
com.snip.browser
com.checkrein.musicapp
com.mp3musicplayer.freemusicplayer.playmusic
com.jadedprogram.mp3player
com.preoral.freeborn
com.voice.changer.freeappsapp
es.streamplay.stream.player
com.localmp3music.freeplayer
com.drummachine.machinedrums
com.coloringbook.freetrynow
com.videodownloader.social_video_download
com.ElephantApps.FileManager
com.scaricare.app.musica
com.quicksearch.tube.player
com.rooseveltisland.mp3player
com.mindprogram.musicf
com.freeborn.sdkintegration
com.koseapps.tubemusica
fr.baixar.videos.gratis
info.adeptly.forgoneapp
us.musicas.gratis.player
com.miniaturef.swanky
com.insta.mp3.music.streamer
com.anchor.musicplayer
com.repeate.mp3musicplayer
com.FeisalLLC.MusicPlayer
com.shelfshare.freeapp
info.simple.streamer.player
com.streamplayer.freearnold
com.freeturkish.video.downloader
com.cowherd.freeapp
com.localmp3musicplayer.local_player
com.scaricare.apps.musica
com.silymove.freeapp
com.pinkphone.funfreetube
info.tissuepaper.freemusic
com.chopsuey.musicplayer
com.branchnotice.musicplayer
com.fradcip.MasterApp
sv.music.player.mp3.ares
com.social.video.downloader.for_fb
com.frobenius.time.tube
com.spelldoom.comeup
com.bailymusic.player
com.sportifco.musicplayer
com.topsaver.video.downloader
com.coupleweeks.modcium
com.unbecomingllc.videodownloader
com.video.for_fb.downloader.saver
com.macdrop.apptool
com.callsaver.recorderfreeapp
com.arnie_legal.mp3.musica
com.kikiapps.freeplayer
com.pintaapps.expensetracker
com.marble.musicequalizer
com.artproject.searcher
com.UnitTest.FreeApp
com.exudedplayer.freemusicplayer
com.blackballed.player
com.mp3player.decisiveapps
com.rusticd.musicplayer
com.byunhyeong.jungfree
com.voicelessapps.mp3musicplayer
com.localmp3player.freeplayer
com.kinokunya.free
com.socialvideo.downloader_vim
com.viastore.video.saver_for_fb
com.disarmbit.reache
com.crackerbalancellc.mp3converter
info.vaskollc.jpfree
com.freemusicplayer.musicplayfreetoolpalyer
com.combustionapps.musique
com.arnold.mp3.musica
com.purpleheadphones.audioplayer
com.unscalableapps.free
com.freefile.organizerfree
com.free.mp3.stream_cc_music
com.mp3uncle.musiccamera
IOCs
上文中34个应用:http://cloud.appscan.io/monitor.html?id=5a0c5dc002723815d6a3361b
144个应用:http://cloud.appscan.io/monitor.html?id=5a0c2235027238354a53cd94
Grabos家族匹配规则:http://cloud.appscan.io/monitor.html?id=5a0c729402723815d6a33621