软件安全

admin 2024年4月22日05:46:58评论4 views字数 4034阅读13分26秒阅读模式

芜湖~

放假前周分享可一定不能缺席

看看这周表哥准备了什么干货吧~


准备工作

创建MySQL服务

version: '3.1'

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
      - 3306:3306
    volumes:
      - mysql80-data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin
    ports:
      - 8080:80
    environment:
      - PMA_ARBITRARY=1

volumes:
  mysql80-data:

使用docker compose创建一个8.0.36版本的mysql容器,并使用phpmyadmin作为mysql的管理工具。

安全性问题

1、默认账户和密码

在安装MySQL时,默认的root账户可能存在空密码或者使用弱密码,这会增加数据库受到攻击的风险。建议在安装后立即更改默认账户的密码。

  • • 使用docker创建mysql容器时候可以传入环境变量MYSQL_ROOT_PASSWORD完成初始化操作。

  • • 使用apt等工具包安装,需要根据以下命令修改密码sudo mysql # 使用root用户登录,此时密码为空

    5.7版本
    UPDATE user SET password=password('root') WHERE user='root';
    flush privileges;

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

    8.0版本 不再支持函数password('password'),使用以下方法
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

2、未更新的软件版本

使用旧版本的MySQL可能存在已知的安全漏洞,攻击者可以利用这些漏洞进行攻击。定期更新MySQL软件以修复已知漏洞是至关重要的。

软件安全
img
  • • 根据调查数据,mysql 5.7版本是使用量最多的一个版本。但5.7版本生命周期已在2023年10月结束,往后将不再有新的补丁发布,安全性成为严重问题,需要使用或者迁移到8.0版本。

3、网络安全

MySQL默认情况下可能会在所有网络接口上监听,这可能使数据库受到未经授权的访问和攻击。应该配置MySQL只在必要的网络接口上监听,并使用防火墙规则限制对MySQL端口的访问。

  1. 1. 基于用户权限CREATE USER 'test'@'192.168.1.%' IDENTIFIED BY 'password'; # 创建一个新的用户
    GRANT ALL PRIVILEGES ON database.* TO 'test'@'192.168.1.%'; # 授予相应权限
    FLUSH PRIVILEGES; # 刷新权限

  2. 2. 基于配置文件 打开mysql的配置文件my.cnf进行调整,位于/etc/mysql/my.cnf/etc/my.cnf[mysqld]
    bind-address = 192.168.1.0

  3. 3. 修改默认端口 修改mysql的默认端口3306,例如在docker中就可以通过修改yml文件配置进行修改

4、权限控制不当

如果MySQL的用户权限设置不当,可能会导致未经授权的用户访问数据库或执行敏感操作。建议严格限制用户的权限,仅授予他们所需的最低权限。

  • • 授予用户所需的最低权限。例如,用户只需要读取数据库,就只授予SELECT权限,而不授予其他权限。GRANT SELECT ON database.* TO 'username'@'hostname';
    FLUSH PRIVILEGES;

  • • 定期审查用户权限,并根据需要进行调整或撤销不再需要的权限。

5、数据传输加密

