20252901 2025-2026-2 《网络攻防实践》课程总结
20252901 2025-2026-2 《网络攻防实践》课程总结
1. 内容总结
第1次实践 虚拟化网络攻防实验环境搭建:
万事开头难,第一次实践的精力几乎全部花在“让实验环境正常运行”上。我先在VMware中搭建两套虚拟网络:VMnet1采用仅主机模式、VMnet8采用NAT模式,再为蜜网网关Roo配置三块网卡,分别对接攻击网段、靶机网段和管理网段。攻击机方面准备了Kali、WinXPattacker、SEEDUbuntu9三台,靶机则是Metasploitable和Win2kServer两台。由于机器数量较多,连通性测试成为关键环节,需反复进行ping测试与路由调整,直到蜜网网关的Web管理界面能够正常访问。
第2次实践 网络信息搜集:
本次实践将“信息搜集”划分为踩点、扫描、查点三个阶段,我也相应地逐一上手使用了这些工具。先用nslookup查询DNS以获取域名对应的IP,再到ICANN的WHOIS中查阅注册信息,配合IP定位工具大致锁定物理位置,这一系列步骤完成后,“对方是谁”便基本有了轮廓。真正“动手”的部分则需要通过nmap完成:-sn探测存活主机、-sS扫描端口、-O识别操作系统、-sV探测服务版本,四个参数一气呵成。最后挂上Nessus进行漏洞扫描,靶机暴露出28个高危漏洞。
第3次实践 网络嗅探与协议分析:
嗅探是本次实践的主线。我使用tcpdump对一次访问www.163.com的过程进行抓包,借助BPF过滤规则将SYN包单独筛选出来,统计浏览器究竟连接了多少台Web服务器。改用Wireshark分析TELNET登录BBS的流量则更为直观——启用Follow TCP Stream追踪后,用户名和密码便清晰地呈现出来,明文传输的安全隐患也随之有了直观认识。后半段是对一个listen.pcap进行取证:判断出这是Nmap的SYN半连接扫描,锁定攻击源IP和开放端口,再用p0f被动地推断出攻击主机的操作系统。
第4次实践 TCP/IP协议栈攻击:
这一轮的工作几乎都围绕netwox展开。首先进行的是ARP缓存欺骗,通过篡改靶机ARP表中的IP-MAC映射,使流量被劫持过来;接着伪造ICMP路由重定向报文,诱使靶机将数据包转发给我。完成两种欺骗类攻击后,转而进行拒绝服务类攻击:发起SYN Flood后,靶机的TCP半连接队列很快被耗尽,服务随之陷入拒绝服务状态;TCP RST攻击则更为直接,向已建立的连接发送一个数据包即可强制将其中断。最后使用ettercap进行ARP投毒以完成会话劫持,Telnet中以明文传输的用户名和密码再次被成功截获。
第5次实践 防火墙与入侵检测:
防御视角首次登场。需要在SeedUbuntu9上使用iptables编写规则:先添加一条规则使主机对Ping请求不予响应,再设置IP白名单,将FTP服务仅对特定主机开放。检测方面则将listen.pcap交由Snort进行离线分析,从报警日志中识别出Nmap的XMAS扫描和ARP欺骗。只有完整拆解蜜网网关的规则——BlackList、WhiteList、FenceList三条链配合默认DROP策略,再加上Snort_inline和iptables的联动,攻击数据如何被捕获、行为如何被控制,整条链路才在我脑海中完整贯通。
第6次实践 Windows系统安全攻防:
本次实践聚焦经典的MS08-067漏洞。借助Metasploit完成利用,对Win2kServer获取反向TCP Shell,从而掌握靶机的控制权。更为耗时的是后半段的取证:依据snort日志逐步还原一条完整的攻击链——从利用IIS的Unicode编码漏洞进行目录遍历,到借助msadc(2).pl实施MDAC RDS攻击,再到通过FTP下载恶意工具、建立反向Shell、窃取SAM口令,最后连蜜罐也被识别出来。末尾与同学进行了一场攻防对抗,一方使用MS08-067进行渗透,另一方开启Wireshark抓包还原全过程,攻守双方都得到了充分锻炼。
第7次实践 Linux系统安全攻防:
改用Linux靶机Metasploitable后,攻击方式也随之调整。首先针对Samba的usermap_script漏洞(CVE-2007-2447),Metasploit在利用时向其中注入Shell命令,远程代码执行随之完成,直接获得root权限。第二个目标更具戏剧性——vsftpd 2.3.4的后门只需在FTP用户名末尾添加一个:),6200端口便会隐蔽地开启一个Shell,这种“笑脸触发器”着实令人印象深刻。两轮攻击均使用Wireshark抓取流量,借助TCP Stream将过程完整还原,并据此提炼出攻击特征。
第8次实践 恶意代码分析与僵尸网络:
逆向分析的开端是借助多种工具依次展开。先由file命令配合PEiD,识别出RaDa.exe是UPX加壳的PE32文件;交由超级巡警脱壳器脱去外壳后,再用strings和IDA Pro提取字符串,作者的署名——Raul Siles与David Perez——随之显现。接着使用IDA Pro分析crackme1.exe和crackme2.exe,在Strings窗口、函数调用图和流程图之间来回切换,最终成功定位到正确的输入参数。最后一段留给僵尸网络流量,从中辨认出IRC的通信模式,统计接入主机数量,并顺藤摸瓜追踪到攻击IP。
第9次实践 缓冲区溢出攻击:
在缓冲区溢出这一站,我针对同一个pwn1程序尝试了三种方法。最具技术含量的是第一种:直接使用xxd和objdump修改二进制中CALL指令的操作数,将main原本要调用的foo改为getShell,属于纯手工修改。第二种方法是利用foo中gets的缓冲区溢出漏洞,精心构造一段由填充数据与恶意返回地址组成的字符串,覆盖栈帧中的EIP。第三种最为完整——自行编写Shellcode并配合一串NOP滑板,组装成完整的攻击载荷,溢出注入后成功获取Shell。
第10次实践 Web安全(SQL注入与XSS):
这是我个人认为做的最好的一次(见下文)。SEED靶场将SQL注入分为两类进行实践:针对SELECT注入,借助OR 1=1--构造一个永真条件以绕过登录;针对UPDATE注入,闭合字符串后追加', salary='99999,从而修改了员工薪资。XSS方面采用存储型,在Elgg的个人简介中注入JavaScript,完成弹窗、窃取Cookie、自动添加好友以模拟蠕虫传播、篡改profile信息等一系列实验。完成攻击后再补充防御措施:以参数化查询有效防御SQL注入,用HTMLawed过滤插件配合HttpOnly Cookie防御XSS。
第11次实践 Web浏览器渗透攻击与网页木马分析:
最后一次实践深入分析了网页木马的多层嵌套结构。先使用Metasploit的ie_createobject模块针对IE的MS06-014漏洞发起攻击,生成恶意URL诱导靶机访问,从而获得远程Shell。真正的难点在于后续的真实样本,从start.html中一个隐藏的iframe出发,逐步追踪到new09.htm,再解密一层XXTEA+Base64嵌套加密的kl.htm(密钥即字符串“script”),最终厘清恶意代码如何依次利用ADODB.Stream、暴风影音、PPStream、百度搜霸等ActiveX控件漏洞实施攻击。
2. 最喜欢且做得最好的实践是哪次?为什么?
我最喜欢且做得最好的是第十次实践——Web安全(SQL注入与XSS)。
之前的几次实验通常是使用现成的工具(比如Metasploit、netwox等)按照步骤执行攻击,输入命令就能立马看到效果,但更像是使用工具,很多时候对原理的理解不够深入。但第十次实验中,SQL注入需要我自己手工构造注入字符串,要恢复对SQL语句的语法结构的记忆,要想清楚闭合引号的位置、注释符的作用、UNION查询的列数匹配规则。
XSS部分我也很喜欢。当我在Elgg平台的profile里注入JavaScript代码,看到弹窗弹出、Cookie被成功窃取的那一刻,我终于对前端攻击有了直观的认识。蠕虫传播实验,通过构造自动添加好友的恶意脚本,模拟了Samy Worm的真实攻击场景,让我理解了蠕虫是如何在社交网络中自我传播的。
在这之前,我只在网络上听说这些攻击方法和攻击造成的影响。虽然一直对它的原理和细节感兴趣,但从来没有真正尝试过。是第十次实践让我有了这样的一次机会。
在此次实践中也遇到了不少问题。最开始因为偷懒没有安装vmware tools,导致我在做实验的时候发现我的浏览器页面内容显示不完全。当时凭着第六感怀疑是显示缩放比例异常导致的,试了一下果然见效。不过,如果实验一开始就安装了vmware tools,就不会有这些麻烦事了!
3. 本门课学到的知识总结
3.1 安全加固和检测技术
信息搜集方面,教材将其划分为踩点(Footprinting)、扫描(Scanning)、查点(Enumeration)三个步骤,我做完第二次实践才真正体会到它们的递进关系。踩点最为“安静”,依靠whois、nslookup这类公开渠道隐蔽地收集目标信息,原则上不能惊动对方;扫描则需要“主动”出击,目标是探测清楚活跃主机、开放端口、系统类型和安全弱点——教材中那个比喻我一直记得:“实施盗窃之前从中寻找有人居住的房间,并找出所有可供潜入的门窗”,十分形象;查点则聚焦于网络层面的细节,可视为踩点的一个子集。
主机扫描的几种方式,机制上各不相同。ICMP Ping最为直接,依靠Echo Request探测主机存活性;TCP ACK Ping则只发送带ACK标志的数据包,对方返回RST即表明主机在线,其优势在于更易绕过无状态包过滤防火墙;TCP SYN Ping则依据端口是否开放给出不同回应。这些工作最终基本都交由nmap完成。Fyodor编写的这款工具几乎涵盖了扫描能完成的所有工作,主机、端口、系统、服务查点一应俱全,因此被奉为标配工具。
嗅探方面,tcpdump和Wireshark是一文一图的两件利器。tcpdump基于libpcap,在命令行中配置BPF过滤规则即可精准捕获特定协议、端口、主机的流量;Wireshark则提供图形化的协议分层解析和TCP流追踪。两者的底层原理其实一致——将网卡设为混杂模式,对网络上经过的数据帧尽数接收。
防御侧的核心是防火墙和入侵检测。防火墙按形态可分为几类——带包过滤的路由器、运行于通用OS上的软件产品、基于安全OS的,以及专用硬件设备。实操中我研读最多的是Linux的netfilter/iptables:filter表负责包过滤,包含INPUT、OUTPUT、FORWARD三条链;nat表负责地址转换,管理PREROUTING、POSTROUTING、OUTPUT;mangle表则负责实现某些特殊目的的包修改。Snort则沿袭签名匹配的传统思路,依靠规则库对网络攻击行为进行识别。
第二次实践里的Nmap我运用得颇为顺手,-sn探测存活主机、-sS半连接扫描端口、-O识别操作系统、-sV探测服务版本。Nessus再补充一次漏洞扫描,Win2kServer上68个开放端口、28个高危漏洞——这一数字颇为醒目。
第三次实践把tcpdump和Wireshark又练习了一遍。tcpdump配置BPF过滤(如tcp[13]&18=2专门捕获SYN包),Wireshark则依靠显示过滤器和TCP Stream追踪来解析协议细节。
第五次实践轮到我亲自编写iptables规则:一条-A INPUT -p icmp -j DROP使主机对ICMP请求不予响应,再设置-P INPUT DROP实现默认拒绝,配合-s源IP白名单实现访问控制。Snort方面则离线输入pcap,使用alert_fast输出报警日志,端口扫描、ARP欺骗随之暴露无遗。
第十一次实践里,PEiD识别加壳类型、IDA Pro进行静态反编译,这两款工具又出场了一次。
3.2 Web安全技术
软件安全漏洞如何分类?教材中有一段定义令我印象深刻。输入验证类漏洞,根源在于程序对用户输入的数据验证出错,未能保证其正确性、合法性与安全性,从而被恶意利用。这类漏洞还可依据“恶意输入被如何使用”进一步细分——格式化字符串、SQL注入、代码注入、远程文件包含、目录遍历、XSS、HTTP Header注入,均属于这一大类。
Web攻防中重点讨论的是SQL注入和XSS。SQL注入的根源很明确:Web应用未对用户输入进行严格过滤,直接拼接进SQL语句并执行,攻击者只要构造得当便可篡改语句逻辑,常见手法有联合查询注入、盲注、报错注入几种。治本之策是参数化查询(Prepared Statement),将数据与命令彻底分离。
XSS则分为存储型、反射型、DOM型三种,其中存储型的危害最大,恶意代码会被持久化写入服务器数据库,任何访问者都可能中招。防御它的一套组合拳是输入过滤、输出编码,再为Cookie设置HttpOnly属性。此外还有CSRF,属于权限混淆与提升类漏洞,手法是诱骗已登录用户在不知情的情况下执行非授权操作。
SQL注入分两方面。针对SELECT注入时,在登录用户名中注入' OR 1=1--构造一个永真条件以绕过验证,再用UNION查询将数据库中的用户凭证一并获取;针对UPDATE注入时,闭合字符串后追加', salary='99999,从而修改员工薪资。防御方面采用的是PHP的PDO参数化查询,用户输入仅作参数绑定、不进入SQL语句本体,从而从根本上杜绝注入。
XSS则以Elgg的profile字段为试验田:注入<script>alert('XSS');</script>实现弹窗,注入document.cookie窃取Cookie,再编写一个自动发送好友请求的脚本以模拟蠕虫传播。防御同样分两方面——启用HTMLawed过滤插件清除HTML标签,为Cookie添加HttpOnly以防止JavaScript读取。
3.3 逆向分析技术
逆向分析这一章将方法分为静态、动态两类。静态分析的优势在于无需实际运行恶意代码,依靠PE文件格式分析、字符串提取、反汇编反编译等手段推断程序逻辑;动态分析则相反,在受控环境中实际运行程序,借助调试器观察程序行为。
加壳(Packing)是恶意代码对抗静态分析的常规手段。原理并不复杂:将原始PE文件压缩或加密一遍,静态分析时便无法读取其中的真实内容,需先用脱壳工具还原。教材中那句缓冲区溢出的定义我也一直记得——“在计算机程序向特定缓冲区内填充数据时,超出了缓冲区本身的容量,导致外溢数据覆盖了相邻内存空间的合法数据,从而改变程序执行流程破坏系统运行完整性”,将“溢出”究竟溢在何处、破坏了什么,阐述得相当透彻。
工具链方面,file识别文件类型(如PE32 executable)、strings提取可打印字符串、PEiD判断加壳,这套基本功需要熟练掌握。使用最多的还是IDA Pro——它的控制流图(Flow Chart)、函数调用图(Function calls)和字符串交叉引用,使我能够迅速理顺程序的控制流和关键数据引用。
第八次实践里RaDa.exe就是用PEiD识别出UPX加壳的,超级巡警脱壳器脱去外壳后,strings配合IDA Pro的Strings窗口(需勾选Unicode编码)一查,在JDR0:00402D04处发现了作者版权信息。crackme程序则全程使用IDA Pro——在View→Graphs中函数调用图和流程图之间来回切换,分析sub_401280中strcmp的比较逻辑和参数校验,正确输入随之锁定。
第十一次实践分析的是网页木马的多层混淆。顺着HTML中隐藏的iframe追踪到加密的JavaScript,识别出为XXTEA+Base64,用十六进制密钥\x73\x63\x72\x69\x70\x74解出核心代码,再分析它如何逐一利用ADODB.Stream、MPS.StormPlayer、POWERPLAYER.PowerPlayerCtrl.1、BaiduBar.Tool这些ActiveX控件的漏洞。
3.4 主流代码审计技术
软件安全为何如此难以根治?教材中那个“困境三要素”给出了答案:复杂性(Complexity)、可扩展性(Extensibility)、连通性(Connectivity)三者叠加,安全风险管理便成为极为棘手的难题。尤其是可扩展性,分析可扩展性软件的安全性要比分析一个完全不能被更改的软件要困难得多,这一点我深以为然。
代码审计中,白盒测试(针对源代码进行测试)是核心方法。思路是人工与工具相结合,识别出未过滤的用户输入、eval/exec/system这类危险函数调用,再将数据从用户输入一路追踪至敏感操作(数据库查询、系统命令执行),检视完整传播路径上是否存在SQL注入、命令注入、逻辑漏洞等缺口。
教材中还论及Linux的开源特性,这一点颇具启发:漏洞发现阶段,攻击者能直接分析其源代码、挖掘漏洞,相较Windows这类闭源系统,手中多了源代码审计的工具与手段,不必局限于针对二进制的测试与调试。这大概也是Linux漏洞通常更易被社区发现和修复的原因。
第十次实践我将SEED靶场的PHP后端(unsafe_home.php、unsafe_edit_backend.php)通读了一遍。问题一目了然:用户输入被直接以字符串拼接进SQL,例如$sql = "SELECT * FROM credential WHERE name='$input_uname' and password='$input_pwd'",前后未做任何过滤转义。前端方面则通过view page source查看表单的action和提交方法(GET/POST),从而摸清数据从输入到SQL执行的整条流程。
第十一次实践则针对混淆后的JavaScript进行审计,重点分析try-catch-finally中那套利用ActiveX控件异常来探测目标软件是否已安装的逻辑。
3.5 程序设计
Shellcode这个词以前仅有所耳闻,缓冲区溢出这一章才将其讲透。简言之,Shellcode就是一段能被CPU直接执行的机器码,目的是获取目标系统的Shell,编写时还受到诸多限制——需针对目标CPU架构,体积要精简,且不能包含坏字符。Linux x86上的常见做法是依靠系统调用(int 0x80或sysenter)执行execve("/bin/sh")。
NOP滑板(NOP Sled)这个思路我认为尤为巧妙。NOP的机器码是0x90,CPU遇到它时不执行任何操作、仅耗费一个时钟周期。攻击时在Shellcode前面铺设一大片NOP,便凑成了一条“滑板”:返回地址无需指得过于精确,只要落在这片区域的任意位置,CPU便会一路滑行至后面的Shellcode去执行,成功率随之显著提升。
Python在安全领域的用途这一章也有所涉及,scapy用于协议分析和数据包构造、requests编写爬虫,以及手工编写漏洞利用脚本。反汇编方面我借助objdump将x86指令与机器码的对应关系记牢——CALL是0xE8、RET是0xC3、JMP是0xE9、NOP是0x90,这几组对应关系是手工修改二进制的基本功。
第九次实践里scapy我虽有使用(不过该实验主要还是基于命令行),Shellcode则是自行编写的。借助objdump理清CALL、RET、JMP、NOP对应的0xE8、0xC3、0xE9、0x90后,用xxd将二进制转为十六进制进行手工修改,再用xxd -r还原。最后那段BoF载荷是完整构造出来的:一串\x90的NOP滑板、Shellcode,再接返回地址。
3.6 计算机病毒技术
病毒、蠕虫、木马这三类以前总被我混为一谈,恶意代码这一章才算分辨清楚。计算机病毒需寄生在其他程序中,依靠感染宿主文件进行自我复制传播;蠕虫则更为独立,能自行运行、依靠网络主动扩散,不依赖宿主;木马则擅长伪装,伪装成正常程序潜伏下来,为攻击者留下远程控制的暗门。三者传播方式与危害机制各有不同。
僵尸网络(Botnet)的概念也在这章得以建立:大量被植入僵尸程序的主机构成一张受控网络,攻击者借助命令控制服务器(C&C Server)统一发号施令,发动DDoS、群发垃圾邮件这类大规模动作均可实现。通信协议常用IRC,僵尸主机只要加入特定频道,便会静候指令。
恶意代码如何隐藏、如何对抗分析,这章也阐述得相当透彻。加壳是一条途径——通过压缩或加密PE文件使静态分析无法读取内部;进程注入、注册表自启动项、Rootkit隐藏等手法则用于实现持久化和隐蔽。对应的防御也需相应跟进,杀毒软件的特征码查杀、沙箱隔离、行为监控各司其职。
第八次实践的RaDa样本就是UPX加壳的,脱壳后果然发现藏有后门,能够远程连接控制服务器接收指令并执行。僵尸网络的通信机制也分析了一遍:通过IRC协议(TCP 6667端口)与C&C服务器建立连接,僵尸主机进入频道蹲守,批量主机便由此被控制。
3.7 网络溯源及防范技术
网络取证和攻击溯源这一章,核心思路是利用捕获到的流量数据重建安全事件的时间线——攻击源IP是谁、采用何种手法、针对何种目标,均可从流量中还原出来。
蜜网(Honeynet)是我在本门课中最为头疼的内容之一。由于我宿舍和工位的两台台式电脑均无法通过GUI页面对蜜罐进行正确配置(可能与CPU有关,两台电脑均为AMD 7500F处理器),我查阅了大量资料,在命令行中输入诸多命令才使蜜罐得以正常运行。通过部署蜜罐主机吸引攻击者入侵,蜜网网关“结合防火墙日志、IDS报警和Sebek行为监控,完整记录攻击者的操作行为”。蜜网网关还通过数据控制机制限制攻击者利用蜜罐作为跳板对外发起攻击,这种“以攻促防”的思路令我印象深刻。
监测防御方面,Snort这类IDS部署在网关等关键位置监测主机扫描活动,防御者据此能够预判攻击何时发生、从何而来。p0f这类被动指纹工具则更为“安静”,不主动发包,仅分析流量便能推断出远程主机的操作系统类型。
第三次实践对listen.pcap进行扫描取证,一环扣一环:用Wireshark过滤ARP锁定扫描目标172.31.4.188,Snort社区规则比对后识别出工具为Nmap,再依据TCP标志位判断为SYN半连接扫描,最后由p0f被动指纹判定攻击机运行的是Linux 2.6.x。
第六次实践依据snort日志进行NT系统的攻击取证,借助Wireshark的TCP Stream层层追踪,将攻击者的完整链路还原出来:利用Unicode目录遍历探测漏洞、MDAC RDS远程代码执行、通过FTP下载恶意工具、建立反向Shell,直至窃取SAM口令,连蜜罐也被识别出来。
3.8 加密解密技术
对称加密和非对称加密的区别,这一章算是彻底厘清。对称加密(AES、DES)加解密使用同一把密钥,速度快,但密钥如何安全分发是个难题;非对称加密(RSA、ECC)采用公钥加密、私钥解密,解决了分发问题,代价是计算速度较慢。两种方式各有软肋,实际应用中往往搭配使用。
哈希(MD5、SHA-256这类)的特性也很契合需求——将任意长度数据压缩为定长摘要,不可逆、抗碰撞,用于完整性校验和存储密码都很合适。蜜网取证时我便用MD5为恶意代码文件赋予“身份证”,以确保传输分析过程中未被篡改。
不过加密是把双刃剑,恶意代码也利用它来混淆自身以对抗分析,XXTEA、Base64便是常见手段。教材指出,软件的可扩展性使得安全保证更加困难,很难阻止攻击者和恶意代码以不可预测的扩展方式来入侵软件和系统。这句话用于网页木马尤为贴切。攻击者用JavaScript的eval套上XXTEA+Base64多层加密,使恶意代码以动态解密的方式运行。这种剥洋葱式的手法,也促使我在逆向时补上解密能力。
第十一次实践恰好遇上这套XXTEA+Base64。那段JavaScript依靠utf8to16(xxtea_decrypt(base64decode(t), '\x73\x63\x72\x69\x70\x74'))自解密,密钥即ASCII的“script”。我使用在线XXTEA工具将其解出,再将十六进制转为可读字符串,完整的恶意逻辑便一目了然。
3.9 信息系统运行维护
实验环境如何搭建,这章结合第一次实践我已较为熟悉。VMware虚拟网络编辑器的几种模式——仅主机、NAT、桥接——需按需配置;蜜网网关的部署更为繁琐,Honeywall的防火墙规则、IDS/IPS联动、Sebek行为监控一样不可或缺。教材中还提到可从支持网站下载定制好的虚拟机镜像,这让我意识到安全实验环境标准化能够省去不少麻烦。
防火墙部署,教材列出了四种典型模式:包过滤路由器、双宿主堡垒主机、屏蔽主机、屏蔽子网。安全层级最高的是屏蔽子网——攻击者想要触及内网,需经过外部防火墙、内部防火墙、堡垒主机这三道独立关卡,难度陡增。这种纵深防御的思路,让我对网络安全架构的“层次感”有了新的认识。
系统加固的几条基本原则我也记牢:最小权限,仅开启必要的服务和端口;默认拒绝,防火墙先设DROP,仅放行明确允许的流量;以及安全基线配置,涵盖账户密码策略、补丁管理、日志审计一整套。教材那句总结很到位——“按照网络实际需求制定严格的安全访问策略并严密实施,是防范攻击者主机扫描及进一步扫描与入侵行为的关键”。
第一次实践这套环境我是从零搭建到联通的。VMnet1采用仅主机(192.168.32.128/25)、VMnet8采用NAT(192.168.32.0/25),为蜜网网关Roo配置三块网卡,再手工修改/etc/honeywall.conf。iptables的规则链也编写了一遍。期间还遇到一个Roo图形化菜单与系统文件不同步的Bug,最终绕开图形界面、直接修改配置文件、手动配置网卡IP,连通性才算解决。
3.10 网络协议分析
tcpdump和Wireshark这两个流量分析利器,是嗅探与协议分析这一章的主线,后续实验中也反复使用。tcpdump将网卡设为混杂模式,依靠BPF(Berkeley Packet Filter)过滤规则精准捕获特定协议、端口、主机的流量;Wireshark则提供图形化的协议分层解析,启用Follow TCP Stream追踪后,完整会话内容便得以还原。
这一章逐一梳理了一遍TCP/IP协议栈各层的安全缺陷。链路层的ARP便是一个典型,它默认网络中所有设备均可信,压根未设计身份认证,于是“攻击者可伪造ARP响应实施中间人攻击”,ARP缓存欺骗才如此容易得手。
传输层这一块倒是帮我找回了不少计算机网络的知识。TCP三次握手能被用于发起SYN Flood——海量伪造源IP的SYN请求涌入,服务器的半连接队列很快被耗尽;TCP序列号若能被预测,RST攻击、会话劫持便都有了可乘之机。TELNET则更为“坦诚”,用户名密码逐字节以明文传输,安全隐患一目了然。
第三次实践里我用tcpdump查看访问www.163.com时的HTTP流量,这才直观感受到浏览器加载一个页面背后需要连接大量Web服务器:CDN节点、静态资源服务器、第三方广告服务器均在繁忙工作。用Wireshark分析TELNET则发现它确为逐字节明文传输,每个字符单独封装为一个TCP包。
第四次实践将协议栈各层的缺陷串联起来完成了一次综合的实践,链路层ARP无认证→ARP欺骗,网络层ICMP可伪造→路由重定向,传输层TCP三次握手→SYN Flood,TCP序列号可预测→RST攻击和会话劫持。
3.11 数据库
SQL注入归在输入验证类漏洞之中,教材的判断十分直白——“SQL注入、远程文件包含、目录遍历、XSS等Web应用程序安全漏洞近年来已经成为攻击者最普遍利用的目标”,确实是当前Web安全的重灾区。
SQL注入的本质,简言之就是攻击者在用户输入中夹带SQL元字符——单引号、注释符--、UNION关键字之类,使原本SQL语句的执行逻辑偏离,从而达到绕过验证、窃取或篡改数据的目的。
防御方面我自认还算扎实,核心便是参数化查询(Prepared Statement):用户输入仅作参数绑定,不直接拼接进SQL,数据与命令从根本上分离。配套的辅助手段也有所了解——存储过程、输入白名单验证、为数据库账户配置最小权限等等。
第十次实践中,我实际操作MySQL完成了注入。mysql -u root -pseedubuntu登录后,依次运行show databases、use Users、select * from credential 以摸清库结构。再手工构造注入payload(' OR 1=1--、' UNION SELECT ...--),SQL语法的灵活与危险一并体会到了。防御方面使用PHP的PDO prepared statement对输入进行参数化绑定,数据与代码就此分离。
3.12 法律
法律这条线,我结合其他课程学过的网络安全法规和参考资料梳理了一遍。教材回顾了黑客道的发展史,也在反复提醒一件事。攻防技术的研究与实践必须框定在法律范围内,渗透测试必须先取得目标系统所有者的明确授权,这也是为何本课程所有实验均在隔离的虚拟环境中进行。
我国网络安全法律体系的核心是“三法两条例”。三部法各有分工:《网络安全法》确立了网络运营者的安全保护义务和网络空间主权原则,《数据安全法》建立起数据分类分级保护制度、规范数据处理,《个人信息保护法》划清个人信息处理的合法性基础与用户权利。两个条例《关键信息基础设施安全保护条例》和《网络安全等级保护条例》则将落地规范补齐。
等级保护制度也一并提及。它将信息系统安全保护分为五级,从第一级“用户自主保护级”一路到第五级“访问验证保护级”,等级越高要求越严。网络运营者需评估自身系统的重要程度以及一旦被攻破将造成多大危害,据此定级,再配套相应的保护措施。
3.13 基础
坦率地说,本科阶段不少知识点要么学得浅、要么早已遗忘,这门课程的实践促使我将计算机基础重新梳理了一遍。网络协议方面,TCP/IP协议栈的原理得到系统梳理,比如三次握手四次挥手、IP路由和子网划分、ARP如何工作、DNS如何解析;操作系统方面,借助搭建虚拟化环境的机会,Windows和Linux两类系统的差异也得到了全面了解。
缓冲区溢出这块,x86 CPU的寄存器体系我算是研读明白了。教材那句定义十分精准。“缓冲区溢出是计算机程序中存在的一类内存安全违规类漏洞,在计算机程序向特定缓冲区内填充数据时,超出了缓冲区本身的容量,导致外溢数据覆盖了相邻内存空间的合法数据,从而改变程序执行流程破坏系统运行完整性”。但真正让我开窍的仍是实践:函数调用栈帧里局部变量、EBP、返回地址、参数的排列顺序,以及栈从高地址向低地址增长的特性,这些仅靠看书确实难以记牢。
软件安全困境的概念同样启发颇大。“三要素”我至今记得:复杂性:“软件规模越来越大,越来越复杂,也就意味着软件的bug会越来越多”,而且“即使一个经过了严格质量认证测试的系统仍然含有bug,每千行大约有5个”;可扩展性:现代软件依靠动态装载、脚本语言支持扩展;连通性:“高度的连通性使得一个小小的软件缺陷就有可能影响非常大的范围”。
计算机网络:十一次实践下来,TCP/IP协议栈的工作原理算是掌握了——三次握手四次挥手、IP路由和子网划分(如192.168.32.0/25对应的掩码255.255.255.128)、ARP的IP-MAC映射、DNS解析流程、HTTP请求响应模型。
操作系统:虚拟化环境里Windows 2000/XP和Linux(Kali/Ubuntu)之间来回切换,两边的网络配置(Windows的TCP/IP属性对应Linux的/etc/network/interfaces和nmcli)、进程管理(任务管理器对应ps/top)和文件系统的差异都已初步了解。
计算机组成:第九次缓冲区溢出实验里,x86 CPU的寄存器(EIP指令指针、ESP栈指针、EBP基址指针)、函数调用栈帧结构(局部变量→EBP→返回地址→参数)、栈向低地址增长的特性,以及溢出如何覆盖返回地址以劫持执行流。
4. 课堂的收获与不足
收获
攻防实验中出现的每一个漏洞,在当年可能都对应着一个惨痛的代价。在这之前,我只听说过网络攻防,没有时间或者动力对网络攻防的基本知识进行了解与学习。在学习的过程中,我的动手能力得到了很大的提升。从第一次作业的配置蜜罐到最后一次作业的寻找有效解码链接,每次作业都伴随着各种各样的问题,这都需要我们花时间来排查与解决。
有时候,一个从全局视角来看的小问题,在局部视角中,可能需要两小时甚至更多的排查的时间。但奈何实验中的篇幅有限,往往只能几句话寥寥带过,无法体现出实验过程中的艰辛。但当困难被攻克,就会有一种豁然开朗的感觉。在这个过程中,我的抗压能力也得到了提高。
从学期初开始,我便进行了每天的英语单词打卡。本科阶段我就开始使用扇贝单词进行单词背诵,从最基础的四六级,到雅思,再到专四等等,已打卡三百多天。这学期开始的单词背诵让我能加深以前背过的单词印象。
除此之外,我对程序员的开源精神有了初步的认识。在我提交作业之后,我的主页多了很多浏览量。不少同学在课后向我询问实验的一些讲述不够清晰的细节等等。正是这样的举措,让我更加不想辜负同学们的期待。我的文章从排版开始,尽可能为同学们提供翔实,美观,正确的实验思路与实验结果,并将我在实验中经过的各种问题写在作业里,让同学们尽可能不再踩到同一个坑中。同学们课后对我的提问算是对我而言很好的反馈,我也能在作业发布之后对帖子进行二次修改,让作业更加适合读者阅读。
截至5月24日,我的总浏览量已经突破六百次。这样的浏览量也算是对我的工作的某种形式上的肯定。
不足
对于很多攻击的底层原理,我对其的理解还不够深。比如Metasploit一键就能进行MS08-067攻击,但具体缓冲区溢出是怎么触发的、Shellcode是怎么被构造出来的,我只知道大概概念,需要借助大模型等工具才能弄清楚细节。
我的编程能力有待提高。由于长期远离一线开发工作,以及对编码工具产生依赖,我在写Shellcode和构造攻击载荷的时候比较吃力,如果Python和汇编基本功更扎实的话,理解起来会更快,修改PHP后端代码做防御的时候也不够熟练,需要对照参考资料。
我的电脑是macos。由于攻击机和靶机等环境和mac适配不佳,我只能选择宿舍的台式电脑进行学习。这导致我上课的时候很难直接开展实验,往往只能利用课余时间把实践做完。这导致我没法在课上及时向老师请教实验的问题。
浙公网安备 33010602011771号