187台笔记本被扣走 藏在德州客厅里的假同事现形记
原创
紫禁
紫禁
紫禁玄科
2026年10月23日 11:19
四川
去阅读
SECURITY · INTELLIGENCE
187台笔记本被扣走 藏在德州客厅里的假同事现形记
2026年10月23日 · 8 min
网络安全#身份安全#案例复盘
01
九月的清晨 40户人家的门被敲响
9 月 21 日开始,得克萨斯州的 40 多处住宅,在一周之内被 FBI 逐一敲开了门。进门之后的场景,跟\"入室盗窃团伙\"的想象完全不一样:客厅、书房、卧室里,一张张长桌并排摆着一排排打开的笔记本电脑,屏幕亮着,线缆整齐地接到一个个小黑盒子上——屋里没有人上班,但每一台电脑都\"在工作\"。
10 月 13 日,美国司法部把这次行动摆上台面:代号 Operation Lonestar Roundup,起诉 14 人,扣走约 187 台设备,其中既有笔记本电脑,也有 KVM 切换器——一种能让\"人不在现场\"却像坐在电脑前一样操作的设备。这些住宅有个专门的名字:笔记本农场(laptop farm)。
案子的主角不是传统意义上的入侵者。起诉书描述的链条是:一群远程\"员工\",用盗来或伪造的身份入职美国公司,公司把电脑寄给\"员工\",电脑却住进了中介的客厅;真正在键盘前敲代码的人,从头到尾没有踏进过美国。
客厅里那排没人用的笔记本 其实有人在千里之外上班
02
笔记本农场 公司电脑住进陌生人的客厅
先把这门\"生意\"的运转方式讲清楚,后面所有细节才有落点。
一,拿身份。用盗用或伪造的身份投简历、过面试。起诉书里两名美国人干的就是这个环节:一位出借自己的姓名和伪造驾照,帮远程员工把工作\"挂\"在合法身份下。
二,接设备。公司发的笔记本寄到\"员工\"填的地址——其实是中介家里。被扣走的 187 台设备,就是这么一台台攒出来的。
三,装通道。中介在电脑上装好远程控制软件,再配上 KVM 切换器,境外的人远程登录后,看到的画面、敲下的键盘,和坐在客厅里没有任何区别。
四,领工资。薪水打进\"员工\"账户,再经由假名账户层层转走。起诉书点名的那位俄亥俄中介,一个人就让二十几台公司笔记本保持在线,通过假名账户转移了 32 万美元以上。
你看出来了吗?这条链上没有一步需要\"黑客技术\"。不打漏洞、不写木马、不发钓鱼邮件——它打的是招聘流程本身。公司以为自己招了个人,实际上招了一条\"通道\"。
而中介拿到的钱也很实在:另一位被起诉的德州人,在家里用不同名字托管笔记本,从 5 家雇主手里收了约 19 万美元。设备是公司的,工资是公司的,只有客厅是中介自己的。
笔记本农场的运转方式 公司发的电脑寄进农场 装上远控设备
03
六年一张工资表 时间线复盘
把公开材料拼起来,这条线的跨度比新闻标题给的感觉长得多:
2019 年起:起诉书描述的任职期开始。两名美国人与另外 10 名身在中国的人,用盗用或伪造的身份,在 70 多家美国公司远程任职,累计领取工资约 300 万美元。
2024 年起:针对\"愿意配合的境内中介\"的起诉陆续出现,执法开始从\"抓远程的人\"转向\"拆境内的基础设施\"。
2025 年:起诉书描述的任职期结束。同一时期,手法开始升级——这一点留到后面说。
2026-09-21 起:FBI 对得州 40 多处住宅执行搜查,笔记本农场被逐一端掉。
2026-10-13:司法部与 FBI 联合公布结果:起诉 14 人、扣押约 187 台设备。得州北区联邦检察官 Ryan Raybould 的定性很直白——\"这远不只是欺诈,是一个敌对国家政权通过被盗身份和我们境内的秘密接入点渗透美国公司。\"
我更在意起诉书里两个容易被划过去的数字:25 名以上身份盗用受害者,以及向美国国土安全部、国税局、社保局提交的虚假雇佣记录。这意味着被盗的不只是某人的名字——是完整的一套\"受雇人生\":报税、社保、雇佣档案,全都替真人在官方系统里跑着。等真受害人去办事,才发现自己\"已经上着一份班\"。
这也是我一直提醒做 HR 的朋友的一句话:入职材料齐全,不等于入职的人真实。材料齐全恰恰是这类案子的\"产品规格\"。
04
三个名字 三种卖法
起诉书里被点名的几个人,各卖了这条链上的一种\"原料\"。(按司法惯例,被起诉不等于被定罪,以下均为公开指控内容。)
卖\"脸和名字\"的。宾州的 Bostelle,出借自己的姓名和伪造驾照,帮一名远程员工拿到工作——他卖的是\"这个人存在\"的证明。
卖\"客厅\"的。德州的 Carrillo,在家里用不同名字托管笔记本,从 5 家雇主处收取约 19 万美元——他卖的是设备的落脚点。
卖\"通道\"的。俄亥俄的 Nolte(被列为共谋者,未被起诉),让约二十几台公司笔记本保持在线、装好远控软件、用假名账户转移 32 万美元以上——他卖的是\"随时能连上\"。
三种卖法拼在一起,才是完整的笔记本农场。所以只抓\"远程上班的人\"永远抓不完——前面换个人,客厅还在,通道还在,生意换个名字继续。这次行动真正动的是境内的落脚点。
说个我在项目里的通感:每次做远程用工的流程审计,最让我后背发凉的从来不是技术环节,而是\"设备寄送地址\"这一栏。它在表单上只是一个普通输入框,实际上是公司资产和信任的交货地点。
05
三百万美元工资单的去向
300 万美元,摊到六年、70 多家公司,单人单岗看起来都不大——这正是它能跑这么久的原因:每一笔都低于\"值得报警\"的直觉阈值。但检察官的定性把账算到了另一个层面:
得州北区联邦检察官 Ryan Raybould:\"每拆掉一个笔记本农场,就切断一条为朝鲜武器计划输血的资金通道。Operation Lonestar Roundup 传递的信号很明确:我们不会允许敌对国家利用我们的企业、危害我们的国家安全。\"
背景再补一层:就在上个月,美国和盟友还警告过,朝鲜军需工业部 313 总局下的组织在伪装成 AI 等公司的雇主,渗透数万名求职者的网络,偷敏感数据和加密货币。两条线拼起来看很清楚:一边偷数据,一边偷工资单,目标都是绕开制裁给武器计划找钱。
对普通公司来说,\"国家安全\"听起来很远,但你的工资单很近。你付出去的每一笔远程薪资,最终流向哪里、被谁分走,在出事之前,公司往往连知道的渠道都没有。
06
他们也在进化 面试的和上班的不是同一个人
FBI 同日更新的公告里,有一段值得每个管远程团队的人逐句读:在被识别的压力下,这套体系 2025 年起明显\"正规化\"了。
雇真人出镜。出钱雇美国公民代为参加视频面试、做药检、操作账号、在家保活公司笔记本。而且专门瞄准经济拮据的人招募——缺钱的人更容易答应。
雇枪手代工。真活儿再转包给巴基斯坦、印度、尼日利亚的自由职业者,交付质量甚至不差——你验收的是代码,不是人。
设备伪装。CrowdStrike(协助执法)披露:自 5 月起观测到伪造设备标识——把视频采集卡伪装成摄像头,同一套伪装设备在多份工作里重复使用。
撕破脸的后手。被解雇后威胁前主管、拿窃取的数据要挟付款、甚至雇人上门恐吓。到这一步,它已经不是\"用工纠纷\"了。
CrowdStrike 对抗行动负责人 Adam Meyers 的总结我很认同:\"FAMOUS CHOLLIMA 的手法在变,逃避制裁的目的没变。公司识别得越好、执法拆得越多,它就越要换藏法——所以每一次拆基础设施都值得:每扣一台笔记本、每曝光一个中介,都在抬高它的成本。\"
这里有个反直觉的点:\"表现好\"不能自证清白。代工枪手交付的代码可能比真人还漂亮。我见过的用工审计里,最容易被绕过的就是\"只看来活儿\"的团队——活儿是能力,不是身份。
视频面试里的人可能不是入职的那个人
07
没有单一信号 但有分层拦截
FBI 在公告里说得很诚实:这些行为太像正常远程办公,没有单一信号能识破;所以要分层核验,同时警告别搞一刀切的粗暴过滤——那会把合格候选人也挡在门外。\"分层\"落到日常,其实就是两类低成本动作:设备留痕、身份连续性。
一条假员工运作链条 右端的分层核验是唯一的拦截点
第一个脚本,盘点公司配发设备上的远控软件痕迹、自启目录和监听端口。合规的远程协助工具不是罪,但\"谁批准装的、账号开没开双因素、无人值守关没关\"必须有答案:
REMOTE\_TOOL\_AUDIT.PY 远控痕迹自查
remote\_tool\_audit.py — 公司配发笔记本「远控软件痕迹」自查(只读,防御用途)
盘点远控类软件安装痕迹、自启目录、监听端口;不连接外部地址、不做任何修改。
import os, subprocess, sys
REMOTE\_TOOLS = {
\"TeamViewer\": [\"C:\\Program Files\\TeamViewer\", \"/opt/teamviewer\"],
\"AnyDesk\": [\"C:\\Program Files (x86)\\AnyDesk\", \"/etc/anydesk\"],
\"RustDesk\": [\"C:\\Program Files\\RustDesk\", \"/usr/lib/rustdesk\"],
\"ToDesk\": [\"C:\\Program Files\\ToDesk\", \"/opt/todesk\"],
\"向日葵 Sunlogin\": [\"C:\\Program Files\\Oray\\SunLogin\", \"/usr/local/sunlogin\"],
\"Splashtop\": [\"C:\\Program Files (x86)\\Splashtop\", \"/opt/splashtop-streamer\"],
}
AUTOSTART = [\"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\",
\"~/.config/systemd/user\", \"/etc/cron.d\", \"/var/spool/cron\"]
def check\_tools():
print(\"== 一、远程控制类软件安装痕迹 ==\")
hit = 0
for name, paths in REMOTE\_TOOLS.items():
found = [os.path.expanduser(p) for p in paths if os.path.exists(os.path.expanduser(p))]
if found:
hit += 1
print(\" [发现] %-20s -> %s\" % (name, \", \".join(found)))
else:
print(\" [未见] %s\" % name)
print(\" 小结:命中 %d 款远控类软件痕迹\" % hit)
return hit
def check\_autostart():
print(\"== 二、开机自启目录 ==\")
for raw in AUTOSTART:
p = os.path.expanduser(raw)
if os.path.isdir(p):
try:
items = sorted(os.listdir(p))[:8]
except OSError:
items = [\"<无权限读取>\"]
print(\" %s -> %s\" % (p, items or \"<空>\"))
def check\_ports():
print(\"== 三、对外监听端口(只读快照) ==\")
for cmd in ([\"ss\", \"-tlnp\"], [\"netstat\", \"-tlnp\"]):
try:
out = subprocess.run(cmd, capture\_output=True, text=True, timeout=10).stdout.strip()
except (OSError, subprocess.SubprocessError):
continue
if out:
for ln in out.splitlines()[:10]:
print(\" \" + ln)
return
print(\" <本机没有 ss/netstat,跳过>\")
if \\_name\\ == \"\\main\\_\":
print(\"远控痕迹自查(只读) 平台=%s\" % sys.platform)
hit = check\_tools()
check\_autostart()
check\_ports()
print(\"== 结论 ==\")
if hit:
print(\" 发现远控痕迹:逐款核对是否公司批准、账号是否开双因素、无人值守是否关闭。\")
else:
print(\" 未见常见远控痕迹;交接设备时仍要留一份自启项与端口快照做基线。\")
实测输出 运行 python3 remote\_tool\_audit.py
远控痕迹自查(只读) 平台=linux
== 一、远程控制类软件安装痕迹 ==
[未见] TeamViewer
[未见] AnyDesk
[未见] RustDesk
[未见] ToDesk
[未见] 向日葵 Sunlogin
[未见] Splashtop
小结:命中 0 款远控类软件痕迹
== 二、开机自启目录 ==
/root/.config/systemd/user -> <空>
/etc/cron.d -> ['.placeholder', 'certbot', 'e2scrub\_all', 'sgagenttask', 'sysstat', 'yunjing']
/var/spool/cron -> ['crontabs']
== 三、对外监听端口(只读快照) ==
State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 4096 127.0.0.54:53 0.0.0.0:\* users:((\"systemd-resolve\",pid=670,fd=17))
LISTEN 0 5 0.0.0.0:5901 0.0.0.0:\* users:((\"Xtightvnc\",pid=1317,fd=3))
LISTEN 0 2048 0.0.0.0:8023 0.0.0.0:\* users:((\"python\",pid=1296,fd=17))
LISTEN 0 2048 0.0.0.0:8022 0.0.0.0:\* users:((\"python\",pid=1295,fd=17))
LISTEN 0 511 0.0.0.0:8021 0.0.0.0:\* users:((\"nginx\",pid=2531140,fd=7),(\"nginx\",pid=2531139,fd=7),(\"nginx\",pid=2531138,fd=7),(\"nginx\",pid=2531137,fd=7),(\"nginx\",pid=1428,fd=7))
LISTEN 0 2048 0.0.0.0:8020 0.0.0.0:\* users:((\"python\",pid=1297,fd=17))
LISTEN 0 511 0.0.0.0:8028 0.0.0.0:\* users:((\"nginx\",pid=2531140,fd=10),(\"nginx\",pid=2531139,fd=10),(\"nginx\",pid=2531138,fd=10),(\"nginx\",pid=2531137,fd=10),(\"nginx\",pid=1428,fd=10))
LISTEN 0 511 0.0.0.0:8027 0.0.0.0:\* users:((\"nginx\",pid=2531140,fd=9),(\"nginx\",pid=2531139,fd=9),(\"nginx\",pid=2531138,fd=9),(\"nginx\",pid=2531137,fd=9),(\"nginx\",pid=1428,fd=9))
LISTEN 0 511 0.0.0.0:8026 0.0.0.0:\* users:((\"nginx\",pid=2531140,fd=8),(\"nginx\",pid=2531139,fd=8),(\"nginx\",pid=2531138,fd=8),(\"nginx\",pid=2531137,fd=8),(\"nginx\",pid=1428,fd=8))
== 结论 ==
未见常见远控痕迹;交接设备时仍要留一份自启项与端口快照做基线。
第二个脚本,把入职登记表里的设备指纹盘一遍。CrowdStrike 观测到的\"同一套伪装设备跨岗位复用\",在数据上就是一行重复——笔记本序列号和摄像头 ID 的组合指纹被两个人共用:
DEVICE\_REUSE\_CHECK.PY 设备指纹重复检测
device\_reuse\_check.py — 入职设备指纹盘点:一套设备被多人复用即高危(防御用途)
背景:2026-05 起观测到假远程员工把视频采集卡伪装成摄像头,同一套伪装设备跨岗位复用。
用法:python3 device\_reuse\_check.py employees\_demo.csv 列:员工,岗位,笔记本序列号,摄像头ID
import csv, hashlib, sys
from collections import defaultdict
def fingerprint(serial, cam):
raw = (serial.strip().upper() + \"|\" + cam.strip().upper()).encode(\"utf-8\")
return hashlib.sha256(raw).hexdigest()[:12]
def main(path):
with open(path, encoding=\"utf-8\") as f:
rows = list(csv.DictReader(f))
print(\"读入员工登记 %d 条\" % len(rows))
by\_fp, by\_cam = defaultdict(list), defaultdict(set)
for r in rows:
fp = fingerprint(r[\"笔记本序列号\"], r[\"摄像头ID\"])
by\_fp[fp].append(r[\"员工\"])
by\_cam[r[\"摄像头ID\"].strip().upper()].add(r[\"员工\"])
print(\"== 一、整机指纹重复(笔记本+摄像头同一套) ==\")
dup\_fp = 0
for fp, names in sorted(by\_fp.items()):
if len(names) > 1:
dup\_fp += 1
print(\" [高危] 指纹 %s 被 %d 人共用 -> %s\" % (fp, len(names), \"、\".join(names)))
if not dup\_fp:
print(\" 未发现整机指纹重复\")
print(\"== 二、同一摄像头出现在不同笔记本上(疑似采集卡伪装) ==\")
dup\_cam = 0
for cam, names in sorted(by\_cam.items()):
if len(names) > 1:
dup\_cam += 1
print(\" [可疑] 摄像头 %s 出现在 %d 人名下 -> %s\" % (cam, len(names), \"、\".join(sorted(names))))
if not dup\_cam:
print(\" 未发现摄像头复用\")
print(\"== 结论 ==\")
if dup\_fp or dup\_cam:
print(\" 存在设备复用信号:暂停相关账号权限,走人工核验(视频活体挑战+设备实物照片)。\")
print(\" 注意:单条信号不定罪,多条叠加才升级处置。\")
else:
print(\" 本轮未见设备复用,建议按月重跑并与入职登记表一并留档。\")
if \\_name\\ == \"\\main\\_\":
if len(sys.argv) < 2:
print(\"用法: python3 device\_reuse\_check.py employees\_demo.csv\"); sys.exit(1)
main(sys.argv[1])
实测输出 运行 python3 device\_reuse\_check.py employees\_demo.csv
读入员工登记 6 条
== 一、整机指纹重复(笔记本+摄像头同一套) ==
[高危] 指纹 3847e62230a6 被 2 人共用 -> 张伟、王强
== 二、同一摄像头出现在不同笔记本上(疑似采集卡伪装) ==
[可疑] 摄像头 CAM-5522 出现在 2 人名下 -> 李娜、陈磊
[可疑] 摄像头 CAM-8841 出现在 2 人名下 -> 张伟、王强
== 结论 ==
存在设备复用信号:暂停相关账号权限,走人工核验(视频活体挑战+设备实物照片)。
注意:单条信号不定罪,多条叠加才升级处置。
输出里那条\"摄像头 CAM-5522 出现在 2 人名下\",正是采集卡伪装最典型的痕迹:摄像头 ID 不随笔记本变,说明它压根不是笔记本自带的那颗。提醒一句:代码是从正文复制的,如果运行时报\"非法字符\",把行首缩进的全角空格重打成普通空格即可。
再说清楚边界:单条信号不定罪。设备送修共用、外接摄像头坏了换一个,都会造成\"重复\"。所以脚本结论只有一条——升级到人工核验,而不是直接处置人。
08
四件今天就能做的事
案子讲完了,落回你能动的部分。管远程团队的,这四件事今天就能排上:
一,面试加一道活体挑战。随机要求候选人做个即时动作、临时换个设备进会——雇人出镜的成本,就是被这样一次次抬高的。
二,设备登记要留指纹。序列号、外设 ID、收货地址、领取人签名,四样凑齐才算\"设备有主\";按月跑一遍重复检测。
三,工资账户和身份要对得上。收款人姓名与入职身份不一致,就是最朴素也最难解释的红旗。
四,入职后持续核验。设备在谁手上、代码提交的作息、视频例会的出镜率,长期偏离就是信号——FBI 说的\"分层\",指的是入职之后这一层。
最后一句大实话:这套体系能跑六年、骗过 70 多家公司,不是因为它技术多高明,而是因为招聘流程默认\"人如其材料\"。默认值不改,端掉一个得州,还会长出下一个。
你所在的公司招远程员工时,验到哪一步?有没有遇到过\"说不上来哪里不对\"的候选人?评论区聊聊,下期见。
觉得有用?点个「在看」让更多人看到
紫禁玄科
专注网络安全 · 深度分析
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论