未加密的数据传输可能会被窃听和篡改,因此建议在MySQL客户端和服务器之间启用SSL/TLS加密,以保护数据的机密性和完整性。

  • • 在MySQL服务器和客户端之间启用SSL/TLS加密,以保护数据的传输安全。需要在MySQL配置文件中启用SSL,并配置SSL证书。

    • 查看是否支持SSLSHOW VARIABLES LIKE 'have_ssl';

    软件安全


  1. 1. 自己签名证书

    • • 创建CA私钥和证书openssl genrsa 2048 > ca-key.pem # 创建证书
      openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem # 创建证书

      软件安全


    • • 创建服务器端的 RSA 私钥和数字证书openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem > server-req.pem # 创建服务器端的私钥和一个证书请求文件
      openssl rsa -in server-key.pem -out server-key.pem # 将生成的私钥转换为 RSA 私钥文件格式
      openssl x509 -sha1 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem # 使用原先生成的 CA 证书来生成一个服务器端的数字证书

    • • 创建客户端的 RSA 私钥和数字证书openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem > client-req.pem
      openssl rsa -in client-key.pem -out client-key.pem
      openssl x509 -sha1 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

  2. 2. 使用工具创建证书与私钥mysql_ssl_rsa_setup --datadir ./

    软件安全


  • • 服务端配置my.cnf,再将生成的证书放到指定位置后重启服务[mysqld]
    ssl-ca=/etc/mysql/ca-cert.pem
    ssl-cert=/etc/mysql/server-cert.pem
    ssl-key=/etc/mysql/server-key.pem
    再使用以下命令来检查是否配置成功show variables like '%ssl%';

    软件安全


6、数据备份和恢复

不恰当的备份和恢复策略可能导致数据泄露或数据丢失。应该定期备份数据库,并确保备份数据的安全存储和恢复过程的有效性。

  • • 定期备份MySQL数据库,并将备份数据存储在安全的位置,远离未经授权访问。

  • • 可以使用MySQL提供的内置工具mysqldump进行数据库备份,并结合cron来定期执行备份任务。#!/bin/bash
    BACKUP=/etc/backup/db
    DATETIME=$(date +%Y_%m_%d_%H%M%S)
    echo "==========开始备份==========="
    echo "备份的路径是 $BACKUP/$DATETIME.tar.gz"
    HOST=localhost
    DB_USER=root
    DB_PWD=root
    DATABASE=db
    [ ! -d "$BACKUP/$DATETIME"  ]  && mkdir -p "$BACKUP/$DATETIME" 
    mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST  $DATABASE | gzip  > $BACKUP/$DATETIME/$DATETIME.sql.gz
    cd $BACKUP
    tar -zcvf  $DATETIME.tar.gz  $DATETIME
    echo "==========备份完成==========="

  • • 将脚本加入crontab中定时执行crontab -e
    0 0 * * * /home/zishu/utils/backup.sh # 每天0点0分执行脚本

7、审计和监控

缺乏对数据库活动的审计和监控可能导致对数据库安全事件的忽视。建议实施审计和监控措施,及时发现并应对潜在的安全问题。

  • • MySQL的日志文件通常包括错误日志、查询日志等。

    • • 日志写入:攻击者通过修改数据库查询日志的存储路径达到获取Webshell目的。

    • • 函数写入:攻击者通过数据库的文件操作函数“into outfile”或“into dumpfile”达到获取Webshell目的。

    • • 可以通过配置mysql连接控制插件,密码错误N次会禁止登录

    1. 1. 判断查询日志的存储路径配置的函数“general_log_file”的值指向来是否被修改。

    2. 2. 再通过分析查询日志中是否存在攻击者的攻击信息。

    1. 1. 判断“secure_file_priv”函数的值来判断是否具备读写文件权限,当value值为空时即不对读写文件进行限制。

    2. 2. 再通过分析查询日志中是否存在攻击者的攻击信息。

    3. 1. 爆破攻击排查:通过查询日志可以查看到用户尝试连接数据库的信息,倘若存在短时间内出现大量尝试连接数据库的日志信息来判断数据库是否遭受爆破攻击。

    4. 2. Webshell写入检查


    本周内容就到此结束啦

    提前祝大家有一个愉快充实的假期

    原文始发于微信公众号(SKSEC):【表哥有话说 第110期】软件安全

    • 左青龙
    • 微信扫一扫
    • weinxin
    • 右白虎
    • 微信扫一扫
    • weinxin
    admin
    • 本文由 发表于 2024年4月22日05:46:58
    • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                     软件安全https://cn-sec.com/archives/2624927.html

    发表评论

    匿名网友 填写信息