2022中职网络安全赛项AB模块:加固与取证实战拆解

📅 发布时间:2026/10/4 3:11:46
2022中职网络安全赛项AB模块:加固与取证实战拆解
简介这份资源是2022年全国职业院校技能大赛中职组网络安全竞赛试题的A、B模块解析答案面向备战职业院校技能大赛的中职学生、指导教师以及需要系统梳理网络安全实操要点的学习者。内容围绕基础设施设置与安全加固、网络安全事件响应与数字取证调查两大模块展开涵盖登录安全加固、数据库安全策略、流量完整性、事件监控、防火墙策略、IP协议安全配置以及主机发现与信息收集等典型任务并附有具体操作命令与配置思路便于对照赛题复盘与查漏补缺。资源包内共1个docx文档压缩包大小约2.74MB以文字解析形式呈现适合作为赛前突击与日常训练的参考材料。目前已有3936人学习下载可为参赛者提供较为完整的模块化答题参考与排错方向。1. 2022年中职组网络安全赛项AB模块从赛题拆解到加固复现2022年全国职业院校技能大赛中职组网络安全竞赛的AB模块是很多中职指导老师和备赛学生反复翻出来研究的经典赛题。它不像纯CTF那样只考一道flag而是把基础设施安全加固和数字取证两条线拧在一起A模块偏防守要求你按加固清单把一台有漏洞的靶机改到合规B模块偏取证给你一份流量包或磁盘镜像让你还原攻击路径、提取证据。这套题放到今天依然有参考价值因为企业里做等保整改、应急响应的日常干的就是这两件事。如果你正在带学生备赛或者自己想从CTF入门转向实际的安全运维这套AB模块的拆解思路能帮你把“比赛拿分”和“干活能用”接上。下面我按自己带队的经验把A模块加固和B模块取证分开讲透中间穿插当年踩过的坑。2. A模块基础设施安全加固从评分点倒推操作顺序2.1 先看懂加固清单里的隐藏优先级A模块的题目通常给一张加固要求表比如“关闭不必要的服务”“修改默认端口”“设置密码策略”“配置防火墙规则”。很多学生上来就从第一条开始做结果做到一半发现后面要求重启服务前面改的配置被覆盖了。我的习惯是先通读整张表把操作分成三类第一类是改配置文件后需要重启服务才生效的比如SSH、Web服务第二类是即时生效但可能影响后续连接的比如防火墙规则、账户锁定策略第三类是纯检查项比如查看日志、确认版本。正确的顺序是先做第三类摸清现状再做第一类改配置但不重启接着做第二类加访问控制最后统一重启服务并验证。这样能避免把自己关在门外——当年有个学生先改了防火墙默认拒绝所有结果SSH断连只能重装靶机。具体到命令层面以CentOS靶机为例检查当前监听端口用ss -tlnp看服务状态用systemctl list-unit-files --typeservice | grep enabled。改SSH端口时先备份cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak再改Port字段然后sshd -t测试语法最后才systemctl restart sshd。密码策略改/etc/login.defs和/etc/pam.d/system-auth注意PAM模块的pam_pwquality.so参数要跟题目要求对齐比如minlen10、dcredit-1、ucredit-1。防火墙用firewalld的话firewall-cmd --permanent --add-rich-rule比直接改zone更可控加完记得--reload。2.2 用脚本批量做基线检查别一条条手敲比赛时间紧手敲命令容易漏。我一般会提前准备一个基线检查脚本把常见检查项写成函数现场根据题目要求勾选执行。下面这个脚本覆盖了账户、服务、端口、文件权限四类检查输出结果直接对照评分表。#!/bin/bash # 基线检查脚本输出当前系统安全状态供对照加固要求 echo 1. 空密码账户检查 awk -F: ($2){print $1} /etc/shadow echo 2. UID为0的非root账户 awk -F: ($30 $1!root){print $1} /etc/passwd echo 3. 监听端口列表 ss -tlnp | awk NR1{print $4, $6} echo 4. 危险服务状态 for svc in telnet vsftpd rsh; do systemctl is-active $svc 2/dev/null echo $svc 正在运行 done echo 5. 关键文件权限 ls -l /etc/passwd /etc/shadow /etc/ssh/sshd_config脚本逻辑说明第一段用awk直接读/etc/shadow第二字段为空的行这是最准的空密码检测方式比passwd -S逐用户查快。第二段找UID为0的非root账户这是提权后门常见手法。第三段ss -tlnp列出所有TCP监听awk取地址和进程名方便对照题目要求关闭的端口。第四段循环检查telnet、vsftpd、rsh这三个比赛常考的危险服务。第五段看关键文件权限/etc/shadow必须是000或400/etc/passwd是644sshd_config是600。参数上注意如果靶机没装ss命令换成netstat -tlnp但netstat在新系统里可能被移除所以优先用ss。2.3 Web服务加固Nginx和Apache的常见考点A模块里Web加固几乎必考2022年那套题就涉及Nginx的目录遍历、版本信息泄露、HTTP方法限制。Nginx加固核心是改nginx.conf和站点配置文件。隐藏版本号在http块加server_tokens off;。禁止目录遍历在location里加autoindex off;。限制HTTP方法用if ($request_method !~ ^(GET|POST)$ ) { return 405; }。另外要删掉默认的index.html和测试页面防止信息泄露。Apache的话改ServerTokens Prod和ServerSignature Off在httpd.conf里用Directory块加Options -Indexes用LimitExcept限制方法。改完配置一定要用nginx -t或httpd -t测试语法然后reload。验证时用curl -I http://靶机IP看响应头里Server字段是否只剩nginx不带版本号用curl -X DELETE看是否返回405。这里有个坑有些题目要求同时加固Nginx和Apache但两个服务可能监听不同端口改之前先用ss -tlnp确认端口归属别改错文件。3. B模块数字取证流量包和磁盘镜像的解题路径3.1 流量取证先做协议分层别一上来就翻字符串B模块的数字取证通常给一个pcap文件要求回答攻击者IP、攻击类型、被利用的漏洞、提取到的敏感数据。新手容易直接strings搜flag但比赛题往往把关键信息藏在协议交互里。我的流程是先用capinfos看包的基本信息再用tshark做协议分层统计快速定位异常协议。比如tshark -r capture.pcap -q -z io,phs看协议层级tshark -r capture.pcap -q -z conv,tcp看TCP会话列表按流量大小排序异常大的会话往往就是攻击流量。定位到可疑IP后用tshark -r capture.pcap -Y ip.addr192.168.1.100 -T fields -e frame.number -e _ws.col.Protocol -e _ws.col.Info看这个IP的所有交互。如果是Web攻击重点看HTTP请求里的URL和POST数据用tshark -r capture.pcap -Y http.request -T fields -e http.host -e http.request.uri -e http.user_agent。如果是暴力破解看ftp或ssh协议的失败响应次数。提取文件用File - Export Objects - HTTP在Wireshark里操作或者命令行tshark -r capture.pcap --export-objects http,./output。3.2 磁盘镜像取证挂载、时间线、关键词三件套磁盘镜像题一般给.dd或.E01文件要求找隐藏文件、分析操作时间线、提取特定关键词。第一步是确认镜像格式file image.dd看是raw还是带分区表。如果是带分区的用fdisk -l image.dd看分区偏移然后mount -o loop,offset$((512*起始扇区)) image.dd /mnt挂载。E01格式用ewfmount挂载成raw再处理。挂载后先看根目录和用户目录重点找.bash_history、.ssh、浏览器缓存、回收站。时间线分析用fls -r -m / image.dd bodyfile.txt生成bodyfile再用mactime -b bodyfile.txt -d输出时间线按时间排序找攻击者操作窗口。关键词搜索用grep -r flag /mnt或strings image.dd | grep -i password。这里有个血泪经验不要直接对镜像文件跑grep几GB的镜像会卡死先挂载再搜或者用bulk_extractor做并行提取。另外注意时区比赛题可能用UTC时间而系统显示本地时间对时间线时要统一。3.3 用Python脚本自动化提取IOCB模块经常要求提交攻击者的IP、域名、文件哈希等IOC。手工翻包效率低我一般写个Python脚本调scapy或pyshark批量提取。下面这个脚本用scapy读pcap提取所有HTTP请求的Host和URI以及DNS查询的域名去重后输出。from scapy.all import rdpcap, IP, TCP, UDP, DNS, DNSQR, Raw import re pcap rdpcap(capture.pcap) hosts set() uris set() domains set() for pkt in pcap: # 提取HTTP Host和URI if pkt.haslayer(TCP) and pkt.haslayer(Raw): payload pkt[Raw].load.decode(errorsignore) if payload.startswith((GET, POST)): lines payload.split(\r\n) for line in lines: if line.lower().startswith(host:): hosts.add(line.split(:, 1)[1].strip()) m re.match(r(GET|POST)\s(\S), lines[0]) if m: uris.add(m.group(2)) # 提取DNS查询域名 if pkt.haslayer(DNS) and pkt.haslayer(DNSQR): qname pkt[DNSQR].qname.decode(errorsignore).rstrip(.) domains.add(qname) print(Hosts:, hosts) print(URIs:, uris) print(Domains:, domains)脚本逻辑遍历每个包如果TCP层带Raw载荷且以GET/POST开头说明是HTTP请求从首行正则提取URI从Host头提取域名。DNS层用DNSQR取查询名。参数上注意decode(errorsignore)防止非UTF8字符报错rstrip(.)去掉DNS域名末尾的点。这个脚本跑完能快速拿到IOC列表再结合tshark的统计结果交叉验证。如果pcap很大rdpcap会吃内存可以改用PcapReader流式读取。4. 避坑与常见问题AB模块现场翻车记录4.1 加固后服务起不来先看日志再回滚现象改完SSH配置重启失败SSH连不上。原因sshd_config里Port被注释或语法错误或者SELinux阻止了新端口。解决如果还能通过控制台进看journalctl -u sshd -n 50常见是Bad configuration option。SELinux的话用semanage port -a -t ssh_port_t -p tcp 2222加端口。如果完全连不上比赛环境一般能重置靶机但会扣时间。预防改任何服务配置前先cp备份改完用-t测试再重启。4.2 取证时挂载镜像报“wrong fs type”现象mount -o loop image.dd /mnt报错。原因镜像带分区表直接挂整个镜像不行要算偏移。解决fdisk -l image.dd看Start扇区乘以512得到offsetmount -o loop,offset1048576 image.dd /mnt。如果fdisk看不出用parted image.dd unit s print。注意有些镜像用LVM需要先vgscan再vgchange -ay激活。4.3 流量包里找不到flag可能是编码或分片现象strings搜不到flagHTTP导出对象也没有。原因flag被base64编码、gzip压缩或者藏在TCP分片里。解决用tshark -r capture.pcap -Y http -T fields -e http.file_data | xxd -r -p | zlib-flate -uncompress解压或者用Wireshark的“Follow TCP Stream”看原始流。分片的话在Wireshark里开“Reassemble fragmented IP packets”。4.4 时间线对不上检查时区和文件系统现象mactime输出的时间和题目给的时间差8小时。原因镜像来自UTC时区系统而分析机是CST。解决mactime -b bodyfile.txt -d -z UTC指定时区或者手动加减。另外NTFS和ext4的时间戳精度不同ext4有纳秒NTFS是100纳秒对比时注意。4.5 评分脚本读不到你的配置路径和权限问题现象明明改了配置评分脚本判0分。原因配置文件路径不对比如题目要求改/etc/nginx/conf.d/default.conf你改了/etc/nginx/nginx.conf或者文件权限不对评分脚本用非root用户读不了。解决仔细看题目给的路径改完chmod 644确保可读chown root:root确保属主正确。不确定的话把两个文件都改上。5. 进阶技巧把AB模块思路迁移到真实应急响应带过几届比赛后我发现AB模块的价值不在拿奖而在它逼你养成的操作习惯——先摸清现状再动手、改配置必备份、验证必看日志。这些习惯放到企业应急响应里就是保命技能。比如A模块的加固清单本质就是等保2.0里“安全计算环境”的落地检查项B模块的流量取证对应的是SOC里告警后的pcap分析流程。我现在的习惯是每次处理真实安全事件先按B模块的思路做一遍协议分层和IOC提取再按A模块的思路检查受影响主机有没有同类漏洞。这套组合拳比单纯用扫描器扫一遍要扎实得多。再给一个进阶验证方法用Docker搭一个迷你靶场把A模块的加固项写成Ansible playbook把B模块的pcap分析写成Python脚本每次改完playbook就跑一遍脚本验证。这样既能练手又能积累自己的加固基线库。下面这个Ansible任务片段演示了如何批量关闭危险服务并设置密码策略你可以根据比赛要求增删任务。- name: 关闭危险服务 systemd: name: {{ item }} state: stopped enabled: no loop: - telnet.socket - vsftpd - rsh.socket - name: 设置密码最小长度 lineinfile: path: /etc/login.defs regexp: ^PASS_MIN_LEN line: PASS_MIN_LEN 10Playbook逻辑第一个任务用systemd模块停止并禁用telnet、vsftpd、rshloop列表按题目要求改。第二个任务用lineinfile改/etc/login.defs的PASS_MIN_LENregexp匹配已有行没有就追加。参数上注意enabled: no确保重启后不自动起state: stopped是立即停。跑之前用--check模式预演确认不会误改。最后说个我自己的教训早年带学生备赛总想着把每个命令都教一遍结果学生比赛时遇到没见过的服务就慌。后来我改成只教检查思路和排错方法具体命令让他们查man page反而成绩更稳。这套AB模块的题你把它当成一次“限时运维取证”的模拟比当成考试题去背答案有用得多。希望帮到你。本文还有配套的精品资源点击获取