记一次清深实习

断更一个月,我干什么去了

去清华实习, 放两年前想都不敢想事情. 虽然不是很感兴趣, 过程也有点艰难, 但是第一次实习还是值得记录一下

暑假有找研究实习的想法, 不过也就是想了想. 开学的时候, 婧婧不知道从哪里搞来一个清华深圳研究院智能互联网研究组Smart Internet Group (这组居然没有官网) 的实习招聘 (好像是科创社), 瞄了一眼, 有个网络安全相关方向的, 搞物联网入侵检测之类的. 虽然感兴趣的还是 PWN, 但那可是清华诶, 搞网络也不是不可以, 正好能补一补我残缺的知识. 抱着试一试的心态, 我决定写简历应聘.

简历是在学校方舱写完的. 由于之前写过一份简单的, 这次稍微修改了一下, 期间还问了零号学长的建议. 学长看完第一句话:“你照片像是劳改出来的.” … 之后说我简历写太少了, 于是我又把项目经历扩展了很多, 把一些大的小的有的没的都写上去了 (感谢极创给了我活干, 让我有东西可写 🌹 ).

出方舱后在 115 对墙自拍了一张, 劳改照片可不敢放简历上.

9 月 5 号把邮件写完了, 晚上发了出去. 第二天早上就收到回复了, 出乎意料的快? 约了 7 号下午面试, 结果正好撞了少宏学长和韩翔宇学长来 115 改电路和搞服务器. 当然是把 boss 赶出去! 面试问了一些关于物联网, AI 的问题, 主要问的是我会啥. 面试很紧张, 少宏学长说我脸都红了. 前一天晚上准备了一些说辞, 关于我是个搞 PWN 的, 来搞网络行不行, 果然问了这个.

面试完的第二天, 我和婧婧在 115, 看到邮件通知, 很紧张. 战战兢兢点开:

同学你好,

恭喜你通过面试,有资格正式成为SIG课题组实习生的一员!

就这样, 我开始了小实习生的艰苦打工生活…

组会定在周五下午. 带我的是和我邮件联系的学长李若愚, 博士生, 另外还有一个研究生学长, 叫邹青松. 第一次是介绍他们的工作方向, 然后青松学长给我布置任务. 他们在做物联网设备流量生成, 扯上了个叫 “数字孪生” 的玩意. 哈哈, 用 AI 做. 逃不过 AI… 然后给我布置了 7 篇论文, 让我试试搭一个 GAN, 学一下 scapy 和 wireshark… 真是太看得起我了.

面试 + 组会听李学长的声音和语气, 不知道为啥总感觉他是高学历的黑社会大哥, 惹不得的那种

第一周, 当然想好好表现. 然后我不仅搭了个 GAN, 还真的看了 7 篇论文, 并写了个 beamer 作汇报… (好像周五中午还 L 开会, 在 C 楼赶的 beamer)

貌似他们对我看 7 篇论文有点震惊.

接下来, 我负责复现论文. 说是复现, 不如说是拿开源代码跑. 只不过数据格式不太一样, 需要处理. 然后就一直在处理数据… 老实说, 数据处理还真是件麻烦事. 实习学到最多的就是怎么用 pandas 和 numpy 处理数据, 经常调侃自己是 “数据处理小能手”, 发现处理错了就说我是 “数据处理小废物”.

一开始是说生成流量的统计特征, 我复现的论文也是基于统计特征的 IDS, 当然用的是 ML/DL 的方法, 包括有监督和无监督. 生成的粒度是 trace key (不久前李学长中的一篇论文中提出的流量行为聚合方法单元). 期间由于青松学长以为是一个 trace key 一个模型, 我也就这么做了, 结果开会说是一个设备一个模型. 我一拍脑门, 懂了, 马上就给他写了出来, 这周还空了很多时间去打了 NewStar CTF. 结果开会说, 这样做不对… 白干了.

要按五元组去聚合流量, 最后放到一起再进行训练. 李学长说我和青松学长数据处理应该是一样的, 都得搞五元组, 于是就让青松学长处理好给我. 几天后我拿到了数据, 一看, 数据有问题, 学长返工了, 又过了一天, 才拿到了能用的数据. 这几天摆烂还是挺开心的 .

结果用生成数据跑 IDS 的效果不太行…. 此时已经到了十月中旬, 截至日期是十一月初. 后来他们想了几个办法, 一个是以五元组为粒度生成流量的统计特征, 另一个是生成序列而不是统计特征.

五元组效果很好, 但是用不上 trace key, 而且动态端口的话五元组量巨大, 很难去搞; 序列更具有普适性. 不过做序列需要换一个模型跑 (当然这一部分不是我的工作). 正在打算用五元组赶工的时候, 事情发生了转折 — — 期刊延期了.

一天工作 10h 的生活, 开始了……

决定用序列. 青松学长又忙活了很久, 尝试其他模型和算法. 我开始重新处理数据, 并做了两个基于序列特征的设备分类模型.

不久后, 青松学长那边因为换了序列长度, 算法有了一点起色. 我接下来的任务是做数据生成的几个基线算法. 李学长找了个库, 叫 sdv, 专门做数据生成的, 用里边的就可以了, 只不过只给一周的时间. 库很好用, 也不好用. PAR 像个傻瓜一样拟合不上, 包长一堆负数.

周末打了 ACM, 活是工作日干的, 主要在调参, 感觉效果都不太行 (后来说随便搞搞就好, 反正是 baseline). 跑完了三个表格的 baseline, 还差一个序列的, 就是那个非常难用的 PAR.

这样的强度还持续了两周.

翻了 issue, 一堆说 PAR 没用的. PAR 翻到了更底层东西, 还改了一下源码, 才勉强能用.

