基于Linux+宝塔面板+LNMP+Wordpress搭建的网站主页的网站漏洞修补的解决方案 (1)

发布时间 2023-09-18 17:20:15作者: 柯慕灵

基于Linux+宝塔面板+LNMP+Wordpress搭建的网站主页

1.网站漏洞修补的解决方案


@


前言

为什么要做网站漏洞扫描

降低资产所面临的风险

我们知道,漏洞的典型特征:系统的缺陷/弱点、可能被威胁利用于违反安全策略、可能导致系统的安全性被破坏。 从信息安全风险评估规范GB/T 20984可以知道,分析风险的计算公式为:总风险 = 威胁 * 漏洞(脆弱性) * 资产价值。 由此可见漏洞是计算风险的重要变量,漏洞越严重,资产面临的风险越高。通过漏洞扫描及时发现漏洞,及时修复高危漏洞,能够有效降低资产的风险。[1]

满足法律合规要求

2017年生效的中华人民共和国网络安全法,作为上位法,明确了中国实施网络安全等级保护制度。而在网络安全等级保护测评过程指南GB/T 28449-2018这一标准中,则明确给出了对于二/三/四级系统的测评要求,漏洞扫描无疑是已写入其中的重要组成部分。

满足业界安全最佳实践及认证需求

信息技术安全评估通用标准ISO/IEC 15408 是计算机相关产品安全认证的国际标准,产品供应商可以委托第三方评估实验室评估其产品,若成功通过评估则会获得CC认证,而这通常也就意味着获得全球范围内的“通行许可证”。对产品的安全评估等级由低到高可以分为 EAL1~EAL7,最低等级的EAL1包含最少的保障过程。即便如此,漏洞评估也包含在EAL1范围内,因为它最为基础和有效。

其他参考信息

等级保护

信息安全等级保护制度是国家信息安全保障工作的基本制度、基本策略和基本方法,是促进信息化健康发
展,维护国家安全、社会秩序和公共利益的根本保障。国务院法规和中央文件明确规定,要实行信息安全
等级保护,重点保护基础信息网络和关系国家安全、经济命脉、社会稳定等方面的重要信息系统,抓紧建
立信息安全等级保护制度。

网络安全法

十二届全国人大常委会第二十四次会议表决通过了《中华人民共和国网络安全法》,并于 2017 年 6 月 1
日起施行。《网络安全法》第二十五条规定:网络运营者应当制定网络安全事件应急预案,及时处置系统漏
洞、计算机病毒、网络攻击、网络侵入等安全风险;在发生危害网络安全的事件时,立即启动应急预案,
采取相应的补救措施,并按照规定向有关主管部门报告。

安全建议

Windows 自动更新是 Windows 操作系统的一项功能,计算机的重要更新发布时,它会及时提醒下载和安
装。通过使用自动更新可以在第一时间更新操作系统,修复系统漏洞,保护计算机安全。使用此更新同微
软的在线升级并无冲突,仍然可以运行主机操作系统内的“Windows Update”程序或者访问http://update.microsoft.com/来进行在线升级。对于大量终端用户而言,可以采用 WSUS 自动更新服务器,
可以最快速、安全的进行系统更新,同时可以减少外网访问流量,特别是国际访问流量。我们建议采用
WSUS 的用户都启用此服务,实时更新系统补丁,降低安全隐患。对于存在弱口令的系统或服务,建议修
改密码,同时使用策略来强制限制密码长度和复杂性,对于一些可关闭的服务,建议关闭服务以达到安全
的目的。对于 Linux、Unix 系统的用户,也可以使用相应的更新命令来进行系统补丁升级,同时关注其他
软件的厂商安全公告做好升级操作。由于其他原因不能及时安装补丁的系统,考虑在网络边界、路由器、
防火墙上设置严格的访问控制策略,以保证网络的动态安全。

漏洞分类

主机漏洞

主机漏洞主要是指远程访问主机后台的安全漏洞。通常远程连接Linux的工具是OpenSSH,所以通常解决方案是升级OpenSSH工具。端口号默认22。
OpenSSH工具在CentOS7的版本通常是7.x,大部分已知的OpenSSH高危和中危漏洞在8.4+已修补,所以最好的解决方案就是升级OpenSSH工具,不要一个个去打补丁。目前最新的版本是9.0。

