从公司服务器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,单文件绿色版就够用 ...
随机推荐
- substr与substring的区别
在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与区别吧 ...
- CentOS安装Oracle 11g R2
官方的安装链接: https://docs.oracle.com/cd/E11882_01/install.112/e24326/toc.htm#BHCGJCEA 检查硬件需求 1. 内存需求 物理内 ...
- 如何配置Portal 基于AD的单点登录配置
Portal for ArcGIS支持两种类型的账户,分别是: 1.系统内置账户. 2.外部系统的企业账户. 这两种不同的账号分别支持多种身份认证方式: 账号类型 认证方式 细分认证方式 系统内置账号 ...
- immutable.js 在React、Redux中的实践以及常用API简介
immutable.js 在React.Redux中的实践以及常用API简介 学习下 这个immutable Data 是什么鬼,有什么优点,好处等等 mark : https://yq.aliyu ...
- 一些不错的Android开源音视频播放器
摘要:来自Github上的一点点整理,希望对你有用! 整理了一下Github上几个开源的音视频播放器项目,有兴趣的同学可以clone代码去研究学习. 1.UniversalMusicPlayer ht ...
- Java类的封装
java中四种不同的限定词限定的成员(成员变量或成员变量方法),访问权限由大到小依次为: public(公共的) 可以被所有的类访问 protected(受保护的) 可以被这个类本身访问 可以被它的子 ...
- SQLSERVER2012里的扩展事件初尝试(下)
SQLSERVER2012里的扩展事件初尝试(下) SQLSERVER2012里的扩展事件初尝试(上) 我们继续文章扩展事件在Denali CTP3里的新UI(二)里的这个实验 脚本文件下载:http ...
- l2dct
http://paste.ubuntu.com/15664711/ diff -crbB ns-allinone-2.35/ns-2.35/queue/red.cc ns-2.35/queue/red ...
- 通过ffplay实现摄像头preview
通过ffplay实现摄像头preview 硬件平台:Jetson TK1 开发板(NVIDIA Tegra K1 Mobile Processor 32bit),宁波舜宇光电SP103A(OV1682 ...
- 铁乐学Python_day11_闭包函数
一.[函数名] 1)函数名本质上它也是一种变量,特殊的变量: (碰到同名其它变量,依照从上往下的代码执行赋值.) 单独打印函数名,输出的是它对应的内存地址: 例: def funcl(): print ...