Windows on ARM大战深信服EDR认证系统

前言

  本方案的实现方法并不稳定,同时笔者并不完全清楚其中的底层理论(感觉和计算机网络关系较大),但是Windows on ARM(下文统称WoA)的笔记本毕竟也得归为电脑类别,在办公室还是应该让它发挥出电脑的功能——像其他电脑一样正常查资料、写文件、敲代码等。但是由于绝大部分厂商发布Windows软件时不会特意编译原生ARM版(尤其是驱动等软件),在WoA使用深信服EDR不可行(亲测会经常闪退或无法安装)。本方法可能不稳定,但实属是无奈之举。
  如果你的设备运行Linux系统,你应该已经发现不需要装任何软件即可正常使用网络。很遗憾本人没有macOS相关便携设备,也没有做相关研究。因此本文所阐述的方案仅仅基于Windows系统(但是我好奇一点,Chrome OS的电脑究竟会被发送端识别为Linux电脑,还是Android电脑,还是Android手机呢)。

起因

  办公室的电脑要求安装统一端点安全管理系统aES(终端检测响应平台EDR)(下文统称aES,请与AES加密算法等进行区分),但是这个终端拥有极为严格的安全措施,经常会莫名其妙干掉一些很正常的东西,例如我的Python开发环境、玩游戏时需要UU加速器时安装的驱动、将电脑从Win11家庭版切到专业工作站版时使用的HEU KMS Activator、甚至小猫咪使用魔法的时候都要弹窗提示。同时,aES在后台持续占用也比较吃性能,它的安全设置也完全无法更改,想要临时使用破解软件都无从下手。不谈这么多,仅从开发环境被干掉的角度来讲,这对一个计算机开发人员来说是无法忍受的,所以想办法寻找替代的解决方案。

4月19日更新——改浏览器UA(最新最简单)

  我感觉之前的我绕的弯路有点大了,显得我自己很傻。
  4月9日晚上,我死活睡不着,然后突然想到,既然关闭了WSL之后,甚至当天重启之后都可以保持网络正常,那是不是代表网络的识别并不是通过系统的标识,而是通过浏览器的标识?
  我对计算机网络的知识了解并不透彻,所以用语可能不准确。这个设想基于每次识别网络弹出需要认证的通知时,都是需要打开浏览器进行认证——即使是在VMware的Ubuntu虚拟机里面也是如此。虽然虚拟机内仍需要联网认证可能是因为实体机是Windows导致的混淆,但WSL的独特现象还是让我百思不得其解。既然浏览器可能直接影响了aES对电脑的识别,那aES又识别了浏览器的什么呢?
  我首先想到的就是User Agent(下称UA)。UA是HTTP协议中的一部分,具体可见User-Agent Switcher and Manager - Microsoft Edge Addons。很多网页都是通过UA来识别正在进行访问的用户到底是一台什么设备的,这样做也有很多好处,比如可以非常方便地区分手机和电脑,然后分别推送对应布局的网页。对于我这种小白来说,网络对浏览器的识别也就只知道这个东西了。
  然后我就试了一下,先说结论,可行,而且相当简单
  要更改浏览器的User Agent,那相当简单。我们以Microsoft Edge为例,直接利用Edge强大的扩展生态,通过使用User-Agent Switcher and Manager(链接:User-Agent Switcher and Manager - Microsoft Edge Addons)即可切换UA,非常简单。为了保证切换有效,我们在如图红圈位置选择Edge,绿圈选择Linux,然后在下面出现的列表中选择第一个,点击Apply(all windows)即可。如果不奏效的话,那就在弹出的识别页面(就是那个提示安装准入系统的页面)先改回Windows再改成Linux,实测这样也有效。