网站漏洞

网站漏洞主要是指你在服务器所搭建的网站服务中内容或结构上的一些错误、兼容性的设置和一些信息的泄露,解决方案就是一一修改这些问题。端口号默认80。
虽然WordPress是一个开源的动态网站工具,有现成的模板和一堆插件,但是在不打插件的情况下,问题还是很多的。WordPress没有设置一些请求头,也没有默认的robots协议(虽然这玩意只是一个君子协议,但是可以防止大公司的搜索引擎乱爬),同样一些表单有隐藏内容,网站内容还是比较的冗余。


一、主机漏洞及解决方案

1.一些升级OpenSSH工具就可以解决的漏洞(举些例子)

OpenSSH X11 转发安全绕过漏洞(CVE-2016-1908)
OpenSSH client 安全漏洞(CVE-2016-1908)
OpenSSH sshd 安全漏洞(CVE-2016-6515)
OpenSSH sshd 安全漏洞(CVE-2016-10708)
OpenSSH 输入验证错误漏洞(CVE-2016-6515)
OpenSSH sshd 安全漏洞(CVE-2015-8325)
OpenSSH sshd 缓冲区错误漏洞(CVE-2016-10012)
OpenSSH sshd 安全漏洞(CVE-2016-10010)
OpenSSH 代码问题漏洞(CVE-2016-10009)

解决方案:升级OpenSSH

Centos 升级 OpenSSH 到 9.0教程:[2]
可通过执行命令,查看组件版本:

rpm -qa | grep openssh

安装编译所需依赖软件包:

yum install -y wget gcc pam-devel libselinux-devel zlib-devel openssl-devel

下载 OpenSSH 安装包上传至服务器或 wget 直接下载:

cd /usr/local/src
wget -O openssh.tar.gz https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz

备份配置文件 一般卸载的时候都会把配置文件以sshd_config.rpmsave的方式另存一份,但是/etc/pam.d/sshd这个配置文件并没有另存,所以建议都备份一下:

cp /etc/ssh/sshd_config sshd_config.backup
cp /etc/pam.d/sshd sshd.backup

删除低版本OpenSSH的的rpm包:

rpm -e --nodeps `rpm -qa | grep openssh`

安装openssh,解压:

tar -zxvf openssh.tar.gz
cd openssh-9.0p1

编译配置:

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-tcp-wrappers --with-ssl-dir=/usr/local/ssl --without-hardening

编译安装“

make && make install

配置,调整文件权限:

chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key

复制配置文件:

cp -a contrib/redhat/sshd.init /etc/init.d/sshd
chmod u+x /etc/init.d/sshd

还原配置文件:

mv ../sshd.backup /etc/pam.d/sshd
mv ../sshd_config.backup /etc/ssh/sshd_config

添加添加自启服务ssh到开机启动项:

chkconfig --add sshd
chkconfig sshd on

重启服务:

systemctl restart sshd

到此安装完毕,查看ssh版本:

ssh -V

应该会输出:

OpenSSH_9.0p1, OpenSSL 1.0.2k-fips 26 Jan 2017

到此,升级基本完成。安全起见不要关闭SSH窗口,新增一个SSH连接,看看能否正常登录。如果不能登录,可以根据 sshd 的日志进行配置调整。
如果不能正常登录,可以打开sshd_config文件进行修改,尤其是注意有些服务器默认的ssh端口不一定是22:

vim /etc/ssh/sshd_config

最后清理刚刚的安装包以及解压文件:

rm -rf /usr/local/src/openssh*

2.支持 SSH 弱加密算法

OpenSSH默认配置为允许弱加密算法,所以在安全检测中会提示需要禁用它们。

解决方案

修改 sshd_config 配置文件,最后添加一下内容(去掉 arcfour、arcfour128、arcfour256 等弱加密算法):

vim /etc/ssh/sshd_config

单独添加一行:[3]

Cipher saes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc

但是!当你更新了OpenSSH之后,上述的弱加密算法有的就已经被删去了,所以已经删除的算法必须要从上面删去。
那么我们就要使用nmap工具进行检测,我是在kali Linux上它自带nmap工具,然后输入以下命令:

