学习路线:
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
在SSH配置文件
cat /etc/ssh/sshd_config | grep MaxAuthTries
2、查看是否配置登录会话超时策略:
cat /etc/profile
是否存在
export TMOUT=900
readonly TMOUT
或
echo $TIMEOUT
echo $TMOUT
2.操作超时自动退出功能
2.1 全局配置TMOUT值
在/etc/profile文件下添加:TMOUT=600
对所有登录方式生效。
记得刷新 source /etc/profile
(ps:对FTP登录方式无效)
一般应该是在/etc/profile这个文件中对所有用户进行设置,可能有极个别的会单独为每个用户配置超时时间。
所以直接查看/etc/profile文件内容,然后再用echo $TMOUT语句看看运行环境中的TMOUT变量到底是多少。
在SSH上配置
cat /etc/ssh/sshd_config | grep ClientAliveInterval
结果记录
1)经核查,配置并启用登录失败处理功能,查看登录失败处理功能相关参数,cat /etc/pam.d/system-auth 文件中存在“auth required pam_tally2.so onerr=fail deny=5 unlock_time=600 even_deny_root root_unlock_time=600
”;
2)经核查,配置并启用了限制非法登录功能,所有用户登录失败5次锁定600秒;
3)经核查,配置并启用登录连接超时及自动退出功能,本地登录超时时间900秒,远程登录超时时间300秒。
c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听。
符合建议项
检查远程管理方式
ps -ef | grep ssh
ps -ef | grep telnet
netstat -tuanp
先查看端口情况,看到不对劲的,立马去看看是不是开了telnet
netstat -tlnp | grep ssh
查看远程管理是否使用SSH方式进行远程管理。
结果记录
经核查,用户通过堡垒机输入账号密码通过SSH协议远程登录服务器,可以防止鉴别信息在网络传输过程中被窃听。
d)应采用两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用动态口令、密码技术或生物技术来实现。
符合建议项
结果记录
经核查,用户在登录操作系统的过程中只使用了口令鉴别技术,未采用动态口令、数字证书、生物技术或设备指纹等鉴别技术对用户身份进行鉴别。
访问控制
应用指南
a)应对登录的用户分配账户和权限。
符合建议项
创建用户,三权分立
cat /etc/passwd
查看目前存在哪些帐户,询问管理员,是否启用访问控制功能,是否依据安全策略控制用户对资源的访问。
ls -l /etc/passwd /etc/shadow /etc/sudoers /etc/group /etc/gshadow /etc/profile /etc/crontab /etc/securetty /etc/ssh/ssh_config /etc/ssh/sshd_config
一、确定当前账户情况
通过查看/etc/passwd、/etc/shadow、/etc/group文件,查看可登录的普通账户有哪些,以及用户组的情况。
1.通过文件来判断:
1.1 /etc/passwd文件:
通过该文件,判断出哪些是普通用户(UID>1000,该设置值在login.defs文件中)、系统用户(UID<1000)和超级用户(UID=0)。
再判断哪些用户不可登录,如shell字段为/sbin/nologin、/bin/false的就不可登录。
通过id命令查看,用法:id [user]
包含用户id,用户组id,附加组id,若不指定用户,则默认显示当前用户基本信息
1.2 /etc/shadow文件:
用户第二字段为*或!!为锁定状态,不允许登录。
结果记录
1)经核查,为用户分配了账户和权限,目前系统内账号包括超级管理员root、系统管理员SysAdmin、安全管理员SecAdmin、审计管理员AudAdmin;
2)经核查,不存在匿名,默认用户只允许超级管理员可以登录。/etc/group权限644,/etc/passwd权限为644,/etc/shadow权限为000,/etc/profile权限为644,/etc/crontab权限为644,/etc/ssh/sshd_config权限为400。
b) 应重命名或删除默认账户,修改默认账户的默认口令。
符合建议项
cat /etc/passwd
cat /etc/shadow
记录没有被禁用的系统默认的用户名
bin、daemon、shutdown、halt、sync、adm、lp、news、uucp、operator、games、gopher
删除多余用户
删除多余用户组
groupdel groupname:adm、lp、news、uucp、games、dip、pppusers、popusers、slipusers
正常情况下Linux默认账户除了root都被禁止登录了,所以我们正常考虑的话就考虑root账户。限制默认账户的方式有很多种,譬如重命名、禁用、降低权限、限制远程访问等等。针对Linux系统,一般不会去重命名或者禁用root,用的比较多的就是限制root账户远程登录。
2、查看远程连接是否
PermitRootLogin no
cat /etc/ssh/sshd_config | grep Root
确认 /etc/ssh/sshd_config 中 PermitRootLogin 参数配置 PermitRootLogin,yes代表允许root远程ssh登录,no代表禁止ssh远程登录
核查
/etc/ssh/sshd_config
cat /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | grep Root
PermitRootLogin no
结果记录
经核查,其他默认用户均已禁用,默认账户超级管理员root的默认口令已修改。查询配置文件/etc/ssh/sshd_config,SSH 远程管理 PermitRootLogin 状态为no,禁止root用户远程登录。
注意
需要重命名root或者禁用删除,但依据 28448-2019,1、2为或的关系,满足一个就给符合
c) 应及时删除或停用多余的、过期的账户,避免共享账户的存在。
符合建议项
确认管理人员与账户之间的对应关系,确认是否存在多人共用统一账户的情况存在。
结果记录
经核查,系统目前只启用root、SysAdmin、SecAdmin、AudAdmin,不存在多余或过期账户,管理员用户与账户之间是否一一对应。
d)应授予管理用户所需的最小权限,实现管理用户的权限分离。
符合建议项
具有最少4个账户(包括一个超管权限账户root),然后对应到人
● 三权分立原则
至少建立系统管理员、安全管理员、审计管理员三种权限帐号。
个人认为,不使用root超级管理员账户,该账户的管理权限应掌握在安全管理员手中,仅上线前用于环境部署工作。
可以参考能力验证给出的权限表
1. 系统管理员
用于管理整个系统,可在 /etc/sudoer 中授予各式各样的权限,但无审计管理的权限,不可中断审计进程及修改审计配置等,且不可威胁到root用户。可授予新增操作员、修改对应文件、服务等的一些操作管理。
例如仅可修改普通用户口令,不可修改root账户口令
2. 安全管理员
负责各类安全策略的制定与落实。包括不限于服务器口令安全策略、备份安全策略、审计安全策略、账户安全策略、防病毒策略、运维安全策略等等。例如:
⚫ 各类设备应划分系统管理员、安全管理员和审计管理员,此外数据库服务器应创建数据库管理员账号;
⚫ 应为每个用户创建账号并分配权限, 禁止出现共享账号。及时停用离职人员账号,避免出现多余账户;
⚫ 用户账户权限分配遵从“最小化”和“必须使用”原则,离岗人员的权限需收回;
⚫ 各类设备应仅允许审计管理员能够查询审计日志,管理日志策略、日志文件和日志进程;
⚫ 配置超时登录机制,登录用户无操作自动退出系统。其中, 关键资产阈值 15分钟, 重要资产阈值 30 分钟, 一般资产阈值 60 分钟。
3. 审计管理员
负责对系统审计日志方面的管理。
例如具有sudo systemctl audit(rsyslog)等进程的管理权限。
对于auidt,syslog轮替规则、审计规则具有配置权限等。
4.操作员
普通权限账户,用于正常的工作,无其他用途。
结果记录
1)经核查,系统进行角色划分,分为超级管理员、系统管理员、安全管理员、审计管理员;
2)经核查,管理用户的权限已经进行分离;
3)经核查,管理用户权限为其工作任务所需的最小权限。
e)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则。
要求解读
操作系统的访问控制策略应由授权主体(例如安全管理员)进行配置,非授权主体不得更改访问控制策略。访问控制策略规定了操作系统用户对操作系统资源(例如文件和目录)具有哪些权限、能进行哪些操作。通过在操作系统中配置访问控制策略,可以实现对操作系统各用户权限的限制。
结果记录
1)经核查,系统由授权主体安全管理员SecAdmin负责配置访问控制策略;
2)经核查,授权主体安全管理员SecAdmin依据安全策略配置了主体对客体的访问规则并统一管理;
3)经测试,系统管理员SysAdmin和审计管理员AudAdmin不可越权访问。
f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级。
符合建议项
依据能力验证官方给出的结果记录描述,该条对于操作系统自主访问控制基本默认符合。
主体为用户级,客体为文件、目录级别。
结果记录
经核查,访问控制策略的控制粒度达到主体为用户级或进程级,客体为文件、数据库表、记录或字段级。查看cat /etc/login.defs中的Umask为077。
g)应对敏感信息资源设置安全标记,并控制主体对有安全标记信息资源的访问。
要求解读
敏感标记是强制访问控制的依据,主体和客体都有,存在形式多样,既可能是整型数字,也可能是字母,总之,它表示主体和客体的安全级别。敏感标记由强认证的安全管理员设置。安全管理员通过对重要信息资源设置敏感标记来决定主体以何种权限对客体进行操作,实现强制访问控制。
在操作系统能够对信息资源设置敏感标记的前提下,应严格按照安全策略控制用户对相关资源的操作。
这条应该是作为做等保人员比较难测评的一条条款了,其实做了这么久,也不太明白真实符合的情况是什么样的,因为客户基本不可能会去自己配置。初级书中叫我们去查看 /etc/selinux/config 这个文件,这里可以使用 sestatus 命令查看,确认状态为 enabled,再确认具体的工作模式
结果记录
经核查,系统未对主体、客体设置安全标记。
安全审计
基本要求
测评要求
应用指南
a) 应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计。
符合建议项
1、检查系统是否开启审计功能:
systemctl is-enabled auditd
Syslog and audit status
systemctl status auditd
systemctl status rsyslog
service auditd status
service rsyslog status
2、是否审核了审计功能启用前的进程:
grep "^\s*linux" /boot/grub2/grub.cfg
3、查看audit.rules中是否记录了修改日期和时间信息的事件(time-change)、修改用户/组信息事件(identity)、修改系统网络环境事件(system-locale)、记录用户登录退出事件(logins)、会话初始化信息(session)、访问控制权限修改事件(perm_mod)、未经授权的文件访问失败事件(access)、记录文件被重命名或修改属性、系统管理员操作(action)、内核模块的加载和卸载(modules)等等。
cat /etc/audit/audit.rules
ausearch -ts today
4、若有第三方审计工具或系统则记录其运行状态是否正常。
/var/log/messages 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
ls -l /var/log/secure /var/log/audit/audit.log /var/log/cron /var/log/lastlog /var/log/messages /etc/rsyslog.conf /etc/audit/auditd.conf
结果记录
1)经核查,系统开启了安全审计功能,系统审核策略:rsyslog.service和auditd.service均为active (running) ,可保证6个月留存期;
2)经核查,部署了外部Syslog日志服务器收集审计日志,审计范围覆盖到每个用户;
3)经核查,部署了外部Syslog日志服务器收集审计日志,对重要的用户行为和重要安全事件进行审计。
b) 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息。
符合建议项
**1. 查看当前系统时间:**date
确认当前系统时间是否为北京时间。
2. 查看日志信息(默认符合)
ausearch -i |more
在/var/log/目录下的文件中查看即可,如message日志
结果记录
经核查,Linux日志包括类型、信息、pid、uid、auid、ses、具体信息、用户名、地址、终端、结果。同时部署外部Syslog日志服务器收集审计日志,审计记录信息包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息。
c) 应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等。
1.确认本地审计记录文件权限
日志文件权限不高于644
2.是否定期备份
确认是否将syslog、audit日志定期备份到日志审计设备中(可以问业主如果没做外发有无设置日志定期保存到别的地方,如果是初测一般都没做)
3.查看轮替规则
若未定期备份审计记录,确认各日志的轮替规则
syslog配置文件 /etc/logrotate.conf
weekly #每周清理一次日志文件
rotate 4 #保存四个轮换日志
create #清除旧日志的同时,创建新的空日志文件
dateext #使用日期为后缀的回滚文件 #可以去var/log目录下看看
include /etc/logrotate.d #包含/etc/logrotate.d目录下的所有配置文件
结果记录
1)经核查,采取了保护措施对审计记录进行保护,日志数据本地保存,覆盖周期不小于6个月;
2)经核查,部署了外部Syslog日志服务器收集审计日志,对审计记录进行定期备份,每6个月打包一次审计记录。
d) 应对审计进程进行保护,防止未经授权的中断。
符合建议项
1. 判断哪些用户可以对审计进程进行操作
默认情况下,仅root权限账户可中断审计进程
查看sudo文件配置情况:cat /etc/sudoers,若存在以下配置,则能中断审计进程
结果记录
经核查,通过系统管理员SysAdmin和安全管理员SecAdmin无法中断审计进程。同时部署了外部Syslog日志服务器收集审计日志,对审计记录进行定期备份,每6个月打包一次审计记录。
入侵防范
基本要求
测评要求
应用指南
a) 应遵循最小安装的原则,仅安装需要的组件和应用程序。
符合建议项
查询linux中安装的程序,一般使用yum list installed 或者rpm -qa,关键是linux中随随便便都安装得有几百个组件,而且很多组件都是存在着依赖关系。你很难或者至少很难快速的判断某组件到底是必需的还是非必需的,而被测评单位方的人也一样,他也不可能知道。
感觉从上述命令中非常难下手,稍微明显一些的,可以查看开机自启服务
systemctl list-unit-files | grep enabled
有些可能明显用不到的,比如web应用服务器上留有当时测试的mysql 程序,后续项目更新升级后使用数据库服务器,而原先的就忘了卸载删除。以及一些明显有问题的服务,例如 telnet。
1.查看是否启用多余的inetd.Services服务:
chkconfig --list
Chargen services、daytime services、Discard wervices、Echo services、Time services
以上服务均为Debug和测试时使用。
systemctl | grep running
是否对安全隐患的漏洞进行补丁修补或指定补丁策略。
2.查看已安装组件和应用程序
yum list installed
结果记录
1)经核查,服务器遵循最小安装原则;
2)经核查,服务器未安装非必要的组件和应用程序。
b) 应关闭不需要的系统服务、默认共享和高危端口。
1. 服务
对于组件、服务、进程、端口而言,它们之间是存在着关系的:安装程序–>启动相关服务–>启动相关进程–>监听相关端口。而且,一个程序(组件)可能有数个服务,而一个服务也可能实际启动了数个进程,当然一个进程应该就对应一个端口。
● Centos 6.x使用 service --status-all 来查看服务
● Centos 7.x 使用 systemctl 命令来查看服务
可以根据类型列出单元 systemctl list-units --type service
估计也看不太懂,具体哪些服务是多余的,看到有明显不符合的,例如telnet 之类的就给不符合吧
2. 端口
使用命令:netstat -tuanp 查看系统中监听的端口以及对应的进程,进行判断哪些是多余的服务、端口,一般默认装机完毕25、111为多余端口,对应的服务也就是多余的。
3. 共享情况
Linux 默认共享是没有的,但是可以安装对应的共享服务
符合建议项
1、检查:
systemctl -a
查看
CUPS、Rsh services、Talk、Telnet、tftp、、IMAP、POP3、SNMP、DHCP、rsync、NIS
等等服务应该关闭。
systemctl | grep running
ss -ntlp
ss -ntlpu
查看是否开启端口:
21、23
1. Telnet服务(默认端口23):telnet是一个不安全的网络协议,会以明文形式传输用户名和密码。建议关闭telnet服务,使用更安全的SSH服务。
2. FTP服务(默认端口21):FTP也是一个不安全的协议,密码以明文形式传输。建议关闭FTP服务,并使用更安全的SCP或SFTP替代。
数据库端口是否修改默认端口号:
1433、1521、3306、6379、5432、27017
等等。
MySQL: 3306
PostgreSQL: 5432
Oracle Database: 1521
SQL Server: 1433
MongoDB: 27017
Redis: 6379
MariaDB: 3306
Elasticsearch: 9200 (HTTP), 9300 (TCP)
结果记录
1)经核查,服务器未开启非必要的系统服务和默认共享;
2)经核查,服务器不存在非必要的高危端口,仅开启SSH协议(22端口)、https服务(443端口)。
c) 应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制。
符合建议项
1、查看服务器是否通过
hosts.allow/hosts.deny(cat /etc/hosts.allow、cat /etc/hosts.deny)
或ssh中Listenaddress(cat /etc/ssh/sshd_config)、或iptables(iptables -L -v -n)限制可接入的网络地址。
/etc/hosts.deny 和 /etc/hosts.allow 是 Linux 系统中用于控制网络访问的配置文件。
/etc/hosts.deny 文件允许你指定哪些客户端将被拒绝访问系统。你可以在这个文件中使用 TCP Wrappers 语法来配置访问控制规则。
修改/etc/hosts.allow和/etc/hosts.deny 这两个文件,把需要通过的IP写在/etc/hosts.allow 文件里
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!