某云安全扫描对SQL Server潜入的观察日记
事情的起因是收到运维人员的通知,部署在某云的一台SQL Server数据库,其中存在未启用密码过期策略的账号,并且提供了账号列表。
问题在于,我们并没有提供SQL Server的登录账号给运维,也没有将除自己之外的操作系统账号或组加入SQL Server,运维是如何拿到这个信息的呢?经咨询,这个结果是某云的安全扫描发现的。由于这台SQL Server存放的是监控结果数据,里面的信息不存在敏感信息,所以也没有太在意。
但问题始终还是要搞清楚,在有暇的时候,做了测试观察,搞清楚了这个安全扫描潜入SQL Server的方式,比较有趣,所以写了这个日记。
首先,登录SQL Server有两种身份验证模式:一种是SQL账号,这个是用账号+密码的方式;另一种是Windows身份验证,使用当前登录操作系统的账号做为凭据进入SQL Server(当然,SQL Server中要先建立 对应的映射,并授予合适的权限)。SQL Server支持仅Windows身份验证和混合身份验证(Windows+SQL)这两种身份验证模式供选择。
对于SQL身份验证验证,需要明确的用户名和密码,所以安全扫描不可能用这种方式潜入(我们的密码都是复杂加长的,sa也是禁用了的,安全扫描不可能能轻易破解,而且SQL Server日志中也没有登录失败的尝试)。
Windows身份验证应该是突破口,我们并没有将除自己之外的Windows用户或用户组加入SQL Server,检查也没有发现我们所在用户组有自己之外的用户存在。所以通过管理员用户之类的身份潜入SQL Server的情况可以被排除。
第二个需要排除的点是SQL Server服务的启动用户,因为某些原因,我们的SQL Server使用了Local System做为服务的启动用户,对安全比较熟习和敏感的同学同学都知道,在这种情况下,如果有本机操作系统的足够权限,可以很轻松地通过Local System进入SQL Server。这无疑是安全扫描可能潜入的一个有效途径(运维将安全扫描安装在我们的操作系统中,并且有足够权限)。
于是,我们将SQL Server的启动账户更换成了SQL Server默认的虚拟账号,相对于Local System,这个的安全性更高一些。更换之后,我们发现安全扫描照样能够潜入。祭起Porfiler这个法宝来确定一下安全扫描的潜入方式吧(在排查问题的初期没有用这个,是因为不太好把握潜入的时间点,也没有足够的规则来缩小Profiler的范围,所以先猜猜看),通过Profiler捕获的数据分析,确定了安全扫描是通过SQL Server服务账号潜入的。
对于通过虚拟账号登入SQL Server的这种骚操作,之前还真没有考虑过,所以自己做了一下实验,过程稍微有点曲折,但不难做到。
接下来就是防御的了,由于是本机潜入的,所以防火墙隔离就不用想了。SQL Server服务账号也不可能禁用或调整权限(毕竟服务自己还在用呢),登录触发器似乎是目前能够想到的唯一解,于是做了一个登陆触发器,检查通过服务账号进行的登录,如果其PID不是SQL Server服务自己的PID,那么将其Rollback。
到这里似乎可以结束了,我们已经在日志中看到了登录失败的信息,证明登录触发器确实有阻挡作用。但随后我们的通过Profiler做最终验证的时候,我们发现安全扫描软件仍然潜入了。
难道是我们的登录触发器规则有漏洞,但对比Profiler的结果,我们的触发器中的Rollback规则是没问题的。我们在触发器中,将Rollback的登录给记录下来,对比Profiler,我们发现安全扫描潜入时的某些登录,并没有触发登录触发器。查阅官网对登录触发器的说明,没有查到有哪些特例会导致不触发登录触发器。最后我们想到了管理员连接,经验证,管理员连接确实不会触发登录触发器。但本机的管理员连接是无法关闭的(目前我没有找到关闭的办法,能打开和关闭的只有远程管理员连接);同样,因为是本机连接,所以也不能通过防火墙限制管理员连接端口。最后能够想到的办法就是自己先建立 一个管理员连接,将连接给占用。通过这个措施之后,我们发现安全扫描无法潜入了。(到了这里,感觉这个安全扫描就是一个典型的渗透软件)
最后需要补充的是,服务的账号可以改成带密码的本地账户或域账户,这样就规避了无密码潜入的途径,但这样的结果是:要么建立 一个密码永不过期的账号,要么改账号密码的时候重启SQL Server服务。
当然,除了SQL Server自己的服务账号之外,SQL Server Agent服务账号也是一个可以用于潜入。
【本文在个人微信公共号ZJCXC上同步发表】
某云安全扫描对SQL Server潜入的观察日记相关推荐
- 一个菜鸟SQL SERVER 2005 DBA的日记。。。
先申明,我是一个菜鸟SQL SERVER 2005 DBA,感觉基本就不懂,买了本书就上手工作了! 这个岗位是公司新增加的. 今天是做SQL SERVER 2005 DBA的第四天了--主管还没有分 ...
- Sql server Insert执行的秘密(下) 带外键的INSERT分析
2019独角兽企业重金招聘Python工程师标准>>> 这一篇分析一下带外键表的INSERT的例子. 本文所用的数据表结构如上图所示:其中Blog表上BlogID是自增的主键,并 ...
- 《Pro SQL Server Internals》部分翻译(P155-165)
本文选自<Pro SQL Server Internals> 作者: Dmitri Korotkevitch 出版社: Apress 出版年: 2016-12-29 作者简介:Dmitri ...
- 10个最重要SQL Server事务日志神话
Myth: SQL transaction log truncation will make it smaller 误解: SQL事务日志截断将使其变小 The truncation process ...
- sql server insert 锁表_SQL Server的insert执行的秘密(下) 带外键的insert分析
上一篇文章介绍了一个最简单INSERT语句的执行计划详细情况,这一篇分析一下带外键表的INSERT的例子. 本文所用的数据表结构如上图所示:其中Blog表上BlogID是自增主键,并在CreateUs ...
- SQL SERVER插入数据操作
准备工作: 我需要一张User表,这张表有几个字段,还有一个自增长的数字id,表结构如下: 这是一张比现实应用中简单的多的用户表,UserID是自增长字段. 开始执行一个最简单的INSERT: ? 1 ...
- SQL Server 2008+ 性能调优
目录 机器指标 机器处理时间(Machine Processor TIme) 解释 指导值 另请检查 可能的解决方案 平均Cpu队列长度(Avg.Cpu Queue Length) 等效性能计数器 解 ...
- 《Pro SQL Server Internals, 2nd edition》CHAPTER 2 Tables and Indexes-Clustered Indexes
一.聚集索引 作者:薛朝鹏,张鹏辉 聚集索引指示表中数据的物理顺序,该表根据聚簇索引键进行排序. 该表只能定义一个聚集索引. 假设您要在堆表上使用数据创建聚集索引. 作为第一步,如图2-5所示,SQL ...
- 解决 SQL Server 中 CPU 使用率过高的问题
本文提供了诊断和修复运行 Microsoft SQL Server 的计算机上 CPU 使用率过高导致的问题的过程. 尽管在 SQL Server 中出现 CPU 使用率过高有许多可能原因,但以下原因 ...
最新文章
- 如何让小程序页面更顺滑_微信小程序|实现界面滑动切换
- 每天一个linux命令(9):touch 命令
- lua 判断为空的逻辑
- jvm性能调优实战 - 39一次大促导致的内存泄漏和Full GC优化
- 如何和女生聊天不进入友谊区
- 二维数组的对角搜索C++
- Android Bander设计与实现 - 设计篇
- java中对list监听_java – Guava:为ListenableFuture回调和监听器设置默认的Executor
- python接口测试第二期_上海悠悠python接口自动化测试第二期视频教程价值1600
- 通用权限管理系统设计篇
- 如何成为嵌入式软件工程师_为什么要成为软件工程师
- 系统运维工程师必备面试题库
- 计算机读博士一个月补助多少钱,中国200万在读硕士生和博士生,每月能拿到多少补助?...
- 华为mate40Android,【猫哥爆料】史上最强Mate40官宣,坐实年度安卓机皇!
- 使用python的zipfile模块巧解word批量生成问题
- Python分析股票行情代码
- JDK1.7 api 中文(不是全中文)
- 三个线程轮流执行顺序打印ABC
- 计算机和网络管理员笔试题,企业招聘网络管理员笔试题
- 串口服务器有没有协议转换,协议转换器与moxa串口服务器通讯配置.doc
热门文章
- Qt开发的国内外知名软件
- excel空白单元格自动下下填充上一个单元格的值
- 像素画软件android,Pixly像素画编辑器
- Redis key前缀的设计与使用
- 赵小楼《天道》《遥远的救世主》深度解析(44)怎么理解肖亚文听到芮小丹说爱上丁元英时所说的“地狱”?
- python对mysql增删改查+计算器+九九乘法表
- c#配合c++调节屏幕亮度,非伽马以及RGB方案
- 浏览器调试 console.table() 方法,方便查看json和数组数据内容
- 在springboot中导入spring-web相关包导致的错误经验(一)
- 【从FT到DFT和FFT】(一)从三角函数正交性到傅里叶变换的详细公式推导