nmap --script ssh2-enum-algos -sV -p port IP
# ssh一般端口为22,所以port你可以用22,IP就是你要检测的主机IP

因为我更新OpenSSH到9.0了,所以我只有上述的3个弱加密算法。我只需要在sshd_config中加:

Ciphers aes128-ctr,aes192-ctr,aes256-ctr

然后重启服务:

service sshd restart

不过一定记得再开一个SSH连接,看看是否连接没问题。
如果有问题的话,说明刚刚这几个弱加密算法有它已经删除了的算法,你禁用了某个它不知道的算法。
请用namp工具检查一下。

3.禁用弱mac算法

和上一个漏洞一样,禁用弱加密mac算法。检测方式也是一样:

nmap --script ssh2-enum-algos -sV -p port IP
# ssh一般端口为22,所以port你可以用22,IP就是你要检测的主机IP

解决方案

只看mac_algorithms,将所有都禁用。然后在sshd_config里最后加入,用逗号分开:[4]

vim /etc/ssh/sshd_config

因为更新到了9.0,所以我只需要禁用一项:

MACs hmac-sha1

然后重启服务:

service sshd restart

4.Diffie-Hellman Key Agreement Protocol 资源管理错误漏洞(CVE-2002-20001)

Diffie-Hellman Key Agreement Protocol是一种密钥协商协议。它最初在 Diffie 和 Hellman 关于公钥密码学的开创性论文中有所描述。该密钥协商协议允许 Alice 和 Bob 交换公钥值,并根据这些值和他们自己对应的私钥的知识,安全地计算共享密钥K,从而实现进一步的安全通信。仅知道交换的公钥值,窃听者无法计算共享密钥。

Diffie-Hellman Key Agreement Protocol 存在安全漏洞,远程攻击者可以发送实际上不是公钥的任意数字,并触发服务器端DHE模幂计算。

目前厂商已发布升级补丁以修复漏洞,详情请关注厂商主页:D(HE)ater[5]

解决方案

因为我有OpenSSH,我在sshd_config里加入:

KexAlgorithms -diffie-hellman-group1-sha1,diffie-hellman-group1-sha256,diffie-hellman-group14-sha1,diffie-hellman-group14-sha256,diffie-hellman-group15-sha256,diffie-hellman-group15-sha512,diffie-hellman-group16-sha256,diffie-hellman-group16-sha512,diffie-hellman-group17-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha512

同时加入某些配置选项可以控制未经身份验证的并发连接的最大数量:

MaxStartups (全局)

MaxStartups 10:30:100

PerSourceMaxStartups (每个源 IP 子网)

PerSourceMaxStartups 1

PerSourceNetBlockSize (分组在一起的子网的大小)

PerSourceNetBlockSize 32:128

二、网站漏洞及其及其解决方案

1.robots.txt

WordPress默认是没有爬虫协议的,虽然这是一个君子协议,但是还是可以有效防止遵守规则的爬虫工具占用资源或是爬取敏感数据。
如果你没什么思路的话,可以复制我下面这几行,然后保存为robots.txt,将它放在你的网站主目录下。WordPress默认网站主目录是/www/wwwroot/IP/

User-agent: *
Allow: /wp-content/uploads/
Disallow: /wp-content/plugins/
Disallow: /wp-admin/
Disallow: /readme.html
Disallow: /refer/

2.WordPress登录界面隐藏标签漏洞

在WordPress登录界面有一个隐藏标签,实测其中的参数对登录没有影响,所以建议在登录界面的php文件里把对应的两个隐藏标签删除。JS路径为:

/html/body/div[1]/form/p[3]

参考

文章中有些内容直接复制粘贴过来的,因为了文章整体完整性和可读性,不在文章中插入连接,特此贴出原链接处


  1. 为什么要做漏洞扫描 ↩︎

  2. Centos 升级 OpenSSH 到 9.0 ↩︎

  3. 漏洞复测系列 -- SSH 支持弱加密算法漏洞 ↩︎

  4. 【网络安全】ssh禁用弱秘钥交换算法和弱MAC算法 ↩︎

  5. D(HE)ater ↩︎