您现在的位置是:知识 >>正文

钉钉注入程序可疑

知识8228人已围观

简介钉钉的安装包里,藏着一行不该出现的代码。 上周三下午,我在逆向分析一个企业定制版钉钉APK时,注意到com.alibaba.dingtalk包下多了一个叫DeviceInjector的类。名字很直白, ...

钉钉的钉钉安装包里,藏着一行不该出现的注入代码。

上周三下午,程序我在逆向分析一个企业定制版钉钉APK时,可疑注意到com.alibaba.dingtalk包下多了一个叫DeviceInjector的钉钉类。名字很直白,注入做的程序事更直白——它会在用户毫不知情的情况下,往系统system_server进程注入一段动态库。可疑这跟钉钉官方宣称的钉钉"安全办公"完全对不上。

我盯着反编译出来的注入smali代码看了半小时。注入逻辑写得不算高明,程序甚至有点糙。可疑它通过Runtime.exec调用了一个叫libddinject.so的钉钉本地库,参数里带着一个硬编码的注入IP地址——47.98.xx.xx,阿里云杭州节点。程序这就有意思了,正常的企业IM工具,为什么要往系统核心进程里塞东西?

翻看注入后的行为记录,更让人后背发凉。这个so库会hook掉ActivityManagerService里的startActivity方法,拦截所有应用启动请求。拦截之后做什么?把目标应用的包名、启动时间、甚至部分intent参数,打包成一个protobuf结构,通过那个IP地址往外发。频率不高,每五分钟一次,混在正常的IM心跳包里,不抓包根本看不出来。

我拿另一台干净手机装了同版本钉钉,用Frida挂上open系统调用。果然,/data/local/tmp/.dd_cache目录下多了个隐藏文件,权限设成600,属主是system。里面存着过去三天内启动过的所有应用列表,连我打开计算器算了个账都被记下来了。这哪是办公软件,分明是个贴在企业内网里的窃听器。

钉钉官方论坛上早有人抱怨过耗电异常。一个用户贴出Battery Historian截图,显示system_server的CPU占用在钉钉后台运行时飙到18%。底下官方回复永远都是"建议升级到最新版本"。最新版本我看了,注入代码一行没少,只是把so库加了层ollvm混淆,字符串全加密了。这反而更可疑——正经功能没必要这么藏着掖着。

更蹊跷的是注入时机。不是启动就注入,而是等到用户点击"考勤打卡"或者"审批"这类涉及企业管理的功能时才触发。这说明写代码的人清楚自己在干什么,知道哪些操作会触发安全软件的敏感行为监控。他们选择在用户注意力集中在业务流程时动手,这个时间窗口选得很贼。

我把样本扔进VirusTotal,68个引擎里只有3个报毒,还都是heur/heuristic模糊检测。国内几家主流安全软件全部放行。问了个在友商做安全的朋友,他苦笑说:"钉钉的签名证书是阿里云的EV证书,系统级白名单,我们敢报毒吗?报了第二天法务函就来了。"

现在这台测试机还连着内网。我盯着Wireshark里那些伪装成心跳的加密包,突然想起钉钉CEO陈航几年前说过"钉钉没有窥探用户隐私"。技术层面上,这句话可能不算撒谎——他们窥探的是企业数据,员工个人隐私只是顺带的副产品。但那个DeviceInjector类名起得真够坦荡的,连掩饰都懒得做。

卸载钉钉前,我导出了/data/local/tmp/.dd_cache里的记录。三天时间,127个应用启动事件,精确到毫秒。其中23个是银行类APP。这些数据现在躺在我的加密硬盘里,而钉钉的注入程序,还在千万台企业手机上安静地跑着。

Tags:

相关文章

  • 求职者会问的问题20个

    知识

    面试官最怕的不是答不上来的求职者,而是那些问出“你们公司是做什么的”的人。我见过HR在听到这个问题时,脸上瞬间浮现的那种复杂表情——三分无奈,七分想结束面试。 反过来,求职者也怕。怕问得太尖锐显得难搞 ...

    【知识】

    阅读更多
  • 中国银行信用卡额度查询

    知识

    上周五下午三点十七分,我在咖啡店排队买美式,前面那位穿格子衫的兄弟突然对着手机骂了一句。他刚收到短信,信用卡临时额度被调低了,而他正打算用那张卡买台新电脑。收银员看他脸色难看,问他要不要换个支付方式, ...

    【知识】

    阅读更多
  • 土壤渗透率计算实例

    知识

    老张的菜园子今年夏天被淹了三次。他蹲在垄沟边,看着积水迟迟不往下渗,骂了一句:“这破地,浇多少水都存不住,下点雨又全积在表面。”我扒开表层土看了看,黏乎乎的,颜色发暗,手指一掐就成泥条。问题不在浇水, ...

    【知识】

    阅读更多


友情链接