修改红圈和内圈中的内容,然后选择下面出现的第一条即可
  另外,最奇葩的是,实测在能上网了之后即使将UA调回Windows,也能够在很长一段时间内(目前还不确定有多久,一两个小时还是没问题的)正常上网。
  因此本人大胆推测当用户连接到网络的时候,不管是什么系统发送端都会一视同仁要求用户打开浏览器进行认证,然后发送端简单地根据用户的浏览器UA判断用户使用的是什么系统,如果是Windows就要求用户安装Ingress和深信服aES,然后在一段时间内就不再对这台设备进行认证检查——如果对每个浏览器都进行检查,那微信内置浏览器等其他可以用来浏览的软件都有着不一样的UA,这势必会造成更大的麻烦。或许这也正是联网检查要求使用Edge、Chrome、Firefox等主流浏览器的原因,因为这些浏览器有着非常统一和工整的UA,便于进行判断而能够减少误杀。感觉自己绕了一圈子,最终用这么简单的方式解决了这个问题,我自己都感觉有点好笑。
  尝试了一下点击Apply(active window),也是可以的。但是这个功能每次会在浏览器启动时重置,也就是每次又弹出右下角弹窗进行认证的时候,需要再次点击Apply(active window)按钮,也很相当麻烦。进行这个尝试的原因是,在某些页面下载软件的时候,感觉也是通过识别UA来判断用户需要哪个版本的软件的,而更改UA为Linux会导致默认的下载选项变为Linux版,所以还要选择全部可下载版本再选择Windows,还是挺复杂的,不是吗?但是每天联网的时候都要来一次反而更麻烦了,不如在下软件的时候短暂更换原UA来得快。
  最后我看了一下这个软件的设置页面,终于发现了它的白名单功能,在刚才那张图中选择Options按钮,然后选择White-List Mode,并在这一模式下方输入1.1.1.3,最后把页面拉到最底下点击Save即可。这样,Linux的UA就只对认证界面起作用了,不会干扰到下载软件什么的。(还有另一种方法,在浏览器的扩展管理里面针对这个插件设置站点访问权限,将其改成在特定站点上,然后设置一下,虽然我还没试过要怎么设置,但是我知道肯定可行,看到有人用类似方法解决了b站在Windows电脑播放hevc格式视频的问题)
  说实话这一方案比之前的几个简单得多得多,而且非常稳定,不需要安装并运行别的什么大软件,节约了很多内存和存储空间,要不我说之前的操作真的都好傻啊。接下来的一个目标是处理掉网络的多终端检测,从而达成在院里使用路由器的可能。

