加固
国标
GB/T25058 信息安全技术 信息系统安全等级保护实施指南
GB/T22240 信息安全技术 信息系统安全等级保护定级指南
GB/T22239 信息安全技术 网络安全等级保护基本要求
GB/T25070 信息安全技术 网络安全等级保护安全设计技术要求
GB/T28449 信息安全技术 网络安全等级保护评测过程指南
版本升级
windows有弹框,linux没提示
关闭端口服务
端口能不开就不开,最小安装原则
修改配置项
修改安全配置,参数,可以为网络和 应用提供必要的安全防护
主机和网络ACL策略
iptables,对于流量进行严格的控制,白名单
修改代码
部署设备防护
linux加固方向
账号管理和认证授权
修改目录权限
chmod 750 directory
chown username:groupname directory
chmod 644 /etc/passwd chmod 600 /etc/shadow chmod 644 /etc/group
chmod -R go-w /etc
|
visudo
username host=/usr/sbin/useradd, !/usr/bin/vim /etc/hosts,!/usr/bin/passwd root
|
检查高权限文件
.find / -type f \( -perm -00007 \) -a -ctime -1 -exec ls -lg {} \; ctime -1 :一天内状态改变过的项 mtime:内容修改 atime:被访问
|
禁止任何人su为root账户
/etc/pam.d/su auth sufficient /lib/security/pam.rootok.so auth required /lib/security/pam_wheel.so group=wheel
gpasswd -a username wheel
|
去除不需要的账号,修改默认账号shell环境
userdel -r username groupdel groupname passwd -l username
usermod -s /sbin/nologin username
|
限制超级管理员远程登录
vi /etc/ssh/sshd_config permitRootLogin yes ↓ permitRootLogin no
systemctl restart sshd
|
去掉所有suid和sgid
# 防止提权 #查找具有suid和sgid的对象 find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \; find / -type f \( -perm -04000 -o -perm -02000 \) |xargs -l {} ls -lh {} chmod ugo-s 对象
|
删除root以外UID为0的用户
awk -F: '($3 == 0) { print $1 }' /etc/passwd
|
删除账户
或者编辑passwd与shadow文件
不应存在位于高权组的账户
grep -v ^
awk -F: '$3>500{print $1}' /etc/passwd |xargs -I {} grep {} /etc/group
grep -v "/sbin/nologin" /etc/passwd | awk -F: '{print $1}' | xargs -I {} grep {} /etc/group
|
缩短默认密码生存周期
vi /etc/login.defs PASS_MAX_DAYS 90 PASS_MIN_DAYS 0 PASS_MIN_LEN 8 PASS_WARN_AGE 7
|
设置密码强度策略
目的:规范使用高强度密码,延长被爆破的时间
vi /etc/pam.d/system-auth password requisite, pam_cracklib.so try_first_pass retry=3 dcredit=-1 1credit=-1 ucredit=-1 ocredit=-1 minclass=3 minlen=8
authconfig --passminlen=8 --update authconfig --enablereqlower --update authconfig --enablerequpper --update authconfig --enablereqdigit --update authconfig --enablereqother --update
在文件/etc/security/pwquality.conf
|
设置强制密码历史
/etc/pam.d/system-auth password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
|
设置账户锁定策略
/etc/pam.d/system-auth /etc/pam.d/sshd /etc/pam.d/login auth required pam_tally2.so deny=6 unlock_time=300 even_deny_root root_unlock_time=60
pam_tally2 --user zhangsan --reset
|
修改umask值
/etc/profile /etc/csh.login /etc/csh.cshrc /etc/bashrc
umask 027
|
限制硬件资源
vi /etc/security/limits.conf soft core 0 hard core 0 hard rss 5000 hard nproc 20
|
在文件末尾加入信息
session required /lib64/security/pam_limit.so
|
日常收集进程数使用
ps aux | grep httpd | wc -l
|
启用日志功能,使用日志服务器
vi /etc/rsyslog.conf $ModLoad imudp $UDPServerRun 514 $template Remote,"/var/1og/%$YEAR%-%$MONTH%-%$DAY%/%fromhost-ip%.log" :formhost-ip,isequal,"127.0.0.1" ?Remote
systemctl restart rsyslog
*.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure
*.info;mail.none;authpriv.none;cron.none @192.168.2.1 authpriv.* @192.168.2.1
systemctl restart rsyslog
ls -al /var/log/ chmod -R 640 /var/log
|
设置关键文件底层属性
chattr +a /var/log/message chattr +i /var/log/message.* chattr +i /var/etc/shadow chattr +i /var/etc/passwd chattr +i /var/etc/group
|
对用户使用ls,rm设置别名
目的,让ls随时看清文件属性
让rm需要确认后删除目标实施方法
vi ~/.bashrc alias ls="ls -alh" alias rm="rm-i"
|
对开放目录设置粘滞键
# 目的,允许小规模开放目录,用户作为暂存目录使用 chmod +t /tmp/
|
通讯协议
使用加密的远程管理ssh
vi /etc/ssh/sshd_config PermitRootLogin no Port 20202 Protocol 2 systemctl restart sshd
|
设置访问控制列表
vi /etc/hosts.deny ALL:ALL
vi /etc/hosts.allow sshd: <来访者IP地址>
|
不响应ICMP请求
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
|
禁止处理无源路由
sysctl -n net.ipv4.conf.all.accept_source_route echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
|
打开syn队列 syn cookie
# 缓解syn flood攻击 syn洪水 vi /etc/sysctl.conf net.ipv4.tcp_syncookies = 1 sysctl -p
|
防御syn flood攻击优化
sysctl net.ipv4.tcp_max_syn_backlog
sysctl -w net.ipv4.tcp_max_synn_backlog ="2048"
|
FTP使用黑白名单限制
/etc/ftpusers root daemon bin sys adm lp uucp nuucp listen nobody noaccess nobody4
/etc/user_list userlist_deny=NO userlist_enable=YES
|
设置FTP上传的文件权限
write_enable=YES local_umask=022 anon_umask=022
|
检查账户目录中是否存在高危文件.netrc、.rhosts
for DIR in 'cut -d":" -f6 /etc/passwd'; do if [ -e $DIR/.netrc ]; then echo "$DIR/.netrc" fi done
|
FTP设置banner信息
/etc/vsftpd.conf ftpd_banner="Authorized users only. All activity may be monitored and reported."
|
配置可信任的NTP服务器,并确保服务开启
server X.X.X.X
systemctl enable ntpd systemctl status ntpd
|
固化常用DNS解析
vi /etc/hosts 61.59.123.22 www.baidu.com
|
关闭telnet
vim /etc/xinetd.d/telnet disable=yes
|
补丁管理
补丁装载
# 最好去官方找rpm包,安装补丁,下载时一定要进行签名校验 yum update # http://www.redhat.com/corp/support/errata rpm -Fvh rpm包 # 测试环境测试完,在安装
|
服务进程与启动
关闭NFS服务
ps aux | grep -E "lockd|nfsd|statd|mountd"
systemctl list-unit-files |grep nfs systemctl disable nfs-client.target
|
关闭无用服务
systemctl list-unit-files |grep enable
systemctl stop < 服务名> systemctl disabled <服务名>
|
建议关闭的服务
rpm -qa | grep -E "^amanda|^chargen|^chargen-udp|^cups|^cups-lpd|^daytime|^daytime-udp|^echo|^echo-udp|^eklogin|^ekrb5-telnet|^finger|^gssftp|^imapl^imaps|^ipop2|ipop3|^klogin|^krb5-telnet|^kshell|^ktalk|^ntalk|^rexec|^rlogin|^rsh|^rsync|^talk|^tcpmux-server|^telnet|^tftp|^time-dgram|^time-stream|^uucp"
|
banner与自动注销
隐藏系统提示信息
cat /etc/issus
echo > /etc/issus
|
设置登录超时注销
vi /etc/profile HISTFILESIZE=50
source /etc/profile
|
跳过grup菜单
# 防止在grup菜单对引导过程进行修改 # 修改grup配置文件 vi /boot/grup2/grup.cfg # 修改等时 set timeout=0
|
关闭ctrl+alt+del重启功能
vi /usr/lib/systemd/system/ctrl-alt-del.target
|
windows加固方向
账号管理与认证授权
按用户类型分配账户
打开本地用户和计算机管理器 打开运行,输入lusrmgr.msc 根据用户要求将账号加入功能组 右击账户-> 属性->更改隶属于 右击功能组->属性->成员
|
清理系统无用账户
打开本地用户和计算机管理器 打开运行,输入lusrmgr.msc 删除或者锁无关账号(删除操作不可逆) 右击账户->删除 右击账户->属性->账户已禁用
|
重命名administrator,禁用guest
打开本地用户和计算机管理器 打开运行,输入lusrmgr.msc 为管理员administrator账户改名 右击administrator->重命名->属性->全名 禁用来宾guest 右击guest ->属性->账户已禁用
|
设置密码策略
打开本地安全策略 打开运行,输入secpol.msc 找到密码策略 账户策略->密码策略 修改默认值 密码必须符合复杂性要求:禁用-> 启用 密码长度最小值: 0->8 密码最短使用期限: 0天 密码最长使用期限:42天->90天 强制密码历史:1->5 用可还原的加密来存储:禁用
|
配置账户锁定策略
打开本地安全策略 打开运行,输入secpol.msc 找到账户锁定策略 账户策略->账户锁定策略 账户锁定时间: 未定义->30分钟 账户锁定阈值: 0->6 复位账户锁定计数器: 未定义->30分钟
|
远程关机权限设置
打开本地安全策略 打开运行,输入secpol.msc 找到用户权限分配 本地策略->用户权限分配 关闭系统策略中,只保留administrator组 从远程系统强制关机 拒绝本地登录 拒绝从网络访问这台计算器
|
取得文件或对象的所有权设置
打开本地安全策略 打开运行,输入secpol.msc 找到用户权限分配 本地策略->用户权限分配 取得文件或对象的所有权策略,只保留administrator组
|
设置从本地登录此计算机
打开本地安全策略 打开运行,输入secpol.msc 找到用户权限分配 本地策略->用户权限分配 从本地登陆此计算机策略,加入授权用户
|
日志配置
打开本地安全策略 打开运行,输入secpol.msc 找到审核策略 本地策略->审核策略 修改审核策略 "审核策略更改" 设置为"成功"和"失败"都要审核 "审核对象访问" 设置为"成功"和"失败"都要审核 "审核目录服务器访问" 设置为"成功"和"失败"都要审核 "审核特权使用" 设置为"成功"和"失败"都要审核 "审核系统事件" 设置为"成功"和"失败"都要审核 "审核账户管理" 设置为"成功"和"失败"都要审核 "审核过程追踪" 设置为"成功"和"失败"都要审核
|
日志记录策略设置
进入事件查看器 打开运行->eventvwr.msc 在日志属性中设置日志大小不小于1024KB,设置当达到最大日志尺寸时,按需要改写事件
|
IP协议安全
启用TCP/IP筛选
# 过滤掉不必要的端口,提高网络安全性 运维人员列出业务所需端口 打开本地连接 控制面板->网络连接->本地连接 找到高级TCP/IP设置 右击本地连接->internet协议属性->高级TCP/IP设置 在选项的属性中启用网络连接的tcp/IP筛选,是开放业务协议端口
|
开启系统防火墙
运维人员列出业务所需端口 打开本地连接中的防火墙 控制面板->网络连接->本地连接 在高级选项中设置启用windows防火墙 设置例外 只允许业务端口接入网络
|
设置空闲超时锁定系统
进入控制面板->显示->屏幕保护程序 启用屏幕保护程序,设置等待时间为5分钟,启用在恢复时使用密码保护功能
|
设置网络服务挂起时间
打开本地安全策略 打开运行,输入secpol.msc 打开安全选项 本地策略—>安全选项 "microsoft网络服务器"设置"在挂起会话之前所需空闲时间"为5分钟
|
关闭默认共享
打开注册表编辑器,编辑和新建键值 打开运行->regedit.msc 展开lsa目录 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 调整Restrictanonymous键值为1 建两个DWORD值分别命名为AutoShareWks和AutoShareServer
|
设置共享文件夹权限
进入系统工具 控制面板->管理工具->计算机管理 进入系统工具->共享文件夹 查看每个文件夹的共享权限并按需求更改 在共享权限中删除everyone动态组
|
漏洞管理
安全系统补丁
部署wsus服务器 从microsoft update下载补丁 在测试机上安装补丁后测试业务运行情况 使用wsus服务器内网分发补丁
|
安装和更新杀毒软件
在服务器上安装最新版企业防病毒软件的服务端 使用C/S架构部署企业版防病毒软件 制定统一安全查杀规则
|
windows的服务
关闭无用服务
打开服务管理器 打开运行->services.msc 关闭禁用服务 右击无关服务->属性->启动类型(禁用)->运行状态->停止 系统必须服务见附表
|
关闭无用自启动项
# 目的: 减少开机自启动服务和软件,提高性能和安全性 打开微软控制台 打开运行->msconnfig 在启动选项卡中去掉多余的启动项的"√"
|
关闭windows自动播放功能
打开组策略编辑器 打开运行->gpedit.msc 找到策略所在 计算机配置->管理模板->系统->设置 关闭自动播放->已启用
|
应急
特征:文件名 找到直接删,
时间:从文件时间入手,去匹配业务日志里面的时间段
流量:态势感知
如果是免杀,按照创建时间找,如果改时间,对比哈希值
或者快照,直接回档
日志
/var/log/messages
/var/log/syslog
/var/log/auth.log
/var/log/kern.log
/var/log/daemon.log
/var/log/boot.log
/var/log/cron
/var/log/dmesg
/var/log/maillog
|
查找 nginx 访问日志
sudo cat /var/log/nginx/access.log
|
从日志中查找404错误
sudo awk '$9 == 404 || $7 == 404 {print}' /var/log/nginx/access.log
|
查找大量出现404错误的IP地址
sudo awk '$9 == 404 || $7 == 404 {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
|
防火墙阻止192.168.1.100访问
sudo iptables -I INPUT -s 192.168.1.100 -j DROP
|
查看ssh登录错误日志
sudo cat /var/log/auth.log
|
查找错误登录IP地址
sudo cat /var/log/auth.log | grep 'Failed password' | awk ' {print $(NF-3)}' | sort | uniq -c | sort -rn
|
使用 ufw 屏蔽攻击者的 IP 192.168.1.100
sudo ufw insert 1 deny from 192.168.1.100 to any
|
查看ssh登录成功日志
sudo cat /var/log/auth.log | grep sshd
|
出现在日志中的用户都是经过ssh登录的,还可以用grep过滤出失败的登录日志
sudo cat /var/log/auth.log | grep sshd | grep 'Failed password'
|
查看系统日志,筛选ssh登录记录
sudo cat /var/log/syslog | grep sshd
|
获取登录者的IP地址,以下命令会显示所有失败的登录尝试并指出攻击者的IP地址
sudo cat /var/log/auth.log | grep 'sshd.*Failed password' | awk '{print $11}' | sort | uniq -c | sort -n
|
使用netstat 验证获取到的ip是否是攻击者ip
sudo netstat -anp | grep <IP address>
|
后门排查
内存马排查
查找所有java进程
查看每个java进程的所有者
查看java进程参数
查看java进程使用的所有类和包
webshell查杀
检查网站目录文件,找所有的.php和.sh文件,并且查找eval函数的使用情况
find /var/www/public -type f \( -iname "*.php" -or -iname "*.sh" \) -exec grep -iRl "eval" {} \;
|
查找后门
sudo apt-get install chkrootkit rkhunter sudo chkrootkit sudo rkhunter --check
|
查找异常文件,最近被修改过的文件
sudo find / -type f -mtime -7 2>/dev/null
|
查找web服务根目录下比较大的文件和目录
sudo du -ah /var/www/ | grep G
|
找出对用户可写的文件和目录
sudo find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -ls
|
找出可执行文件设置了setuid和setgid权限的文件
sudo find / -perm /6000 -type f -exec ls -la {} 2>/dev/null \;
|
监控网络连接
sudo netstat -tnpa | grep ESTABLISHED
|
看日志文件,wenshell可能被隐藏到日志中
sudo cat /var/log/auth.log | grep -i sshd
|
环境变量
检查当前环境变量
检查系统环境变量,在/etc/environment中
sudo cat /etc/environment
|
检查shell配置文件,确保每个文件没有添加可疑目录或者路径
/.bash_profile、/etc/bash.bashrc、/etc/environment
|
检查LD_PRELOAD变量
排查系统异常账户
查看所有系统账户
查看root账户信息
sudo cat /etc/passwd | grep 'root'
|
检查sudo访问权限
查看系统特权账户,linux有一些默认特权用户,wheel、adm、root等,
sudo cat /etc/group | grep -E "root|adm|lp|wheel"
|
检查ssh登录日志
sudo cat /var/log/auth.log | grep ' sshd'
|
检查登录历史
检查计划任务
sudo ls -alR /etc/cron.* sudo ls -alR /var/spool/cron/crontabs
|