AWD攻防赛实战指南:Windows与Linux系统防御技巧
1. AWD攻防赛基础认知从规则到实战定位第一次参加AWDAttack With Defense线下攻防赛时我盯着大屏幕上实时跳动的分数榜完全摸不着头脑。这种赛制与传统CTF最大的区别在于——你不仅要像猎人一样寻找漏洞还得像建筑师一样加固自己的堡垒。典型的AWD比赛会为每支队伍分配相同的初始环境通常包含Web服务、数据库、后台应用等选手需要同时完成三项任务修复己方漏洞防御、攻击其他队伍服务攻击、维持服务正常运转运维。记分板上的排名往往每分钟都在剧烈波动这种肾上腺素飙升的体验正是AWD的魅力所在。从技术栈来看比赛环境通常横跨Windows和Linux两大平台。去年华东区某次比赛中我们遇到的场景就是一个运行在Windows Server 2019上的Redis缓存服务配合Ubuntu 20.04托管的Python Flask应用。这种混合架构要求选手必须掌握双系统下的攻防技巧。比如在Windows平台需要熟悉注册表加固、服务权限控制而Linux侧则要精通iptables规则、SUID文件排查等操作。关键认知AWD不是单纯的漏洞挖掘比赛而是对渗透测试、系统加固、应急响应等综合能力的极限压力测试。根据我的观察最终胜出的队伍往往在防御端做得更出色。2. Windows系统攻防实战手册2.1 服务加固以Redis为例在Windows平台部署的Redis服务堪称高危重灾区。去年我们遭遇的典型攻击链是这样的攻击者通过未授权访问写入webshell → 利用redis的config命令修改持久化路径 → 写入恶意dll实现权限维持。针对这种情况我总结出四层防御策略网络层隔离修改默认6379端口并在防火墙设置入站规则实际命令示例New-NetFirewallRule -DisplayName RedisRestrict -Direction Inbound -LocalPort 6380 -Protocol TCP -Action Allow -RemoteAddress 192.168.1.0/24权限最小化创建专用低权限账户运行服务net user redis_runner Pssw0rd /add sc config Redis binpath \C:\redis\redis-server.exe\ --service-run --requirepass YourStrongPassword obj .\redis_runner password Pssw0rd关键配置硬化必须修改的redis.conf参数rename-command CONFIG rename-command FLUSHDB protected-mode yes日志监控配置事件查看器自定义筛选器监控以下事件ID4688: 新进程创建4663: 文件访问尝试4624/4625: 登录事件2.2 系统级防御技巧在紧张的比赛环境中快速关闭危险功能往往能争取宝贵时间。这几个命令建议写入你的应急脚本# 关闭危险服务 Stop-Service -Name RemoteRegistry -Force Set-Service -Name RemoteRegistry -StartupType Disabled # 禁用WScript.Shell组件 reg add HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings /v Enabled /t REG_DWORD /d 0 /f # 限制IPC$共享 reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v RestrictNullSessAccess /t REG_DWORD /d 1 /f针对Windows主机的信息收集我习惯使用自研的PS1脚本快速提取以下关键信息当前用户权限和组关系计划任务列表重点关注高权限任务已安装的第三方软件版本网络共享会话状态3. Linux系统防御体系构建3.1 权限控制黄金法则某次比赛中对手通过SUID提权在最后十分钟逆转比分这让我深刻认识到权限控制的重要性。现在我的检查清单包含SUID/SGID文件审计find / -perm -4000 -type f -exec ls -ld {} \; 2/dev/null find / -perm -2000 -type f -exec ls -ld {} \; 2/dev/null对非必要文件立即取消特殊权限chmod u-s /usr/bin/xxd # 示例移除xxd的SUIDsudoers精细化控制比赛环境中建议注释掉以下危险配置# Defaults !authenticate # %admin ALL(ALL) ALL改为精确到命令级别的授权your_username ALL(root) /usr/bin/systemctl restart apache2文件属性加固关键配置文件添加不可修改属性chattr i /etc/passwd chattr i /etc/ssh/sshd_config3.2 网络层防御策略iptables规则配置是Linux防御的核心。这套经过实战检验的规则模板值得收藏#!/bin/bash # 清空现有规则 iptables -F iptables -X # 默认策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 允许本地回环 iptables -A INPUT -i lo -j ACCEPT # 允许已建立的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 开放SSH限制源IP更安全 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许ICMP避免被判定为宕机 iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/s -j ACCEPT # 防止SSH暴力破解 iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --update --seconds 60 --hitcount 3 -j DROP iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --set -j ACCEPT # 保存规则根据发行版选择 iptables-save /etc/iptables.rules针对Web应用的防护建议添加WAF规则。使用mod_security时这个规则可防御常见的注入攻击SecRule ARGS rx (union.*select|sleep\(\d\)|benchmark\() \ id:1001,phase:2,deny,status:403,msg:SQLi Attempt4. 攻防兼备的实战技巧4.1 自动化监控体系在比分咬紧的比赛中手动监控根本不现实。这套基于Shell的监控脚本帮我多次逆转局势#!/bin/bash # 文件完整性监控 MONITOR_FILES(/var/www/html/index.php /etc/passwd) for file in ${MONITOR_FILES[]}; do current_md5$(md5sum $file | awk {print $1}) if [ $current_md5 ! $(cat /var/log/file_hashes.log | grep $file | awk {print $1}) ]; then echo [!] $file modified! | mail -s File Alert adminexample.com # 自动恢复备份 cp /backup/$file $file fi done # 进程监控 ps aux | grep -E (nc|socat|perl|python) | grep -v grep \ echo [!] Suspicious process found /var/log/attack.log # 网络连接监控 netstat -antp | awk $4 ~ /:80$/ $5 ~ /^(10.20|192.168)/ {print $5} | \ sort | uniq -c | sort -nr /var/log/conn_monitor.log配合crontab每分钟执行一次* * * * * /root/monitor.sh /dev/null 214.2 反制技巧汇编当发现被入侵时这些反制手段曾帮我成功溯源伪造蜜罐文件在/web目录下创建假的管理员密码文件?php header(HTTP/1.1 301 Moved Permanently); header(Location: http://your-ip/tracker.php?src.$_SERVER[REMOTE_ADDR]); ?SSH蜜罐记录修改sshd_config增加额外日志LogLevel VERBOSE Match Address 192.168.1.0/24 ForceCommand echo Login attempt by %u from %h at %t /var/log/ssh_honeypot.log网络层反制对攻击源IP实施TCP连接干扰iptables -A INPUT -s attacker_ip -p tcp --tcp-flags ALL RST,ACK -j DROP5. 赛后复盘与能力提升比赛结束后的复盘往往比参赛本身更有价值。我建立的checklist包含漏洞根源分析被利用的漏洞在CVSS评分中的哪个维度失分最多漏洞是否存在于第三方组件版本号是否已标记为危险防御时间线重建从漏洞暴露到实际被攻击的时间窗口是多少监控系统是否在第一次异常时就发出警报工具链优化哪些操作可以通过脚本自动化现有的防御工具是否存在误报/漏报建议搭建本地演练环境推荐使用VirtualBoxVMware混合架构重点模拟以下场景权限维持检测测试日志覆盖攻击模拟分布式拒绝服务防御内存马注入与检测最后分享一个血泪教训永远为关键服务准备两套备份方案。有次比赛我们的MySQL被drop database后因为备份脚本写错路径导致恢复失败。现在我的备份策略遵循3-2-1原则——至少3份备份2种不同介质其中1份异地存储。