1.2能力要求参赛选手应具备以下技术能力:
1.3基本知识要求
1.3.2延伸知识:
所需技能:(个人总结版)
1.首先你要对Windows&Linux客户端,服务端操作系统及对应常用命令,组件,网络配置都比较熟悉
4.现场禁用手机和现场外网,仅可以提供沙盒里面的一些设备官方文档可以参阅(需要少量英文阅读能力)
5.现场结果都是以截图&文字描述的形式进行提交,可以覆盖提交,最多可以提交5个版本的截图&文字描述
6.结果评判是分为2部分,理论是机器判断直接出结果,操作是人工判断进行给分
#偏冷问题踩坑部分记录
0.网络设备调试
根据提供的白皮书&拓扑图,进行某网络设备网络调试
在~/.bash_profile添加下面的环境变量
exportHISTTIMEFORMAT="%F%T"
source~/.bash_profile
PS:/etc/profile;全局
~/.bash_profile;个人
%F是日期长格式,%T是时分秒
2.Windows安全加固
#关闭常见风险端口
#修改组策略一些安全设置
/etc/login.defs:只控制了账号密码的有效期和最小长度。修改完/etc/login.defs文件后,会立即生效,但是它只对修改后创建的用户生效。
pam_cracklib.so:该模块实现了账户密码的复杂度控制。早期用的是pam_cracklib.so模块,后来改成用pam_pwquality.so了,该模块完全兼容旧的pam_cracklib.so模块。该模块对应的配置文件路径在/etc/pam.d/目录下。
/etc/login.defs参数说明:
minlen=8#新密码最小长度为8个字符difok=3#允许的新、旧密码存在相同字符的个数,默认为5。dcredit=-3#新密码中至少包含3个数字lcredit=-3#新密码中至少包含3个小写字母ucredit=-1#新密码中至少包含1个大写字母ocredit=-1#新密码中至少包含1个其他符合通常会在下面4个文件中配置策略:
修改/etc/pam.d/sshd,增加下面的锁定语句:
使用如下命令判断程序是否使用了PAM
每个PAM配置文件都包含一组指令,用于定义模块以及控制标志和参数。每条指令都有一个简单的语法,用于标识模块的目的(接口)和模块的配置设置,语法格式如下:
PAM为认证任务提供四种类型可用的模块接口,它们分别提供不同的认证服务:
单个PAM库模块可以提供给任何或所有模块接口使用。例如,pam_unix.so提供给四个模块接口使用。
所有的PAM模块被调用时都会返回成功或者失败的结果,每个PAM模块中由多个对应的控制标志决定结果是否通过或失败。每一个控制标志对应一个处理结果,PAM库将这些通过/失败的结果整合为一个整体的通过/失败结果,然后将结果返回给应用程序。模块可以按特定的顺序堆叠。控制标志是实现用户在对某一个特定的应用程序或服务身份验证的具体实现细节。该控制标志是PAM配置文件中的第二个字段,PAM控制标志如下:
所有的PAM配置方法都在man手册中有说明,比如要查找某个程序支持PAM模块的配置,可以使用man加模块名(去掉.so)查找说明,如#manpam_unix。(模块名可以在目录/lib/security/或/lib64/security/中找到。)
cp/etc/securetty/etc/securetty.savedecho"">/etc/securetty
Orderdeny,allow先拒绝所有,在允许指定AllowfromXXXX(可以是域名,可以是IP,可以是网段)
Orderallow,deny先允许所有,在拒绝部分DenyfromXXXX(可以是域名,可以是IP,可以是网段)
禁止访问后缀名为TXT的文件
#删掉Indexes
自己设置报错文件,放置到根目录,出现问题后如图所示:
默认:Timeout120KeepAliveOff,KeepAliveTimeout15,该项设置涉及服务器性能调整。
!!:用途有待测试
ServerSignatureOff#有三个值,分别是Off,On和Email。该信息会被显示在错误页面中,如果设置为Off,则不显示,On和Email区别不大,Email会自动给ServerAdmin加一个mailto的链接地址。
ServerTokensProd#有六个值,分别是ProductOnly,Major,Minor,Minimal,OS和Full。该信息会显示Apache和其模块信息在HTTPHeader和错误页面中。
修改前:
修改后:
TraceEnableoff(注:2.0.55以上版本的Apache服务器)
sudochmod600/etc/redis.conf
/etc/redis.conf
rename-command
bind<地址>#127或者内网IP
检查是否是由redis用户启动的服务,如果不是或者没有创建此用户就需要手动创建(yum版本的已经自动创建)
确认保护模式是否启动(默认打开)
redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问
查看用户列表,不存在同名用户,用户身份标识唯一
SELECTuser,hostFROMmysql.user;
##删除空用户名
deletefrommysql.userwhereuser=’’;
##防止注入:按照mysql路径在配置my.ini文件末尾加上local_infile=0表示不允许文件注入,保存。local_infile=0
##日志格式类型
log:查询日志;log-error:错误日志,log-bin:二进制日志;log-slow-queries:慢查询日志
updateusersethost='localhost'whereuser='root';
updateusersethost="127.0.0.1"whereuser="root"andhost="%";
flushprivileges;
##是否采用加密等安全方式对系统进行远程管理
showvariableslike%have_ssl%"
##设置高强度密码
updateusersetpassword=password('这里输入密码')whereuser='root';
##禁止网络连接,防止猜解密码攻击、溢出攻击、和嗅探攻击
PS:如果数据库不需要远程访问,可以禁止远程TCP/IP连接,通过在MySQL服务器的启动参数中添加--skip-networking参数使MySQL服务不监听任何TCP/IP连接,增加安全性。
##设置可信IP访问控制
GRANTALLPRIVILEGESONdb.*TO用户名@'IP子网/掩码';
##连接数设置(根据您的机器性能和业务需求,设置最大、最小连接数)
在MySQL配置文件(my.conf或my.ini)的[mysqld]配置段中添加max_connections=1000,保存配置文件,重启MySQL服务后即可生效。
##禁用数据库用户的语句
ALTERUSER'user'@'host'ACCOUNTLOCK;
showvariableslike"%connection_control%";
showglobalvariableslike'interactive_timeout';showglobalvariableslike'wait_timeout';
setglobalinteractive_timeout=1800;setglobalwait_timeout=1800;
##禁止.mysql_history文件记录信息
.mysql_history文件会记录MySQL操作历史(即数据库查询语句),包含敏感信息。为了避免敏感信息泄露,需要禁止使用。检查所有.mysql_history文件是否链接到dev/null,若没连接到,则以root用户执行如下命令:
find/-name".mysql_history"|xargsrm
##禁止mysql对系统文件进行读写操作
local_infile变量表示能否使用loaddatalocalinfile命令。该变量默认为ON。该变量为OFF时,禁用客户端使用loaddatalocalinfile命令。避免通过数据库查询语句造成的任意文件读写漏洞。
执行如下SQL语句:
showvariableslike'local_infile';若返回结果不为OFF,则在/etc/my.cnf配置文件中修改
[mysqld]local_infile=0
如查询结果为空,不存在空口令用户
SELECT*FROMmysql.userWHERElength(password)=0ORpasswordisnull;
查询密码复杂度
showvariableslike"validate_password%";
validate_password_length=8,#密码长度最小值为8password_mixed_case_count=1,#至少应包含一个字母大小写
validate_password_number_count=1,#一个数字validate_password_special_char_count=1,#一个特殊字符validate_passwordpolicy=MEDIUM#密码验证策略为MEDIUM
SELECTuser,host,password_lifetime,password_last_changed,password_expiredFROMmysql.user";
开启安全审计(二进制日志),查看到bin_log=ON
showglobalvariableslike"%general%
Tips:
知识补充-drop和delete的区别
dropdropuserXXX;
删除已存在的用户,默认删除的是'XXX'@'%'这个用户,如果还有其他的用户(其它主机名),如'XXX'@'localhost'等,不会一起被删除。如果要删除'XXX'@'localhost',使用drop删除时需要加上host即dropuser'XXX'@'localhost'。
deletedeletefromuserwhereuser='XXX'andhost='localhost';
其中XXX为用户名,localhost为主机名(即需指定主机名)。
drop不仅会将user表中的数据删除,还会删除其他权限表的内容。而delete只删除user表中的内容,所以使用delete删除用户后需要执行FLUSHPRIVILEGES;刷新权限,否则下次使用create语句创建用户时会报错。
关于更改数据库用户密码
updateusersetpassword=password('123')whereuser='root'andhost='localhost';#mysql5.7以下
updatemysql.usersetauthentication_string=PASSWORD('newpassword')whereuser='username'andhost='localhost';#mysql5.7以上
alteruser'root'@'localhost'identifiedby'newpassword';#mysql8.0以上