作为网络服务的中心,网络服务器,经常会受到来自外部的攻击,今天简单概括一下,作为服务端重要组成部分--数据库服务,存在哪些不安全的地方,以及如何去防范;
常见服务的安全问题:
1、redis服务;
2、mysql服务;
redis服务所存在的潜在安全问题:
redis crackit 漏洞利用实例;
由于很多reids服务都是免密码登录的,
连接无密码认证的reids服务;
测试是否支持config命令,并查看当前db文件位置;
修改db文件路径到crontab文件(覆盖/var/spool/cron/crontabs/下的文件)
修改db文件路径到ssh登陆秘钥文件(覆盖~/.ssh/authorized_keys文件)
这样,基本就可以通过攻击机器,ssh到redis所属机器上了。并且拿到启动redis的用户权限;
redis服务需要注意的安全常识:
redis服务安全配置(/etc/redis.conf)
只监听localhost或对访问源进行限制;
使用低权限的独立服务账号(redis)
增加密码认证
禁用config、flushdb、flushall、keys等特殊指令;
mysql服务安全配置:
只监听localhost或对访问源进行限制;
使用低特权的独立服务账号(由于mysql内置了一套较为高级的账号管理系统,不同的账号不仅对不同的数据库、表有不同的管理权限,而且不同的账号对其他的账号具有一定的权限管理,相当的高级)
合理划分mysql账号权限
为所有sql账号设置复杂密码,禁用特权账号远程登陆
合理设置linux文件系统权限
禁止mysql账号对非数据库文件的写入
对于包括数据库服务在内的,所有服务而言,一些通用的防御手段:
采用规范的软件安装方法,对安装软件以及相关的配置运行目录权限进行较为注意的设置,
只保留必要的服务/端口
采取访问来源限制
合理的权限分配(文件权限和运行权限)
及时修复已知漏洞,补丁更新;
安全归类表格:
服务分类 | 通用 | redis | mysql | web服务 |
外部 | 访问源控制 | 限制源ip | 限制源ip | waf等 |
外部 | 访问鉴权 | 设置强密码 | 设置强密码 | 增加token等方式 |
内部 | 程序内防御 | 禁用特权命令 | 只允许访问部分数据 | 判断数据是否合法 |
内部 | 服务权限划分 | 运行权限限制 | 运行权限限制 | 运行权限限制 |
内部 | 服务权限划分 | 文件权限划分 | 文件权限划分 | 文件权限划分 |
内部 | 操作系统防御 | 修补已知漏洞 | 修补已知漏洞 | 修补已知漏洞 |
设置密码策略:
密码长度、字符集、独立密码、独立模式
推荐工具:mkpasswd (linux系统工具)
运行权限限制:
服务应运行在独立的低特权账号下
需监听1000以下端口则采用master-worker结构(如:nginx/apache/php-fpm)
工作账号运行服务的风险:
服务呗攻破后获取工作账号特权(可控制较多重要数据)
如,通过修改 ~/.bashrc,加入反弹shell脚本
当工作账号以sudo -s/-i 等方式切换到root时,会以root加载工作账号的环境,即执行恶意脚本
攻击者利用工作账号的正常操作实现提权;
文件权限限制:
禁止使用777等全员读写执行权限
合理设置文件属主及权限,重要文件及目录禁止读写执行
可写目录不解析,解析目录不可写(web)
可写文件不执行,执行文件不可写(mysql)
PS:以上内容是我从工作中遇到问题时归纳总结,以及听取一些安全讲座习得而来。