从公司服务器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,单文件绿色版就够用 ...
随机推荐
- margin相关基本知识
什么是 margin ? CSS 边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时改变所有的外边距.——W3School 边界,元素 ...
- PM、oSE、oMDE、oTSE、oTC角色职责
- L3(SP+OO+UT)能力评估
- Eclipse 校验取消
eclipse Multiple annotations found at this line错误,eclipse开发过程中,一些XML配置文件会报错,但是这些其实不是错,飘红的原因是因为eclips ...
- npm、webpack、Gulp 中文教程
按顺序阅读 1.npm 模块管理器 2.package.json 文件 3.npm 模块安装机制简介 4.npm scripts 使用指南 5.CommonJS 规范 随着 es6 模块化特性的出现, ...
- 使用 Azure CLI 管理 Azure 磁盘
Azure 虚拟机使用磁盘来存储 VM 操作系统.应用程序和数据. 创建 VM 时,请务必选择适用于所需工作负荷的磁盘大小和配置. 本教程介绍如何部署和管理 VM 磁盘. 学习内容: OS 磁盘和临时 ...
- 使用SharpZipLib压缩与解压文件
using ICSharpCode.SharpZipLib.Zip; using System; using System.Collections.Generic; using System.IO; ...
- PHPredis安装
一.PHPredis下载链接:https://pan.baidu.com/s/1bz0EaJgDpp2ADQJCJOHJGA 二.解压并进入目录 三.发现没有configure文件,需要安装autoc ...
- The expression of type Integer is unboxed into int
问题:The expression of type Integer is unboxed into int 原因:java的包装类,方法里面要的是Integer,传入的参数确实int类型 解决方案: ...
- VMware 11 安装苹果系统
没事研究了一下虚拟机安装苹果系统 1.下载需要的软件- F, c1 X: e- o1 }& V/ o9 J 1.1 VMware 11 下载和安装* P( R; O6 v1 N! ...