前言
安全加固是每个安全工程师需要掌握的技能
一、操作系统安全加固
主要介绍了两种常见的操作系统,Windows与liunx
1.Windows
-
账号加固
- 是否存在其他可用账号
- 查看方式
- 开始→运行→compmgmt.msc(进入计算机管理)→本地用户和组。
- 开始→运行→cmd→net user
- 查看方式
- 是否存在账号权限不匹配
- 账号封禁
- net user Guest /active : no
- 账号删除
- net user guest / del
- 创建用户
- net user guest / add
- 是否存在其他可用账号
-
本地安全策略(安全策略相关的操作)
-
配置方式:开始运行→运行→secpol.msc(本地安全策略)→安全设置
- 密码锁定策略
- 密码复杂性
- 密码长度
- ……
- 账户锁定策略
- 账户锁定时间
- 账户锁定阈值
- 重置的时间
- 审核策略
- 敏感操作记录
- 用户权限分配
- 授权管理
- 授权账号登陆:目的是设置允许从本地或者远程登陆的账号。
- 配置操作:开始→运行→secpol.msc→安全设置→本地策略→用户权限分配
- 密码锁定策略
-
补丁管理
- 通过软件
- 火绒,安全管家
- 查看已安装补丁
- wmic qfe get hotfixid,installedon
- 安装补丁
- 前往官网查看补丁信息
- 下载补丁安装包
- 通过软件
-
端口封禁
- 举例
- ms17-010漏洞,文件共享依赖端口,135 139 445
- ms12-020漏洞, 远程桌面服务RDP 依赖端口3389
- 方法
- 在组策略中创建IP安全策略
- 运行gpedit.msc进入组策略配置
- 依次点击进入计算机配置→Windows设置→安全设置→IP安全策略。
- 在空白处右键,创建IP安全策略。
- 进入IP安全策略设置向导。
- 设置IP安全策略名称。
- 去除“激活默认响应规则”。
- 点击完成,并进入编辑属性。
- 去除“使用添加向导”复选框,点击“添加”进入IP筛选列表配置。
- 去除“使用添加向导”复选框,点击“添加”进入IP筛选器配置。
- 地址选项卡,源地址选择“任何IP地址”,目标地址选择“我的IP地址”,去掉“镜像”
- 协议选项卡,协议类型选择“TCP”,设置从任意端口,到此端口填写135,点“确定”。
- 如果需要添加屏蔽端口,可再次点击添加,无需添加则点击“确定”
- 在筛选器操作选项卡,点击“添加”,添加一个新筛选器操作“阻止”
- 选中新建的IP筛选列表和筛选器操作,点击“应用”
- 右键新IP安全策略,点击“分配”,指派新建的IP安全策略。
- 举例
-
日志审核
- 控制面板→管理工具→事件查看器
- 查看id表示什么事件
-
计划任务表,出现无用的计划事件
2.liunx
-
账号安全
-
/etc/login.defs文件,创建用户时一些规则
-
常用的命令
- •chage -l test #查看用户的密码规则
- chage -M 90 -m 6 -W 30 test #修改用户密码信息
- 注意:不要用该命令给root用户加上有效期,如果密码过期,再加上后文说的/etc/shadow文件加锁禁止修改,会导致root提示修改密码,无法成功修改密码,从而无法登陆。
- awk -F: ‘($2 == “”) { print $1 }’ /etc/shadow #检查是否存在空口令账号
- rpm -qa|grep cracklib #redhat公司专门开发了cracklib安装包来判断密码的复杂度
- pam_tally2 -u username #查看用户登录失败次数
-
访问控制
-
禁止root用户直接远程ssh登录
- vi /etc/ssh/sshd_config #进入config配置文件修改
- PermitRootLogin no #将PermitRootLogin字段中的yes改为no
- service sshd restart #重启ssh服务
-
禁止root用户直接远程Telnet登录
- 系统安装telnet-server服务后,默认就是禁止root用户直接远程telnet登录的。
- 确认只要存在/etc/securety文件,就可以限制root直接远程telnet登录。
-
禁止无用的系统用户登录
- •#usermod -s /sbin/nologin username
- 一般以下这几个系统用户根据实际需要可以进行禁止登陆,可能现网系统还存在其他用户
-
删除系统特殊的用户账号
-
删除下列文件:
◆/etc/passwd
◆/etc/group
◆/etc/shadow
◆/etc/gshadow
◆for i in adm lp sync shutdown halt news uucp operator games gopher; do userdel $i; done
-
-
删除特殊的组
- for i in adm lp news uucp games dip pppusers popusers slipusers; do groupdel $i; done
-
登录超时控制
-
•对于bash用户,修改/etc/profile或/etc/bashrc,所有使用bash的用户都会继承
-
对于csh用户,修改/etc/csh.cshrc,所有使用csh的用户都会继承
-
-
系统日志审计
-
syslog 登录事件记录
- #more /etc/syslog.conf #查看参数 authpriv 值
- authpriv.* /var/log/secure #表名登录事件记录在/var/log/secure文件中
- #more /var/log/secure | grep refused #检查非法登录
-
syslog.conf 的配置审核
- #more /etc/syslog.conf #查看是否设置了下列项
- kern.warning;*.err;authpriv.none\t@10.10.13.77 *
- ◆.info;mail.none;authpriv.none;cron.none\t@loghost
- .emerg\t@loghost
- local7.\t@loghost
- 修改后执行命令 service syslog restar 生效
- 建议配置专门的日志服务器,加强日志信息的异地同步备份
-
启动审计进程
- service auditd start
- service psacct start
- service psacct start
- chkconfig psacct on
-
记录审计的日志
-
auditd审计进程日志记录在/var/log/audit/audit.log
-
psacct日志记录在/var/account/pact
-
lastcomm -f /var/account/pact
注意:pacct日志是二进制文件,使用上述命令进行查看
-
-
登录日志
- #lastlog #查看用户最后一次登录时间
- lastlog #名 端口 来自 最后登陆时间
-
-
服务管理
-
查看现有服务
- chkconfig –list
- chkconfig --list | grep 服务名称
- 注:系统可能不仅限于以下服务,要根据安装系统组件(除audit以外的服务,如果系统和业务不需要,可以关闭)
-
vsftp服务禁止匿名登录
-
#vim /etc/vsftpd/vsftpd.conf #修改vsftp配置文件
anonymous_enable=NO #将此字段值从YES改为NO
#service vsftpd restart #重启vsftp服务
-
-
系统在登陆时暴露有关操作系统版本信息
- 分别编辑三个配置文件(/etc/issue、/etc/issue.net、/etc/motd),将操作系统类型及版本号等敏感信息清除,或者替换为严厉警告信息:
- echo ‘ONLY Authorized users only! All accesses logged’ > /etc/issue
- echo ‘ONLY Authorized users only! All accesses logged’ > /etc/issue.net
- eho ‘ONLY Authorized users only! All accesses logged’ > /etc/motd
- 分别编辑三个配置文件(/etc/issue、/etc/issue.net、/etc/motd),将操作系统类型及版本号等敏感信息清除,或者替换为严厉警告信息:
-
-
关闭ipv6
-
查看是否开启了ipv6
- 方法一:使用ifconfig查看自己的IP地址是否含有IPv6地址
-
- 方法二:查看服务监听的IP中是否有IPv6格式的地址
-
firewalld
-
区域概念
-
区域管理
-
firewall-cmd --help | wc -l
(1)查看默认区域
•# firewall-cmd --get-default-zone
(2)列出当前正在使用的区域及其所对应的网卡接口
•# firewall-cmd --get-active-zones
(3)列出所有可用的区域
•# firewall-cmd --get-zones
(4)设置默认区域
•# firewall-cmd --set-default-zone=block
-
-
服务管理
-
(1)查看预定义服务
firewall-cmd --get-services
(2)添加http服务到public区域
firewall-cmd --add-service=http --zone=public --permanent
systemctl restart firewalld
(3)查看public区域已配置的规则
firewall-cmd --list-all --zone=public
4)移除public区域的http服务,不使用–zone指定区域时使用默认区域
firewall-cmd --remove-service=http --permanent --zone=public
systemctl restart firewalld
(5)将多个服务添加到某一个区域,不添加–permanent选项表示是即时生效的临时设置
firewall-cmd --add-service=http --add-service=https
systemctl restart firewalld
-
-
端口管理
-
Ø(1)允许TCP的3306端口到public区域
Ø # firewall-cmd --add-port=3306/tcp
Ø(2)从public区域将TCP的3306端口移除
Ø # firewall-cmd --remove-port=3306/tcp
Ø(3)允许某一范围的端口,如允许UDP的2048-2050端口到public区域
Ø # firewall-cmd --add-port=2048-2050/udp --zone=public
Ø(4)使用–list-ports查看加入的端口操作是否成功
Ø # firewall-cmd --list-ports
-
-
伪装ip
-
(1)什么是地址伪装?
•通过地址伪装,NAT设备将经过设备的包转发到指定的接收方,同时将通过的数据包
•源地址更改为其NAT设备自己的接口地址。当返回的数据包到达时,会将目的地址修改
•为原始主机的地址并做路由。地址伪装可以实现局域网多个地址共享单一公网地址上网。类似于NAT技术中的端口多路复用(PAT)。IP地址伪装仅支持ipv4,不支持ipv6。
(2)相关命令
•# firewall-cmd --query-masquerade # 检查是否允许伪装IP
•# firewall-cmd --permanent --add-masquerade # 允许防火墙伪装IP
•# firewall-cmd --permanent --remove-masquerade# 禁止防火墙伪装IP
-
-
端口转发
-
当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
•# firewall-cmd --permanent --add-masquerade
•# firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80
•# firewall-cmd --add-port=8080/tcp 允许访问8080端口
•# firewall-cmd --remove-service=http 拒绝访问80端口
端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。
-
二、中间件安全加固
主要介绍了四种中间件的安全加固,分别是 IIS 7.0、Apache、weblogic、Nginx的安全加固
1.IIS
-
前置条件
-
根据站点开放端口、进程ID、确认站点采用IIS进行部署;
-
启用IIS
方法一:按Win键+R打开Windows运行,输入inetmgr,回车即可打开;
方法二:开始->管理工具->Internet 信息服务(IIS)管理器。
-
-
限制目录权限
- 需要上传文件的目录,双击处理程序映射
- 把编辑功能权限中的脚本去掉,这样即使上传木马文件在此目录中,也不会执行
-
开启日志审计
- 打开IIS管理工具,选择需要日志的站点,切换到功能视图,双击日志,进入日志配置界面
- 默认情况下Web日志存放于系统目录" %SystemDrive%\inetpub\logs\LogFiles",将Wb日志文件放在非网站目录和非操作系统分区,并定期对Web日志进行异地备份。
-
关闭webdav
- 支持对web应用直接读写
- 开始->管理工具->Internet 信息服务(IIS)管理器, 选择一个站点,在功能视图中找到WebDAV创作规则,双击 WebDAV创作规则,进入设置:
- 在WebDAV创作规则中,设置禁用WebDAV
-
短文件名漏洞修复
- 打开Internet 信息服务(IIS)管理器,选择站点,在功能视图界面,双击请求筛选
- 选择站点,请求筛选,在URL中添加拒绝㐰序列设置(~)
2.Apache安全加固
-
前置条件
- 根据站点开放端口,进程ID,确认站点采用Apache进行部署;
- 找到Apache配置文件
-
配置文件的名称
- /etc/httpd/conf/httpd.conf
-
禁止目录浏览
-
(1)备份httpd.conf配置文件,修改内容:
-
- 将Options Indexes FollowSymLinks 中的Indexes 去掉,就可以禁止 Apache显示该目录结构。
-
(2)设置Apache的默认页面:
- -
(3)重新启动Apache 服务
-
-
日志配置
-
(1) 备份httpd.conf配置文件,修改内容:
Window下:
-
开启apache日志并且按照日期划分创建。
(2) 重启Apache服务
-
限制目录执行权限
- 备份httpd.conf配置文件,修改内容:
- 备份httpd.conf配置文件,修改内容:
-
隐藏apache版本号
-
(1) 备份httpd.conf 文件,修改内容:
ServerSignature Off
ServerTokens Prod
(2) 重新启动 Apache 服务
-
-
限制IP访问
-
(1) 备份httpd.conf配置文件,修改内容:
Options FollowSymLinks
AllowOverride None
Order Deny,Allow
Deny from all
Allow from 192.168.204.0/24
只允许从192.168.204.0/24 IP段内的用户访问,一般在限制后台访问时用到。
-
3.webloginc安全加固
-
前置条件
- 1、根据站点开放端口,进程ID,确认站点采用Weblogic进行部署;
- 2、找到Weblogic站点位置
-
默认后台地址/默认端口号
- HTTP://ip:7001/console/login/LoginForm.jsp
-
用户权限
-
使用低权限用户
-
检查weblogic 的启动用户
- 使用ps -ef|grep java|grep weblogic可以查看启动weblogic的进程用户
-
用户权限整改
-
使用root用户对中间件WebLogic 目录进行重新授权,需要创建一个普通用户,以下以weblogic用户为示例:
# cd /ycxk/app01/
# chown -R weblogic:weblogic . /bea
-
使用普通用户重启weblogic
-
-
-
账户共用
-
应为不同的用户分配不同的Weblogic 帐户,不允许多个用户共用同一个帐户
-
检查weblogic 控制台的账户
检查方法,操作步骤:以管理员身份进入控制台->Security Realms->myrealm->User and Groups;
-
账号共用整改
-
(1)操作步骤:以管理员身份进入控制台->Security Realms->myrealm->User and Groups;
新建->输入“名称”->输入“说明”->输入“口令”并“确认口令”
-
(2) 选中新建的用户名->组->选择组->保存
-
-
输入weblogic控制台URL,键入新账户与密码进行登录,如下图所示:
-
-
-
-
-
-
账户清理
-
应删除过期、无用的weblogic 控制台帐户
检查weblogic 控制台的账户
检查方法,操作步骤:以管理员身份进入控制台->Security Realms->myrealm->User and Groups;
-
-
禁止特权身份运行
-应禁止以特权用户身份运行WebLogic, " Enable Post-Bind UID”和" Enable Post-Bind GlD "两个选项必须勾选并配置相关的UID和GID。 -
口令长度
- 账号口令长度至少为8位
-
账号封锁
- 应配置帐户连续认证失败次数超过 5 次(不含 5 次),锁定该帐户10 分钟
-
日志启用
-
检查审计类型是否设置为“ Change Log and Audit ”
-
检查日志设置
•“ Rotation type ”设置是否为“ By Time ”
•“ Files to retain ”设置是否为“ 180 ”
•“ Severity level ”设置是否为“ Warning ”
-
发送服务器标签关闭
- 操作步骤:以管理员身份进入控制台->服务器->每个SERVERNAME->协议->HTTP->检查是否Send Server Header勾选;
-
删除示例文件
-
•操作步骤:登录服务器,检查weblogic家目录下,是否存在Sample
-
-
删除sample
-
•登录服务器,对sample进行压缩备份在进行删除
-
例如:
$ cd /weblogic/bea/wlserver_92/
$ tar -cvf sample_bak.tar sample/
$ rm -fr sample/
-
-
-
自定义错误页面
- 不显示错误代码和错误信息
- 检查一个错误的weblogic控制台路径,例如:检查是否返回404、405、500等信息
-
超时时间策略
- 以管理员身份进入控制台->Servers->Configuration->Tuning核查Maximum Open Sockets是否为2000。若业务处理需要大于2000,可特殊注明。
-
连接数设置
-
应设置 session 超时时间数值不为0 ,且在合理范围内
进入控制台->Servers->对于server->Tunning查看stuck Thread超时时间;建议设置值为10分钟,即600s,若线程处理时间需要大于600s,可特殊注明(一般默认600s)。
-
-
2.Nginx安全加固
- 前置条件
- •根据站点开放端口,进程ID,确认站点采用nginx进行部署;
•找到nginx配置文件
- 关闭目录浏览
- 禁用autoindex
禁用autoindex,避免目录浏览,减少安全隐患
- 编辑nginx配置文件,在http模块添加autoindex off;
重启Nginx
- 关闭服务标识
- 关闭服务器标记,避免显示服务器版本信息
如果开启的话(默认情况下)所有的错误页面都会显示服务器的版本和信息
- 在nginx.conf配置文件中,http模块中添加 server_tokens off;
重启Nginx
- 限制Nginx请求方法
- 限制nginx请求方法,防止通过请求漏洞攻击服务器,仅允许常用的get、post、head方法
- 编辑nginx配置文件,在每个server模块中添加
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
- 日志配置
- 统一使用规定好的日志格式
- 编辑nginx配置文件,在http模块中添加如下参数
log_format main
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/host.access.log main;
重启nginx服务即可
- 限制访问ip
- 为防止服务器不安全性增加,需要限制访问IP,仅允许指定IP访问指定资源
- 编辑nging配置文件,在每个server模块中的location添加需求的限制,示例如下
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
执行nginx -s reload 动态更新配置文件
- 降权
- 为保证避免特权用户启动引起的安全隐患,需使用普通账户启动nginx
编辑nginx配置文件,添加如下参数:
user jqsoft;
重启Nginx(需要将Nignx目录及相关静态文件授权给jqsoft用户)
- 解析漏洞
- 由于nginx.conf的如下配置导致nginx把以’.php’结尾的文件交给fastcgi处理,为此可以构造http://ip/uploadfiles/test.png/.php (url结尾不一定是‘.php’,任何服务器端不存在的php文件均可,比如’a.php’),其中test.png是我们上传的包含PHP代码的照片文件。
-
- 但是fastcgi在处理’.php’文件时发现文件并不存在,这时php.ini配置文件中cgi.fix_pathinfo=1 发挥作用,这项配置用于修复路径,如果当前路径不存在则采用上层路径。为此这里交由fastcgi处理的文件就变成了’/test.png’。
最重要的一点是php-fpm.conf中的security.limit_extensions配置项限制了fastcgi解析文件的类型(即指定什么类型的文件当做代码解析),此项设置为空的时候才允许fastcgi将’.png’等文件当做代码解析。
- 防御
将php.ini文件中的cgi.fix…pathinfo的值设置为0,这样php再解析1.php/1.jpg这样的自录时,只要1.jpg不存在就会显示404页面
php-fpm.conf中的s.ecurity.limit…extensions后面的值设置为.phpl
三、数据库安全加固
主要介绍了三种数据库的安全加固,mysql、
- mysql、oracle、SqlServer的数据库加固
1.Mysql数据安全加固
-
基本的安全原则
-
•选择稳定、无漏洞版本并及时升级更新、打补丁
•配置防火墙策略,更改默认端口
•避免使用弱口令,定期更新口令
•严格的权限分配和访问控制
-
-
找不到3306端口原因
- 站库分离
- 端口被修改,被改成高端口
- 防火墙拦截3306,不对外开发
-
mysql5.0以上与以下有什么区别
- “MySQL5.0以上版本存在一个叫information_schema的数据库,它存储着数据库的所有信息,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型和访问权限等。而5.0以下没有。”
-
系统层面配置
-
系统安装时,需要确认没有其他⽤户登录在服务器上。建议在服务器本地安装,不使⽤⽹络远程安装。
-
数据库版本选择稳定、无漏洞的版本,并及时更新、打补丁
-
查看系统防火墙或网络安全设备,是否有限制对MySQL数据库的访问
-
不设置环境变量或确保MYSQL_PWD环境变量未设置敏感信息
-
禁止使用命令行历史记录
•Linux系统:
find / -name “.mysql_history” --查看是否存在mysql的历史命令记录文件,如果存在,则需要进行如下加固:
◆(1)删除.mysql_history文件;
◆(2)设置环境变量MYSQL_HISTFILE为/dev/null,并添加到shell的初始化脚本中,创建mysql_history到/dev/null的链接:
•ln -s /dev/null $HOME/.mysql_history
-
-
服务器配置
-
严禁将数据库服务器允许从公⽹直接访问,也严禁将数据库服务器配置公⽹IP或通过⽹络设备映射出公⽹IP。
在局域⽹内限制开放的端口。需要其他额外的端口,需要提出申请,并有⽂档记录。
服务器不应该具备访问外⽹的能⼒(如有必要,可单向访问)。
新的服务器正式投⼊使⽤前,必须经过安全加固。
-
-
数据库通讯安全
-
通信加密
•show variables like ‘have_openssl’;
•have_openssl=YES
-
服务端证书验证
•查看my.cnf文件[Client] 字段,已配置ssl_verify_server_cert参数
SSL连接配置
•1.show variables like ‘ssl_cert’;
•2.show variables like ‘ssl_key’;
•3.show variables like ‘ssl_ca’;
-
-
用户和密码进行配置
-
严格限制Mysql帐户,使用专用的最小权限账号运行Mysql数据库进程
重命名root账号
禁止数据库账号共用
控制最高权限只有管理员
限制非管理员用户的权限
合理控制DML/DDL操作授权
历史命令行密码设置为不可见
删除默认test数据库,测试帐号,空密码、匿名帐号
禁止root远程登录
关闭Old_Passwords
secure_auth选项设置
维护脚本禁止存放明文密
确保所有用户都要求使用非空密码登录
-
-
文件权限配置
-
控制二进制日志文件的权限
控制数据目录、基准目录的访问权限
控制错误日志文件的权限
控制慢查询日志文件的权限
控制审计日志文件的权限
控制通用日志文件的权限
-
-
审计和日志
-
开启错误日志审计功能
-
•错误日志包括数据库运行和停止过程中的一系列活动信息,有助于分析数据库运行过程中的一些异常活动,一般情况下需要开启错误日志记录功能,使用如下命令查询:
•SHOW variables LIKE ‘log_error’;
确保返回结果为非空,如果为空,需要在mysql数据库配置文件中增加相关配置
-
-
确保日志存放在非系统区域
-
•日志文件随着数据库的运行会不断增加,如果存放在系统区域,则会影响系统的正常运行,使用如下命令进行查询:
•SELECT @@global.log_bin_basename;
•确保返回结果不是如下路径:/、/var、/usr
-
-
关闭原始日志功能
-
•原始日志选项会决定一些敏感信息是否会被明文写进日志中,例如查询日志、慢查询日志、二进制日志,确保数据库配置文件中存在如下配置项:
•Log-raw = OFF
-
-
2. oracle数据安全加固
-
账号权限加固
-
限制应用用户在数据库的权限
•1.查看权限
SQL>SELECT * FROM dba_sys_privs WHERE grantee=; – 系统权限
SQL>SELECT * FROM dba_tab_privs WHERE grantee=; – 对象权限
SQL>SELECT * FROM dba_role_privs WHERE grantee=; --赋予的角色
•2.收回相应权限(例如收回 select any table 权限)
SQL>REVOKE select any table FROM ;
•3.收回应用用户的 DBA 角色
SQL>REVOKE dba FROM ;
-
撤消 public 角色的程序包执行权限
•1.查看 public 角色的程序包执行权限
SQL>SELECT table_name FROM dba_tab_privs WHERE grantee=‘PUBLIC’ and privilege=‘EXECUTE’;
•2.撤销 public 角色的程序包执行权限(例如撤销在 utl_file 包上的执行权限)
SQL>REVOKE execute ON utl_file FROM public;
-
Oracle 官方建议撤销 public 角色对 utl_file、 utl_http、 utl_tcp、 utl_smtp、dbms_random 程为所有应用用户配置强口令
•1.根据设置的口令策略修改弱口令
SQL>ALTER USER IDENTIFIED BY ;
-
修改系统帐户的默认口令
1.修改 sys 和 system 口令
SQL>ALTER USER sys IDENTIFIED BY ;
SQL>ALTER USER system IDENTIFIED BY ;
2.锁定不需要的用户
SQL>ALTER USER ACCOUNT LOCK;
-
删除系统中多余的自建帐号
1.查看用户自建账号
SQL>SELECT username FROM all_users;
2.删除或者禁用多余自建账号
SQL>DROP USER CASCADE;
-
-
数据访问控制加固
-
严格限制库文件的访问权(确保除属主和 root 外,其他用户对库文件没有写权限)
•1.用操作系统命令查看库文件访问权限(以 RedHat linux 为例)
ls -l $ORACLE_BASE/oradata
•2.用操作系统命令删除库文件组和其他用户的写权限
chmod 640 $ORACLE_BASE/oradata/*
3.windows 系统同理(方法不同)
-
配置$ORACLE_HOME/bin
即设置$ORACLE_HOME/bin 其下所有程序的访问权限或其他安全控制机制
•1.用操作系统命令查看 bin 目录下所有程序文件的访问权限(以 RedHat Linux 为例)
ls -l $ORACLE_HOME/bin
•2.用操作系统命令删除组和其他用户的写权限
chmod 640 $ORACLE_HOME/bin/*
-
停止或禁用与承载业务无关的服务或组件
•1.用操作系统命令查看有无与业务无关的服务或组件
•2.用操作系统命令停止或禁用与业务无关的服务或组件
-
清除数据库无用的东西
•1.查看数据库中表或视图等对象
SQL>SELECT * FROM dba_tables;
SQL>SELECT * FROM dba_views;
•2.删除数据库中存在的无用的、测试的、废弃的表或视图
SQL>DROP TABLE ;
SQL>DROP VIEW ;
-
-
网络访问控制加固
-
ip限制
-
•设置 TNS 登录的 IP 限制,仅允许最少的必要的 IP 地址可连接 TNS 监听器
•1.在目录$ORACLE_HOME/network/admin 下修改 sqlnet.ora 文件实现 TNS 登录 IP 限制,
◆tcp.validnode_checking=yes
#允许访问的 ip
◆tcp.invited_nodes =(ip1,ip2,……)
#不允许访问的 ip
◆tcp.excluded_nodes=(ip1,ip2,……)
•2.修改 sqlnet.ora 后,重新启动 listener 服务可能对部分应用系统
-
-
关闭远程操作系统认证
-
•1.在目录$ORACLE_HOME/network/admin 下修改 sqlnet.ora 文件,设置下列配置信息:
sqlnet.authentication_services=(NONE)
•2.修改参数 Remote_login_passwordfile 为 EXCLUSIVE 或 SHARED
SQL>ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
•3.修改参数 REMOTE_OS_AUTHENT
SQL>ALTER SYSTEM SET REMOTE_OS_AUTHENT=FALSE SCOPE=SPFILE;
•4.重启数据库和监听使修改生效
-
-
修改默认端口
-
•1. 查看当前监听的状态
lsnrctl status
•2. 停止监听
lsnrctl stop
•3. 修改监听文件的端口号,在目录$ORACLE_HOME/network/admin 下修改 listener.ora 文件
◆(例如把端口号改为11251)
LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST=LOCALHOST)(PORT=11251))))
•4. 修改初始化参数 local_listener
SQL>ALTER SYSTEM SET local_listener=“(address=(protocol=tcp)(host=localhost)(port=11251))”;
SQL>quit
•5. 重启监听器
lsnrctl start
-
-
-
口令策略加固
-
设置口令复杂度要求
-
•1.检查 profile 文件设置
SQL>SELECT * FROM dba_profiles;
•2.创建口令复杂度函数
SQL>@$ORACLE_HOME/rdbms/admin/utlpwdmg.sql
•3.设置口令复杂度
要求长度不小于4位字符串,而且是字母和数字或特殊字符的混合,用户名和口令禁止相同
SQL>ALTER PROFILE “DEFAULT” LIMIT password_verify_function verify_function;
注意: Oracle 口令复杂度包含的特殊字符不是任意特殊字符都可以,一般以下划线、 $、 *等符号为主
-
-
设置口令使用期限要求到期后自动更改
-
•1.检查 profile 文件设置
SQL>SELECT * FROM dba_profiles;
•2.设置 profile 密码策略,建议使用控制台设置
SQL>ALTER PROFILE “DEFAULT” LIMIT password_life_time 30;
-
-
设置策略对口令尝试次数进行限制
-
•1.检查 profile 文件设置
SQL>SELECT * FROM dba_profiles;
•2.设置 profile 密码策略
SQL>ALTER PROFILE “DEFAULT” LIMIT failed_login_attempts 5 password_lock_time 1;
-
-
-
审计策略加固
-
审计配置
-
•1.启用审计功能
◆SQL>ALTER SYSTEM SET audit_trail=os scope=spfile;
•2.启用对 sysdba 的活动审计
◆SQL>ALTER SYSTEM SET audit_sys_operations=true;
•3.重启数据库,使设置生效
◆若是 windows 平台,audit trail 会记录在 windows 的事件管理器中,
◆若是linux/unix 平台则会记录在audit_file_dest 参数指定文件中;
-
-
配置日志策略
-
•1. 配置归档模式,将数据库正常关闭
◆SQL>SHUTDOWN IMMEDIATE
◆启动到 MOUNT 模式
◆SQL>STARTUP MOUNT
◆SQL>ALTER DATABASE ARCHIVELOG
◆SQL>ALTER DATABASE OPEN
•2.配置归档日志的名称格式
◆ALTER SYSTEM SET log_archvie_format=‘%S_%T_%R.log’ scope=spfile
•3.配置归档位置
◆ALTER SYSTEM SET log_archive_dest_1=‘location=oracleoradataarchive1’ scope=spfile
-
-
-
漏洞加固
-
安装系统安全补丁
-
对安全软件扫描或手工检查发现的系统漏洞进行修补
•1.运行防病毒软件(如 SEP)保护操作系统
•2.下载并安装相应的安全补丁
-
-
3.SqlServer数据加固
-
限制可以访问数据库的ip
- 一般可以通过安全策略里面的ipsec或者windows防火墙来限制。
-
修改数据库的访问端口
- 可以在SQL SERVER 配置管理器修改访问端口为不常见端口来防止一般性扫描
-
修改日志审核策略
- 将登录审核修改为“开启登录成功和失败的日志”,这样方便数据库被入侵之后,对日志的查看。
-
对SA账号的处理
- 如使用混合身份验证模式,建议禁用掉SA账户,否则设置非常强的SA密码。
-
网站使用的数据库账号
-
•对于每一个网站新建一个登陆用户并关联一个数据库用户,设置强密码,给予服务器角色为:PUBLIC,给予对应的数据库角色为:db_owner(需更加安全的保护对应数据库的数据需要调节更加严格的权限,此处给予的为此数据库的最高权限,若此账号泄露,此数据库中的数据不保,配合后续配置不影响服务器安全)
-
数据库服务运行账号
-
•数据库需要往磁盘写文件,或者通过存储过程执行命令的权限由数据库服务器的运行账户权限决定,使用NETWORK SERVICE账户来运行数据库服务器是较安全的。
-
磁盘权限的合理配置
- •合理配置数据库运行,账户在磁盘上的权限,一定不要随意给写权限,特别是网站目录及数据库存储目录以外的位置,这样即使是SA也不能往磁盘写文件。
-
危险存储过程的处理
- •由于在sql server 2008中sp_dropextendedproc 不能删除系统扩展存储过程,所以直接禁用常见危险存储过程。具体可根据实际情况来操作,因为有些存储过程是正常需要的。对于一般账户而言,根本没有执行这些高危存储过程的权限,而对于SA账户来说,以上所有的操作都是可恢复的,个人觉得SA账户被入侵之后的关键控制点在于合理配置数据库服务运行账号的权限。