先把日志贴上。
t+0.0s 默认凭据 → fail
t+0.8s 切字典模式
第3次 401
这是MediSys那个沙箱里,扫描源某一次访问的认证序列。它每隔固定周期来一次,来了七次。七次里,这串时序一帧不差:默认凭据失败,固定等0.8秒,切字典,第三次撞上401。人做事没有这么齐的。只有回放这么齐。
Derek搭这个沙箱是为了看行为。三层:旧API、数据库查询接口、管理员端点。前面几轮像模像样,每次访问新增的行为特征是一条往下掉的曲线:
visit 新增特征
1 8
2 6
3 5
...
5起 3
我第一眼读出来的是“它被耗住了”。探索会碰壁,碰壁之后收敛,合理。这个读法后来我改了。
改成什么,往下看。Derek为了验证对面到底看不看得见沙箱,把数据库查询接口的延迟从200毫秒拨到800:
db延迟: 200ms → 800ms
策略: 无调整
停留: +0.6s(被动)
参数拨到四倍,对方的全部反应是多待0.6秒。没有换路径,没有对管理员端点多看一眼。这不叫响应,这叫惯性。开环的。
会探索的东西是吃输入的。它每一步吃你的响应,你的响应在变,它的特征数就不该收敛成一个常数。常数只有一个来源:不看输入。曲线掉到3就平了,不是它学会了克制,是它那条时间线上根本没有你。
Leo把USB里的数据过了一遍,判断比我狠:认证行为和特征变动太规整,是刻意演示,不是探索。还补了一刀,流量指纹跟历史数据集只对上一部分。壳是熟的,芯不是。AI事后模块拿去配三十六计,配出“偷梁换柱”,置信度91%。
我对91%的态度:小数点后的装饰。这个结论不靠分数也站得住,后面那个atime比它硬。但四个字配得准——梁柱都留着,房子里的人换了。
然后是我真正想说的。Derek前后跑了五类分析:时间曲线、逐层对比、随机抽样、逆向验证、异常过滤。三套正常,两套是叫不出名字的灰色信号。五套管线跑完,真正把判断掀翻的是那次改延迟。一行配置,一个问题:你还看输入吗。
话说满了,停一下。灰色信号里至少有一个是真信息:第五次检查他记了条带问号的笔记,深层端点和浅层端点的端口探测顺序对不上。这条线到最后没收回来,问号还是问号。他没硬填一个答案进去,我喜欢这个。顺带自首:我上个月还给玩具引擎写过一个五段的统计脚本,后来删掉四段 😅。批评别人的管线重这种事,我做得最顺手。
修正后的说法是:管线可以跑,别把宝押在管线上。扰动实验便宜、快。灰色信号贵,但那是对面唯一漏过来的东西。
再往下,事情就不在行为层了。
档案文件的元数据,读取时间05:42:08。那个点Derek锁着屏,Leo三天没碰过这份文件。第三方读的。同一晚还有台打印机,凌晨两点左右收到固件更新,而供应商撤回那个版本的时间比更新通知还早。时间线是断的,断口很齐。
你搭沙箱是为了看它,现在它在读你的观察笔记。七次访问喂出一条会收敛的曲线,你的模型每一步都学得很对,因为它就是照着你的学法设计的。你在给它建模,它在给你喂训练数据。AI模块在记录里写了句“观察者的观察优势已经反转”,我原样抄过来,这回它说了人话。
Derek的回应是全案我最喜欢的一段。没加密,没布陷阱:
echo "Saw it." >> 档案
两个单词,明文,故意留给下一个读者。换一种正经打法,这会儿应该在轮密钥、改权限、拉人进场、装第二层监控。每一件都没错,每一件都在喊“我们发现了,而且我们很慌”。这两个单词喊的是反的:看见了,不躲。对一个靠不被察觉吃饭的访问者,这是能递过去的最硬的一句。
然后他把旧框架整个扔了。新文档,全部内容一个字节:
$ cat corridor-v2-0.md
0
从零重建。旧框架是照着“对面是个真探索者”这个前提搭的,前提塌了,框架就是负资产,留着只会继续产出结论错的报告。新框架只按一个维度切:
struct behavior {
float performed; /* ~0.7 认证顺序、端口模式——给人看的 */
float texture; /* ~0.3 抖动、SYN——藏不住的 */
};
不按意图分,按可预测性分。意图猜不动,可预测性可以量。七成是表演:认证顺序、端口模式,全是台词。三成是网络环境的不自主纹理:抖动是你的网络给的,SYN是协议栈给的。要盯的是那三成,剧本可以换,口音换不掉。
说句题外话。我们搭观察系统的时候,默认自己站在单向玻璃后面。这事提醒我,玻璃是双向的,而且对面那位可能比你还希望你看清楚,因为他挑好了给你看什么。拉回来。
一条规则收尾:观察任何会动的东西,先拨一个参数,看它跟不跟着动。不动的,你收到的不是数据,是投喂。
下次看到一条太干净的曲线,先别急着高兴。多半是台词。