除了表格数据的指标, 还要找一个序列的指标. 那个库里就有, 只不过是 beta, 还写明了谨慎使用. 序列的指标是用机器学习做的, 看了一个 LSTMDetection, 介绍还不错, 但是很奇怪跑出来的结果和实际情况不太对. 无奈之下去翻了源码, 发现和文档里说的不是同一个东西, 乐死.

之前做的两个设备分类模型, 由于改了序列长度, 又要修改处理数据的代码了. 更糟糕的是, 生成的数据格式和我之前处理的有两个维度是反着的…

要在四个数据集上做四个 baseline 和一个我们的方法, 三个 metrics 和两个设备分类, 设备分类要 真实数据训练, 生成数据测试生成数据训练, 真实数据测试 两个方向都做 , 一共 $4 \times 5 \times (3 + 2 \times 2) = 140$ 个要跑, 我的天啊. 还有之前的 IDS, 白干了, 用的是序列特征了.

IDS 李学长找了另一位姓黄的博士来帮忙. 黄学长很强, 很快搞完了. 中途说只用跑 生成数据训练, 真实数据测试 一个方向就可以了, baseline 也减掉了一个 因为它效果太好了.

在每天工作 10h 的强度下, 几乎完成了所有工作, 甚至提前了一天. 然后我跑去做数据可视化大作业了.

就当我以为我的休息日就要来临了, 结果开会说, 让我画图. 什么数据可视化大作业plus, 小实习生要被榨干啦. 开会的时候还发现设备分类的模型有问题, 除了画图我还得解决问题. 然而周末 ACM.

周末把问题解决了, 一个由于我数据维度搞错了, 一直没训练好 (期间李学长看了我的数据和代码, 好害怕); 另一个由于直接用的包序列统计特征, 没有做任何处理, 太泛了, 导致效果其实并不好. 当然这两点花了很多时间才找到原因.

周一想着先了解一下咋画图, 感觉学会了就不是很难, 也没太上心去做, 毕竟持续一周每天 10h 累坏了, 不想再来一次. 结果下午五点多, 李学长说晚上给他一版图, 先把论文给老师看看.

很急, 急死我了.

晚上开始从零学画图. 还发现之前有几个 baseline 忘记跑了 (谁让 sdv 生成不能开多个进程同时跑, 不知道为啥一开就出错. PAR 更离谱, 有些还压根就生成不了). 真的急了.

十一点多我在群里说了我可能做不完, 李学长没有放过我的意思, 我更急了. 好在青松学长写了个模板, 虽然一如既往不写函数, 但确实能用, 还非常用. 救大命. 但还是很着急, 非常紧张.

电脑续航很差, 不敢带回去写. 婧婧陪我呆在 117, 一直在安慰我. 决定留在大活过夜.

有人来敲门, 说大活要关门了, 让我们赶紧走. 婧婧应付了一下, 回来把门窗灯都关上了.

着急着写了几行, 写了和没写一样. 又来敲门了, 我不敢敲键盘. 没有敲隔壁 115, 想着是不是她守在门口, 看到我们没出去.

就这样发呆, 到了十一点五十, 才开始慢慢敲键盘, 不敢按到底.

结果十二点半写完了. 麻了, 早知道回去了.

第二天想起来洗衣房不断电, 正好吹风机那儿还有个插座.

白留大活过夜了.


图还得改. 懒得学了, 也懒得重构一份更 OOP 的代码了. 后来还跑了几个小实验. 周三把数据给了青松学长.

周五, 我一如既往两点钟进入了腾讯会议, 没有人.

等了半小时, 没有人.

可能在忙投稿吧, 我也没问.

考虑了很久, 好吧其实也不久.

周日下午李学长说我做得不错, 给我说了说下一阶段的安排. 我没回.

晚上, 我拒绝了, 借口是无法平衡时间. 想说方向不符合的, 但是想到这是我自己选的, 面试时也说了这个问题, 我还自认为回答的很好. 太蠢了.

只不过实在没想到, 全是 AI. 太蠢了.

李学长人很好, 说我能力很强, 劝我继续做. 当我再一次拒绝的时候, 还给我发了我参与的这篇论文, 说了一些注意的点. 论文其实前一天就找到了, 投稿的作者邮箱里有个投稿信息, 翻了翻就看到了论文. 五作, 和想象中的差不多. 学长让我注意是学生三作我确实没想到. 黄学长排在我后面一位, 我也没想到.

两位学长人都很好 🌹

JB 家的 remote 真难用 🤢

第一次见这么多核的服务器, 狠狠压榨 😍

当时青松学长数据不对, 我去翻了他的代码, 1k+ 行, 我人看傻了. 当时还觉得研究生就这? 这出个 bug 得调多久啊 🤔

后来自己也频繁出错. 过于自大属于是 🤐

李学长帮我看了代码, 我好害怕. 最后都是一些很傻瓜的错误, 比如 TCP 和 UDP 的协议号记反了, 数据维度搞错了. 但是学长没有说什么 😭

原来所谓的研究, 就是看哪个期刊可以投, 赶在截至之前糊也要糊一个上去 😅

引用
实验没跑完不要紧, 你把趋势给我先画出来

第一次实习就是清华, 还投了个 top, 投完把人家拒了, 哈哈哈 😂

一路还挺顺利的, 要不是方向不合, 再累估计都想搞下去了. 结束也算一个比较重大的决定吧 😐

要是论文真中了, 那可太幸运了 😋

不知道为啥翻了翻李学长的朋友圈, 看到了他的对象手上有个纹身. 更觉得像什么黑社会大哥了 😨