在x86平台的解决方案

  开始之前再强调一遍,我不太清楚其中的底层实现逻辑,并且本方案并不稳定(例如如果经常需要远程连接某台电脑,不推荐在该电脑上部署本方法)(但是其实说实话,aES本身就不太稳定,我的一台电脑是有一直正确安装aES的,但是经常遇到aES自动重启/自己关掉的情况,导致网络断连)。同时,如果没有强烈需求,建议遵守上级相关规定,不在万不得已时不要使用本方案。

  通俗来讲,本方案的逻辑其实是让网络发送端以为我们的设备是一台Linux设备/是一台安装了aES的Windows设备。所以我们要安装虚拟机,然后在虚拟机内通过网络认证,借此达到伪装的目的。经过本人测试,更推荐使用Linux作为虚拟机——首先相比Windows,Linux系统的资源(内存、性能和存储)占用更小,亲测可以将虚拟机内存(RAM)设为1GB;其次,Linux系统进行网络认证时不需要安装aES,只需打开认证界面,认证界面发现本设备是一台Linux设备后会直接放行。但如果本身要依赖Windows虚拟机进行工作,也可以使用Windows虚拟机。

  此外,下一章写的WoA解决方案在x86平台理论同样适用,但是个人更喜欢VMware,如果你更喜欢WSL,同样可以采用下一章的方案。

  1. 安装VMware Workstation Pro(下载链接),并修改BIOS/开启Windows相关功能等,使之能够正常创建虚拟机,如何修改建议根据报错内容自行百度。
    密钥请自行百度或者Google,网上非常多。有能力请支持正版。
  2. 下载系统镜像。可以选择Linux镜像(此处我们选择Ubuntu桌面版,其他版本请自行尝试,Ubuntu Server理论上也可行,但是仍需通过命令行安装浏览器,但亲测不使用浏览器不可行),也可选择Windows镜像。由于我们只需要进行认证而不需要跑其他程序,我们完全可以使用非常古早的Windows版本(例如,Windows 10 Enterprise 2016 LTSB资源占用少,是不错的选择,没有尝试过Windows 8及更早,其实感觉没有必要用那么早的,反而容易出现兼容性问题)(不推荐2015 LTSB是传闻其对固态硬盘支持不好)。
    Windows镜像建议从MSDN下载:MSDN, 我告诉你 - 做一个安静的工具站
    Ubuntu镜像建议从Ubuntu官网下载,也可以从镜像站下载:Index of /ubuntu-releases/ | 清华大学开源软件镜像站。选择最新LTS版本下载即可,理论上老版本也可行,但是别太早,毕竟我们还是要使用浏览器的。
  3. 安装虚拟机。这里我就不详细讲了,下载的是哪个系统的镜像,直接百度“VMware安装Windows”/“VMware安装Ubuntu”,根据教程一步一步来即可。占用的资源按照自身电脑配置进行选择,不需要限制内存/处理器核心数来减少占用资源,因为镜像安装还是需要吃性能的,安装好之后系统还需要初始化。例如,32G内存可以直接选择分配8G,12核处理器也可以直接分配10个内核(怎么分配教程里面会教的)。等到完成下面几步之后,再更改分配的配置到比较小的值即可。但是注意,网络适配器的网络连接一栏一定要选择NAT模式
    下面是随便找的教程,可以参考:
    VMware虚拟机安装win10系统教程(超详细)_vmware安装windows10-CSDN博客
    VMware 安装 Ubuntu(2023 当然要看热乎的教程了)_vmware安装ubuntu-CSDN博客
  4. 安装浏览器。这一步很简单,Ubuntu Desktop已经自带了Mozilla Firefox浏览器,而Windows推荐使用Microsoft Edge(亲测使用Google Chrome会无法认证,Firefox没有试过,但Edge亲测可行)。要在Windows上安装Edge,可以在实体机上事先下载Edge离线安装包(我们使用Microsoft Edge for Business,实质上与普通Edge没有任何差异),然后将其导入虚拟机内(最简单无脑的方案是可以先在实体机插U盘,选择将U盘连接到实体机,然后将安装包装入U盘,拔掉U盘再插入一次,选择将U盘连接到虚拟机,即可在虚拟机内打开安装包)。
    没错的话,选择Ubuntu系统的此时已经可以上网了,选择Windows系统的只需要再执行一次之前在Windows上配置的过程即可。然后你就可以开心地干掉实体机上的aES了。
    (如何干掉:经尝试,先卸载Ingress组件再直接卸载aES不需要密码。如果仍需要的话,或者可以进入安全模式后使用其他的卸载软件——如IObit Uninstaller Pro进行辅助,卸载要输密码的时候直接点取消,然后软件就会自行将aES完全清理掉,然后重启正常启动即可。在网络上还有“在【引导】选项选择安全引导【最小】”等方案,但此方法实测容易引发PIN不可用等问题,略麻烦,如果是大佬也可以尝试)。
  5. 修改虚拟机配置。重要的事情说三遍,网络适配器的网络连接一栏一定要选择NAT模式网络适配器的网络连接一栏一定要选择NAT模式网络适配器的网络连接一栏一定要选择NAT模式(其实我不确定其他几个模式行不行,但是经测试NAT模式绝对行。为什么我坚持要用NAT模式,因为这种网络一般有多设备检测,如果桥接模式或者仅主机模式导致发送端认为本机又将数据分发出去,将导致10分钟的短暂封禁——而NAT又不是不能用)。除此之外,就是将内存、处理器核数等调小,Ubuntu系统我只给了1G内存、1个内核(我的实体机处理器是AMD Ryzen 7 8845HS),Windows LTSB系统我给了2G内存、2个内核。这就足够了,每次开机启动的确会较慢,但是后台常驻占用资源少才是根本,毕竟我们的主要任务还是在实体机上,不是吗?
  6. 去虚拟机系统里面修改自动休眠时间,将其更改为永不休眠。如果虚拟机在休眠/睡眠/关机状态下,网络认证很可能会失效,然后带来不好的使用体验。保险起见也推荐将虚拟机的自动关闭屏幕时间改为永不

  然后就没有然后了,x86实现起来非常简单。然后每次开机你只需要将虚拟机挂在后台即可,不在需要aES认证的网络下就不需要开启虚拟机。享受摆脱aES带来的快感吧(❁´◡`❁)

  但是还有一个缺陷,虚拟机只能同时运行一个,比如你按照我说的办法同时安装了Windows和Ubuntu虚拟机,你能且只能同时开启其中之一,否则开启多个的话就会打架抢认证,最后大家全都无法认证,这一点我还没有想到好的解决方案。

在ARM平台的解决方案

  还是再强调一遍,我不太清楚其中的底层实现逻辑,并且本方案并不稳定,甚至请你在使用本方案之前做好本方案无法使用的觉悟(搞坏电脑那还是不会的),降低心理预期。
  本方案实现所使用的ARM架构设备:HUAWEI MateBook E Go 2022 性能版,处理器为高通骁龙8cx Gen 3,系统为Windows 11专业工作站版23H2。

何为Windows on ARM?

  其实和x86的Windows没啥区别,只是这个Windows是运行在ARM架构的处理器上,而传统PC运行在x86架构的处理器上。类比一下,M1处理器的MacBook可以说是运行的macOS on ARM,而2020年及之前的Intel/AMD处理器的MacBook和Mac可以说是运行macOS on x86。
  ARM架构相比x86架构相比,优点是功耗普遍较低,缺点是同时期性能上限较差。目前绝大部分PC还在使用x86处理器,但由于ARM架构的优点,近几年用于电脑的ARM架构技术发展也快了许多。尽管如此,ARM生态还是比x86生态差距较大,macOS侧由于起步较早且推动力度大,目前适配相对更好。大部分x86软件都能够通过转译运行,但涉及GPU、图形加速、驱动等的软件在WoA都表现不佳,包括本文的对手aES。经测试,aES在WoA平台会提示安装失败,即使安装成功在使用过程中也经常闪退甚至无法打开,完全无法正常日用。

为什么WoA的解决方案比x86少?

  上文说了,WoA解决方案在x86平台理论同样适用,但是反之不然。因为VMware目前在Windows平台没有原生ARM版本,安装x86版本也只会报错而无法正常使用。其他模拟器、虚拟机皆如此。但是幸运的是Windows自带了子系统,可以替代上文的虚拟机,而子系统又同样支持NAT模式。因此我们选择Windows 11自带的适用于Linux的Windows子系统(Windows Subsystem for Linux,下称WSL)作为替代。事实上,选择适用于Android™️的 Windows子系统(Windows Subsystem for Android™️,下称WSA)或许可以起到同样的作用,但WSA已经被微软官方宣布停止支持,同时WSA发展时间较WSL来说更短,运行时占用资源也相对更多。因此,选择WSL相对更稳定。

如何安装WSL

  直接放别人的教程吧,比我的语言组织好多了。
  看教程之前,注意以下几点:

  1. 请先将教程完整看一遍,清楚有哪些步骤,然后再进行实操。同时如果遇到问题可以查看本注意事项能否协助解决,或者自行百度,或者寻找我求助。
  2. 如果你使用的是Windows 11的话就不用像教程中那样麻烦地安装WSL。只需要2行命令:
    wsl –update
    wsl –shutdown
    即可完成WSL2的安装,之后只需要按照安装Ubuntu的教程继续即可。
  3. Ubuntu选择最新的22.04 LTS也没有问题,选择不是特别旧的旧版本理论也没有问题。
  4. 文中“选择一个桌面管理器”处,我本地执行相关命令后不会出现该选择界面,不用管直接继续即可,没有任何影响。
  5. 启动xfce4的命令如果使用startxfce4报错,可以尝试使用sudo startxfce4(sudo是Linux系统的系统管理指令,是super user do的缩写)(其实xfce4所有相关的步骤都不做我觉得也没问题,因为之后要打开wFirefox也完全可以通过在虚拟机终端输入firefox打开,而且还是全屏的,分辨率也很给力,通过xfce4反而使得分辨率很低,看起来没有那么顺眼;但如果你需要打开很多Linux软件同时使用,或许xfce还是更适合)。
  6. 如果你是x86架构的电脑看到这里,你也可以选择下载Microsoft Edge浏览器,最简单的是在教程结束后,通过Mozilla Firefox浏览器去Edge官方下载页面下载deb包,然后进行安装(请自行搜索如何安装deb包,如果你使用的是Red Hat分支Linux而不是Debian分支,同样可以下载rpm包)。但是如果你是ARM架构的电脑,很遗憾截止撰写本文时,微软并没有发布适用于ARM架构的Linux系统的Edge浏览器,因此我们只能使用默认的Firefox。
  7. 每次开机后启动Ubuntu的方法也很简单,右键开始图标后选择终端,在顶部有个倒三角选择Ubuntu,点击即可开启Ubuntu。此时请区分实体机终端和虚拟机终端,右键开始图标后选择终端出现的是实体机终端,而点击倒三角选择Ubuntu打开的终端是虚拟机终端,请不要混淆!!(通过这个方法打开的二者都同时跑在Windows Terminal这一UWP应用上,也不要将Windows Terminal的概念与上面二者混淆)不再使用Ubuntu之后建议在实体机终端通过wsl --shutdown命令将其关闭来节省资源和电费。
  8. 开启Hyper-V似乎需要Windows 11专业版及以上,可以借助HEU KMS Activator进行Windows版本的切换和数字权利激活。

  下面是教程:WSL2 + Ubuntu + 图形界面安装 - 哔哩哔哩
  我知道到目前还有一个问题,那就是WSL和wFirefox都是英文,打开中文页面会直接乱码。没事,一会我还会说。
  在面对需要aES进行认证的场合下,开机后直接启动Ubuntu并在虚拟机终端输入firefox打开浏览器,然后按照WSL中的Firefox(后文简称wFirefox)的提示打开网络认证页面,之后关闭wFirefox即可。很奇怪的一点是,如果持续保持wFirefox的运行,会导致过一段时间上不了网,所以需要将其关掉。如果不行的话,反复刷新或者尝试挂机,多尝试一下应该就基本正常了。

安装WSL后的后续工作

  刚才提到,现在还存在的问题是WSL目前只有英文,wFirefox里面的大部分内容看起来很麻烦。所以我们要给WSL引入中文。
  首先安装相关包(在Ubuntu虚拟机终端输入,不论是直接从Windows Terminal进去还是从xfce4的终端进去都是一样的,不是在实体机终端):

1
2
3
sudo apt install language-pack-zh-hans
sudo dpkg-reconfigure locales #这一步第一个页面要选择en_US.UTF-8和zh_CN.UTF-8(通过空格键选择), 并在第二个页面(按回车后的页面)选择zh_CN.UTF-8为默认语言
sudo apt install fontconfig

  然后由于WSL得天独厚的双系统文件共享的优势,我们直接使用Windows自带的字体:

1
sudo ln -s /mnt/c/Windows/Fonts /usr/share/fonts/font

  最后扫描字体目录,并生成字体信息的缓存:

1
fc-cache -fv

  到这一步应该已经完成了。还不行的话可以再使用wsl --shutdown命令关闭WSL再启动,应该就没问题了。如果刚才由于没有中文而不知道在哪里进入网络认证界面,此时估计也很清楚了。
  如果你的电脑内存(RAM)不够,你可以选择限制WSL2的内存占用。其中memory用于限制内存,swap用于限制虚拟内存交换分区,processors用于限制处理器核心数。这和VMware的虚拟机参数设置异曲同工,不是吗?理论上将内存限制为1G应该可行,不行就试试2G,到写这篇文章为止笔者还没有尝试(∠・ω< )⌒☆
  WSL采用的默认联网方式就是NAT,因此无需额外设置。如果你想要试试不用NAT模式能不能起到更好的/同样的效果,你可以按照这篇文章进行网络连接方式的修改。

  多说一嘴,无论在什么设备上,内存一定指的是RAM,将ROM称为内存而将RAM称为运行内存(运存)是手机厂商为了营销产品而玩的把戏,请不要上当!例如,你的手机是8+256的,那么8G称为内存,256G称为存储/硬盘/闪存/外存。请不要把256G称为内存。

疑惑(待解决/求解答)

  奇怪的一点是,在VMware方案(也就是x86方案)里面,每次开机后需要将VMware挂在后台,如果认证成功后立即关闭虚拟机,网络就会在几分钟内变为不可用,需要重新开启VMware里面的虚拟机进行认证。而WSL这边恰恰相反,如果开启wFirefox打开一个网页之后开始正常使用实体机上网,那么会导致没一会就重新需要认证,然后wFirefox里面的认证界面会一直反复刷新,而不会正常认证,静置一段时间后才会恢复正常,而在认证成功后直接关闭wFirefox似乎就没有任何问题。更奇怪的是,进行过一次认证后,很长一段时间内似乎都不需要再打开WSL——就算是重启或者重新连接网络也是如此,更别说不需要开启wFirefox了。具体能有多长尚不明确,但是保持计算机一两个小时的正常使用是没问题的,更长的时间,我还没有测试。
  两者的挂机认证模式完全相反,这让我摸不着头脑。如果有计算机网络/Linux/WSL的大神,还请不吝赐教,解答我的问题。

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020-2024 Minato Xeon Microsoft
  • Visitors: | Views:

别和金钱过不去。

支付宝
微信