从公司服务器C盘被删说起
事情起因
一个阳(严)光(重)明(雾)媚(霾)的周二,对于我们从周二到周六的班次来说,这是新的一周开始。我像往常一样,打开电脑,倒上一杯水,开始翻阅从大洋彼岸发来的各种邮件。突然看到一封紧急的邮件,内容大致是线上的所有API服务器全部宕机了,原因IT正在查,所有的API都被紧急迁移到了一台新的服务器上,让我们协助修改各种配置。刚坐下没多久,美国那边就打电话过来了,告诉我们,WEB程序服务器上的C盘被删除了很多文件,然后又强调了邮件中的内容,让我们协助。
在协助线上处理完了各种配置的修改后,我们在周会上讨论了各种可能性,大家一致认为黑客入侵了我们的服务器,认为一般的WEB程序不会有这么大的权限,能把C盘给搞挂了。这也是因为我们在大约一个月前,刚被黑客入侵过一次(http://www.sohu.com/a/255005663_354899),大家都觉得是黑客在其他机器中留了种子,后续在黑五期间又专门搞我们一下~~
幕后真凶
然而事情并没有那么简单,过了一天后,IT通过Windows上的LOG,找到了真凶,就是下面的一段C#代码:

看起来也很朴素是不?path是某个业务相关的文件夹路径,在某些操作完成后,删除业务文件夹,除了删除前没有判断文件夹存在性外,是不是看起来也并没有什么问题?
然而并不是~
该代码中,没有对非法的输入进行Check,当path为空字符串时,该代码会自动给字符串后面加上 “\\”,导致最终执行删除的代码为:Directory.Delete(”\\”,true);
在.NET 4.0中,该代码将删除当前驱动器中的所有文件 (原来如此)
那么这么危险的操作为啥一个WEB程序竟然有权限执行呢?
再来看看我们的IIS中的设置:
在这个应用程序池的配置中,我们所有的应用程序池都是用LocalSystem这个身份在跑的,这个身份一般来说权限是比较高的,所以也是导致我们本次事故的一个重要因素。
小结
代码的非法性检查一定要做到位,一个健壮的程序应该不仅能在数据正常时正常运行,在数据异常时,也应该能够正确运行,并对外抛出错误。
程序在运行的过程中,一定要以最小权限运行,很多文章都提到过这点,但很多人在实际操作时,为了方便,就直接给比较高的权限了,这点我自己也喜欢这样干,需要以后多注意一些。
本次有问题的代码其实并不是我们组的,但是不同业务组的项目都部署在同一台机器上,最终别的组的大失误导致了我们的API宕机,可以利用Docker等容器技术来规避这些问题,Docker在这种程序的隔离性上会体现出明显的优势。
从公司服务器C盘被删说起的更多相关文章
- Dell服务器U盘安装Windows Server时识别不到硬盘
Dell服务器U盘安装Windows Server时识别不到硬盘 1.下载驱动http://downloads.dell.com/FOLDER03688531M/1/SAS-RAID_Driver_T ...
- maven多仓库配置(公司服务器与阿里云仓库)
1. 问题描述 公司内网搭建的有maven私有服务器,但是碰到好几次只有gav没有jar的情况或者最新版本更新不及时,所以需要公司服务器和远程仓库(阿里云)相结合来满足项目需求. 2. 解决方案: m ...
- Dell R710、720等系列类服务器 U盘安装centos6.5 操作系统
一般全新服务器创建系统的时候,没做raid 会报错,如下: 解决: 开机启动时按F10,进入下面界面. 在LC设置-语言和键盘设置选项里可以选择界面显示的语言 在界面主页选项里选择"配置RA ...
- CentOS云服务器数据盘分区和格式化
1. 查看数据盘信息 登录CentOS云服务器后,可以使用“fdisk -l”命令查看数据盘相关信息. 使用“df –h”命令,无法看到未分区和格式化的数据盘,只能看到已挂载的. [root@VM_7 ...
- SQL 跨服务器数据库增、删、改、查(二)
--创建链接服务器 exec sp_addlinkedserver 'jx3xxiednr3ucidf', ' ', 'SQLOLEDB', 'jx3xxiednr3ucidf' exec sp_ad ...
- SQL 跨服务器数据库增、删、改、查(一)
--开启本服务器中操作其他服务器的功能 reconfigure --输出消息 reconfigure --输出消息 --增 INSERT INTO OPENROWSET('SQLOLEDB','jx3 ...
- 今天上传公司服务器出现的.net framework版本错误问题
今天做好一个网站(.net4.0),里面有静态页面也有aspx页面,发布后,满心欢喜的上传到服务器,运行后,静态页没有问题,可是通过导航栏一旦点击进入aspx页面,就会出现错误 ,提示web.conf ...
- Linux 服务器 U盘安装(避免U盘启动)以及拔除U盘后无法引导系统
一.U盘制作 首先下载两个文件: · rhel-server-6.3-i386-boot.iso 启动镜像 · rhel-server-6.3-i386-dvd. ...
- 戴尔PowerEdge T110 Ⅱ服务器U盘安装Windows Server 2019 DataCenter
一. 下载准备 准备工作——下载Microsoft Windows Server 2019 官方简体中文激活版 (MSDN)原版iso镜像 准备工作——安装刻录软件UltraISO,单文件绿色版就够用 ...
随机推荐
- JS全局变量VAR和THIS--在函数内部,加var是局部变量,不加是全局变量
JS全局变量VAR和THIS 2011-05-23 21:43 很多人都觉得在JavaScript声明一个变量,加var和不加var没有什么区别,实际上是一个错误的观点,如果在函数外面,也就是说在wi ...
- IT小鲜肉 widgets tree 三种格式数据源
昨天完成了下面几个功能,其中最麻烦的就是做图.边学GIMP用法边做图 1.使用GIMP软件G了几个图标 2.支持一维数组数据源,并按照指定的属性对数据源中的数据进行自动分组 运行效果: 3.支持由pi ...
- CSS代码缩写
盒模型代码简写 还记得在讲盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左.具体应用在margin和paddin ...
- java获取当月天数,指定年月的天数,指定日期获取对应星期 .
package huolongluo.family.util; import java.text.SimpleDateFormat; import java.util.Calendar; import ...
- Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
运行sudo apt-get update 时Ubuntu 16.04出现: Problem executing scripts APT::Update::Post-Invoke-Success 'i ...
- pjax 和 ajax 的区别
pjax 是一个 jQuery 插件,它通过 ajax 和 pushState 技术提供了极速的(无刷新 ajax 加载)浏览体验,并且保持了真实的地址.网页标题,浏览器的后退(前进)按钮也可以正常使 ...
- MATLAB filter2/conv2 函数在 Python 语言中的等价函数
MATLAB filter2 和 conv2 函数说明 在 MATLAB 中,filter2 函数实现二维数字滤波器.conv2 函数实现二维卷积. filter2(H, X, mode) 等价于 c ...
- 3.Spring MVC return url问题总结
一.return "cartSuccess" 和 return "redirect:/cart/cart.html" 的区别 二.return modelAnd ...
- UPDATE语句总结
一.基本语句 1.SQL UPDATE 语法 UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition ...
- SQL Server数据库快照的工作方式
SQL Server数据库快照的工作方式 翻译自:How Database Snapshots Work 最近有一个帖子<errorlog中的异常信息rolled forward 和rolled ...