从公司服务器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,单文件绿色版就够用 ...
随机推荐
- hallo world
- Spring Boot—07应用application.properties中的配置
方法1 @Value("${test.msg}") private String msg; 方法2 @Autowired private Environment env; Stri ...
- App 图标设计 - 圆角透明效果(0 基础使用 PS)
App 图标设计 - 圆角透明效果(0 基础使用 PS) 方法: 如果你有些基础,就不必看图文教程了: 1.使用圆角矩形工具选中,设置圆角尺寸[例如:1024*1024 px(圆角:160 px)] ...
- 回归JavaScript基础(一)
主题:JavaScript简介. 一.JavaScript的起源 JavaScript诞生于1995年.当时,它的主要作用是处理一些输入验证操作.之前的话,都是把表单数据发送到服务器端,然后再去判断有 ...
- Vue2学习笔记:v-for指令
1.使用 <!DOCTYPE html> <html> <head> <title></title> <meta charset=&q ...
- Jmeter入门--脚本录制
一.Badboy脚本录制(推荐) 下载地址:http://www.badboy.com.au/download/add,下载完成后直接安装即可. Badboy是一个强大的工具,旨在帮助测试和开发复杂的 ...
- 连接AWS Ubuntu服务器
1.在AWS上创建了Ubuntu实例后,在实例里点连接.点使用PuTTY连接,下载PuTTY软件. 2.在所有程序里找到PuTTYgen并打开,点Load选择创建实例时的pem文件,点save pri ...
- MySQL InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析
MySQL InnoDB支持三种行锁定方式: l 行锁(Record Lock):锁直接加在索引记录上面,锁住的是key. l 间隙锁(Gap Lock):锁定索引记录间隙,确保索引记录的间隙 ...
- Linux stat命令详解
stat:查看文件或者文件系统的状态 -->可以查看时间等属性 stat常见命令参数 Usage: stat [OPTION]... FILE... Display file or file ...
- webpack react 单独打包 CSS
webpack react 单独打包 CSS webpack require css的方法,默认会把css 打入到js文件中,加载顺序有问题,如果需要打出独立的css文件 操作步骤: step1: 安 ...