Bojie Li (李博杰)
2015-06-19
5 月中旬,LUG 举行了白帽子大赛,对校内网站进行白帽子漏洞测试,并按照漏洞来评奖。这次活动举行得还算顺利,几天时间里找到了校园网络系统的上百个漏洞。然而不知是什么原因引来了骇客。
5 月 31 日凌晨,监控系统接连发出的报警打破了深夜的宁静,LUG 的数十台服务器毫无预兆地接连出现故障,震惊中外的 LUG 服务器被黑事件拉开了帷幕。从 6 月 1 日服务器管理员 gyf 向网络信息中心第二次通报的邮件里,能够依稀感受到当年的紧张气氛。
1 | 按照事件第一次发生时间排序: |
事后查明,服务器是用我的账号远程登录进去的。骇客 5 月中旬通过 U 盘传播的病毒入侵了我的笔记本,植入了键盘记录器,并通过未知方式远程控制我的浏览器访问一些与网络入侵有关的网页。由于我的个人账号没有访问记录,比特币钱包也没有被窃取,很有可能这是针对 LUG 而非我个人的一次高级持续性威胁(APT)。此后的半个月里,骇客没有打草惊蛇,估计是在通过各种渠道收集 LUG 服务器的信息。5 月 30 日夜,骇客通过键盘记录器窃取的服务器密码登录了大批服务器,并插入恶意内核模块。骇客还侵入 LDAP 数据库,篡改了一位已经离校的老会员的密码,登录进防守最严密的 mirrors 服务器。骇客还窃取了一位 VPN 用户的私钥,接入服务器内网,进一步入侵不允许从校外接入的服务器。
这个恶意内核模块所做的事情看起来很简单,就是在每次文件操作的时候随机修改硬盘上的一个字节。这个看起来像是恶作剧的内核模块,使得服务器在刚被入侵的时候运行一切正常,但当有关键数据被破坏后,发现系统异常,此时已经有大量用户数据和系统文件被破坏了。当管理员试图扫描和修复这些受损文件的时候,由于产生了大量文件操作,就导致更多的文件受损,总也修不好。甚至当我们 NFS 挂载备份服务器来拷贝备份数据的时候,拷出来的备份也是有错的,这让我们百思不得其解(幸亏备份服务器是 NFS 只读挂载,不然备份本身也可能被破坏)。
日访问量过千万的开源软件镜像(mirrors)服务中断,校内数千名用户依赖的 VPN 中断,freeshell 虚拟机内文件损坏,blog 无法访问,连 LUG 主页都打不开了,询问的邮件像雪片一样飞来,然而邮件服务器也挂了。这次被黑事件甚至惊动了多个 Linux 发行版和开源软件的上游,他们纷纷表示开源软件镜像被入侵是闻所未闻的事。Freeshell 服务由于没有备份而终止,VPN 服务则由于充当了帮凶而不再公开运行。此次事件暴露了 LUG 服务器基础架构的诸多问题,比如公共 VPN 服务和服务器使用同一内网,密码登录没有两步验证,服务器没有对插入内核模块的危险操作作报警和防御,离校管理员的账号没有禁用。当然,我的笔记本被骇客入侵是根本原因。事后,LUG 和 james 老师对我宽大处理,没有追究我的责任。我至今感到非常内疚。
2015-05-24
背景:Windows 上的 Virtualbox 虚拟机。Ubuntu 14.04.1 LTS,3.13 内核。ext4 文件系统。
作死:前几天一直在该虚拟机上开发网站,做了 N 多 commit,以为 git push 了,但事实上 push 失败了。
悬疑:今天妹子 git pull 了一下,发现没有任何更新,然后说我这几天都没干活。
悲剧:登录到虚拟机里一看,项目目录里有几个刚写的文件变成了 0 字节的空文件。(ext4 这么稳定,一定是母机里万恶的 NTFS 和 Virtualbox 惹的祸)
.git 目录里好多文件也变成了 0 字节的空文件。git 提示仓库已损坏。
1 | $ git status |
1 | $ git fsck |
几天来写的代码是不是这样就灰飞烟灭了呢?我们知道,当你删除一个东西的时候,你只是删除了这个东西在当前三维空间中的引用,而这个东西的本体仍然存在于四维时空之中。穿越大法,走起!
2015-01-30
2015 年 1 月 30 日是 SIGCOMM 2015 论文投稿的 deadline,我却跑到黄山浪了。IMG_20150130_083809
临行准备
我们都是第一次去黄山,早在 12 月 15 日,我们期末考试的时间确定下来,就开始做准备了。
时间
我期末考试结束的第二天出发。查了一些攻略,黄山比较适合二日游,在山上住一晚上。加上往返合肥,一共四天。
交通
从合肥去黄山有两条路线可选:
- 坐火车到黄山火车站(位于黄山市的屯溪),再坐一个小时的大巴到黄山脚下的汤口镇。
- 在合肥长途汽车站坐大巴直接到黄山脚下的汤口镇。
到达黄山脚下的汤口镇之后,要进入黄山景区,只能乘坐新国线大巴,19 元/人。大巴是 20 分钟的盘山公路,大约 10 公里。大巴有两个方向,一个到前山的慈光阁,一个到后山的云谷寺。慈光阁和云谷寺都有索道可以上山,当然也可以步行上山(大约 5 公里,需 3 小时)。现在前山的索道关闭整修,步行上山太累,因此游人都是从后山上山,在山上住一晚,从前山下山。
由于静宁晕车,不能长时间坐大巴,就选择了先火车后汽车的方案。目前从合肥到黄山只有 K 字头的火车,需要 6~7 个小时(今年就将有动车开通了)。尽管冬天这段时间合肥到黄山的火车票不紧张,我们还是提前一个月把火车票预订好了。
黄山市内和黄山风景区内的大巴基本都是半小时发一班车,不需要也无法预订。
住宿
在山下的两个晚上可以选择住在黄山市内,也可以选择住在黄山脚下。山上的住宿相对紧张,需要提前预订。这个上携程就行了。
装备
- 证件类:身份证、学生证
- 电器类:手机、iPad、移动电源、手电筒(从淘宝上买,事实上没用到)
- 保暖类:围巾、手套、帽子、坐垫(黄山冬天很冷)
- 登山辅助:
- 衣服类:每人带2双袜子,内衣内裤,擦澡的毛巾
- 洗漱类:牙刷、牙膏、牙杯、唇膏、护手霜、护肤系列产品…
1 月 28 日
2015-01-07
2013 年 5 月 16 日,我的博客有了顶级域名 bojieli.com。2015 年 1 月 6 日,注册并启用了新域名 ring0.me(是数字 0 哦,字体看着像字母 O)。
Ring0 是 CPU 体系结构里特权级最高的保护级别,运行在 Ring0 级别的代码直接与物理硬件交互。特权级的概念可以追溯到 20 世纪 60 年代的 MULTICS。在 x86 体系结构中,ring0 代表操作系统内核和内核驱动,相对于通常运行在 ring 3 的用户态应用程序。我第一次听说 ring0 是在一篇关于 rootkits 的文章里,那时我初中,对 “黑客” 技术很好奇。惭愧的是,我至今都不会写 rootkit。
我的博客使用 ring0.me
这个域名,是为了展示我的兴趣主要在搭建起计算机系统和网络的基础研究和技术。
注册 ring0.me 是感觉姓名全拼的域名 bojieli.com 看起来不够 geek。我想过 rdma, ssh22, http80, tcp80, printk, reisub 等多个未被注册的域名,最后还是觉得 ring0 更好。
原来的 bojieli.com 已经 HTTP 301 跳转到 ring0.me 的相应页面。由于 StartSSL 的政策限制,SSL 证书需要在域名注册后三天才能申请。1 月 17 日部署了 SSL 证书。bojieli.com 将继续服务到 2016 年 5 月,之后不再续费。
博客标题由 “null != undefined” 改成了 “Ring0”,副标题由 “Seeking possibility for next-generation network” 改成了 “Fundamental research in networked systems”。希望读者喜欢 ^_^
2014-12-18
2013 年 5 月的一个下午,理化大楼 5005。我拿着贺羽学长的手机给在 MSRA 联合培养的陆元伟打电话。可能是太紧张吧,打完电话,屏幕上和手上都满是汗珠。几天前,我接到通知:我被 MSRA 联合培养项目录取了,我回复说我正在做创业项目,可能没有时间过去。微软方面催我尽快作出决定,我本来想自己拒掉的,不过想想还是该听听贺老板的意见。
故事背景:科大与 MSRA 的联合培养项目是每年 4 月报名,通过简历初筛和面试,录取 18 人左右,大四一年到 MSRA 实习,毕设也在 MSRA 做。这 18 个名额中,14 人是要求保研到国内的,剩下 4 个名额是出国或者就业的。经过两个月的实习,大概在 9 月初,14 个人中大概能选出 7 个人留下来读博,剩下的回学校保研。所谓的联合培养博士,就是头一年在科大上课,后面四年在 MSRA 做研究,最后拿到的是科大的学位(所以我们是正宗科大研究生,不是代培生)。
陆元伟和贺羽师兄都说这是个不错的机会,建议我慎重考虑。我当时想的是,先去实习一个暑假,看看情况,再做决定。
当时我深受 Linux 和自由软件的文化熏陶,对微软是有不少偏见的。HR 给我打电话,让我确定一下 “入职” 时间,我问怎么成 “入职” 了,这才知道我是以实习生的身份去联合培养的,感觉成为了一家当时并不喜欢的公司员工,还是蛮别扭的。
2014-12-12
贴一篇旧文:2012 年 6 月写的读书笔记(原文链接)。这个笔记是写给自己看的,里面掺进了太多自己的设想,有可能会对读者造成误导。不过文章太长了,没有时间修订。欢迎吐槽。
近来(2012 年上半年)在郭家华的推荐下,读了LUG书库的《程序员的自我修养——链接、装载与库》一书,有种相见恨晚的感觉。然而快到期末考试了,没有时间把全书读完,因此只写了一部分。
有两种方式构建软件:一种是把它设计得如此简单以至于明显没有缺陷,另一种是把它设计得如此复杂以至于没有明显的缺陷;前一种的难度大得多。——Hoare 于图灵奖演讲《皇帝的旧衣》
2014-12-10
按:2014 年 11 月 21 日,笔者在阿里巴巴技术俱乐部的虚拟化技术交流会暨 “科大云 3.0” 发布会上分享了一些对虚拟化技术的浅见,整理、补充后与诸位探讨。(长文慎入)
虚拟化技术大家都不陌生,我们大都使用过诸如 VMWare、VirtualBox 的虚拟机软件。一些人认为,虚拟化技术是近几年跟着云计算的潮流才火起来的,十年前只是桌面用户测试其他操作系统的玩具。非也。只要计算机上同时运行着多个任务,就会有任务隔离的需求,虚拟化就是让每个任务看起来独占整个计算机、隔离任务之间影响的技术。早在计算机还是庞然大物的 20 世纪 60 年代,虚拟化技术就开始发展了。
IBM 7044
2014-11-28
译者按:Jennifer Rexford 是普林斯顿大学教授、网络研究圈子里呼风唤雨的大牛。她在 2010 年给新入学的工程领域研究生做了个报告:Advice for New Graduates。
了解我的人都知道我有收集名言的爱好。一句话解释这背后的故事:名言短小便携,对小时候经常搬家的我来说是一个合适的爱好。20 世纪 30 年代普林斯顿的两个著名科学家,爱因斯坦和托马斯·路易斯,分别对 “个体” 所处的角色发表了有趣而有些对立的评论。
物理领域的爱因斯坦说:“人类社会所有有价值的东西依赖于个体发展的机会。”
药学、生物学领域的托马斯·路易斯则说,“事实上不存在单个个体这样的生物;他自己的生命并不比从皮肤表面上扯下来的一个细胞多什么。”
这两句名言很好地概括了研究生是干什么的。
2014-11-25
好多人搞不清这两组概念之间的区别。我们拿小明下载文件打个比方。
- 同步阻塞:小明一直盯着下载进度条,到 100% 的时候就完成。
- 同步非阻塞:小明提交下载任务后就去干别的,每过一段时间就去瞄一眼进度条,看到 100% 就完成。
- 异步阻塞:小明换了个有下载完成通知功能的软件,下载完成就“叮”一声。不过小明仍然一直等待“叮”的声音(看起来很傻,不是吗)
- 异步非阻塞:仍然是那个会“叮”一声的下载软件,小明提交下载任务后就去干别的,听到“叮”的一声就知道完成了。
也就是说,同步/异步是下载软件的通知方式,或者说 API 被调用者的通知方式。阻塞/非阻塞则是小明的等待方式,或者说 API 调用者的等待方式。
2014-11-20
C 程序为什么要编译才能执行?一个 C 程序在变成可执行文件的过程中,为什么要经过预处理、编译、汇编、链接这四道工序?让我们从这段简单的 C 程序开始。
为什么要编译
这并不是一个简单的问题。我们知道 Python 代码不需要 “编译”,输入一行代码就可以运行出结果了,对用户很友好有木有!这种交互式的运行环境被称为 REPL(Read-Evaluate-Print-Loop),也就是读取用户输入的语句,执行语句,输出语句的值,再返回到等待输入状态。