logo

鱼肚的博客

Don't Repeat Yourself

软解公司监控

今年公司强制要求所有人在工作电脑中安装了监控软件,不安装的话就会锁定账号。

最可恨的是这个软件居然还要求开录屏权限,打算监控屏幕吗?

想一想它可能会监控所有键盘输入,所有网络请求,就会浑身不自在。

那有没有什么方式可以破解监控呢?

监控原理(猜测)

image-20210401171154841

具体流程:

  1. 有专门的进程采集行为数据,如键盘操作、屏幕显示。并上报
  2. 有专门的进程采集身份信息,并向后台上报。这些进程不能杀死,因为一旦身份信息没有及时上报,就会引起后台监控平台的报警
  3. 另有一个进程负责更新版本
  4. 多个进程之间互相唤醒

难点

如果直接杀死进程,并卸载相关软件,会因为没有定时上报身份信息,被“老大哥”查出来。

即使它和采集行为的进程是两个相互独立的进程,因为彼此会相互唤醒,杀了个别进程也没用。

思路

我想到了下面几个思路:

  1. 开两个计算机用户,专门新建一个,运行监控软件,后台上传身份信息,另一个正常工作。

    这种方式不可行,因为监控进程以root身份启动,可监控所有用户的操作。

  2. 开虚拟机运行监控软件

    监控运行在虚拟机中,正常工作在宿主机中,有可能不可行,因为mac地址等用来校验身份的信息发生了变化。

  3. Docker,监控软件未提供linux版本,无法运行。

  4. 开两台电脑,一个工作,一个跑监控

    取决于监控实现方式,如果检测的是mac地址是否匹配,就不可行。如果检测的是有没有上报,则可行。

  5. 限制资源

    通过限制资源,使监控软件活在一片缺少算力的荒漠之中,虽然还能存活,但几乎无法正常工作。

目前的方案

目前我采用的是限制资源的方式。

首先找到监控软件对应的进程名,然后使用cpulimit限制其可用的cpu量。当它的cpu被限制到极低的时候,可能发生两种情况:

  1. 因cpu过低,虽然能够正常运行,但是采集数据掉帧严重,只能采取到一些片断的信息。
  2. cpu过低,无法正常工作。进程反复挂掉,又被其它进程重新启动。

两种方式下,都有可能偶发地上传一些身份信息,使“老大哥”不会起疑心。

同时因为可用资源低,掉帧严重的监控信息有可能已经不足为虑。

参考脚本:

1#!/bin/sh
2
3# Get cpulimit from https://github.com/opsengine/cpulimit
4# or `brew install cpulimit` if you are on macOS
5
6apps=("进程1" "进程2" "进程3" "进程4" "进程5")
7# Set the respective limits here
8limit=0.1
9
10while true; do
11  for app in ${apps[@]}; do
12    for pid in $(pgrep ${app}); do
13      cpulimit -l ${limit} -p ${pid}
14    done
15  done
16  sleep 60s
17done

后续可能的改进方向

  1. 限制网络传输速度
  2. 每隔几分钟杀死所有监控进程,再过几分钟唤醒。
  3. 伪造信息,造成干扰

PS

如果被发现限制了cpu,可以解释为cpu占用过高影响了正常工作。