2024年5月25日发(作者:)
网络攻防大赛相关知识点
1 背景
2014年全国电子设计大赛——信息安全技术专题邀请赛第一次设立“信息安全动态
演练类”题目,按照官方网站的介绍,“信息安全动态演练类题目主要是信息系统的脆弱性
分析,参赛形式是在封闭网络环境(含虚拟机)中的现场比赛,参赛内容涉及网络安全,
统一命题。”作为信息安全技术竞赛中最高级别的比赛,信息安全技术专题邀请赛第一次设
立了攻防类的题目,网络攻防实战竞赛终于丢掉了“禁区”的帽子,获得官方的支持。
在国际下,相关的网络攻防实现比赛已经举办了很多年,最著名的就是DefCon的CTF
大赛,国内在这一方面较为落后,也是在最近的几年开始重视并持续追赶,目前国内比较
有名的战队有清华大学的蓝莲花战队,台湾的HitCon战队,以及上海交通大学的0ops
战队等。
除了信息安全技术专题邀请赛,全国各大安全公司及其他高校也举办了类似的比赛,
今年比较著名的比赛有百度的BCTF比赛,以及第二届360杯全国大学生网络攻防大赛。
2 网络攻防大赛的特点
与其他的信息安全技术比赛相比,网络攻防大赛的最大特点是技术的实战性,参赛选
手会在相对封闭的环境中攻击并渗透进入对方的主机系统,同时也要对自己的主机系统不
断地进行安全防护。
就目前的比赛形式来看,题型设置基本上分为两种。
(1)相同计算环境下的夺旗赛。参赛选手在相同并隔离的计算环境下,分析目标系统
中的各种安全漏洞,利用漏洞或渗透主机等获取主机内隐藏的Flag。
(2)对攻实战。同夺旗赛类似,参赛选手的计算环境相同,但是并不隔离,其攻击目
标变为对方选手的系统。因此,除了获取对方系统的隐藏Flag之外,还需要不断给自己的
系统打补丁以增强安全防护,防止被对手渗透等。
3 网络攻防大赛的考察知识点
就以往的比赛来看,比赛题目大致分为以下5类:密码分析类、Web安全类、二进制
程序的逆向破解类、数字取证类、漏洞挖掘及漏洞利用类。
(1)Web安全
Web安全涉及的内容非常丰富,就典型的Web服务来说,其安全问题可能来自于
Web服务器、数据库服务器、以及Web程序本身等。所以,学习和了解Web安全的内
容也需要循序渐进。
1)首先学习Web服务器的配置。了解典型的Web服务器如何构建的,典型的Web
服务器包括微软的IIS、Apache、Tomcat等。
2)Web程序的开发离不开脚本语言。如何构建一个静态的Web网站?HTML的开
发规则是什么?如何利用HTML设计简单网页?
在建设完成静态Web网站之后,感兴趣的同学可以重点学习动态Web程序的开发,
典型的开发语言包括ASP、、JSP,PHP等。
3)典型的Web服务离不开数据库的支持,那么典型的数据库有哪些?如何应用?
Access、MySql、MS SqlServer、Oracle等典型数据库的安装与配置等是怎么样的?什
么是SQL,典型的新闻发布网站是如何设计的?
4)在了解了上述Web知识之后,我们就可以进入Web安全的世界,比如,什么是
SQL注入,什么是XSS注入,什么是CSRF,这些攻击能够发生的原因是什么?如何防范?
网络上的那么多Web网站,能否自己独立发现一个上述漏洞?(注意,我们要遵循黑客
原则,以发现漏洞并增强安全防护为目的,坚决遏制非法的网络攻击。)
5)此外,Web安全还有Web服务器、数据库服务器等本身的漏洞,比如,什么是
弱口令,服务器为了方便管理会经常开启3389端口,这个端口有什么用?如何能够猜解
出管理员的弱口令,同时服务器又开放了3389端口,会产生什么用的后果?
6)典型的数据库,如MS SqlServer有哪些经常被利用的漏洞?其默认登陆账户是什
么?MySql的默认开放端口是什么?HTTP协议的默认开放端口是什么?
(2)扫描器及协议分析
1)怎么样获取服务器的开放端口?怎么样扫描目标主机中存在的漏洞?Nmap有哪
些功能?如何使用?
2)在协议分析方面,WireShark有什么用?能够用来发起什么攻击?举例而言,常
规的Web程序中,用户名和密码等这些敏感信息一般会通过POST数据包发送给Web服
务器,在这样的过程中,能否用WireShark进行拦截并窃取敏感信息?
3)在协议分析这一块,如果不了解协议格式,也是很难进行的。这个时候需要去了解
常用的协议格式,比如HTTP协议,TCP协议,UDP协议等。HTTP协议中的POST方式
和GET方式有什么区别?TCP和UDP有什么区别?大家常用的腾讯QQ通信是使用的哪
种协议?
(3)二进制程序的逆向分析
1)二进制程序的逆向分析,一个重要的应用方向是软件破解,在这个方向上,一个重
要的网站是看雪:,这是一个大批破解高手和爱好者云集的地方。
2)在逆向分析方面,典型的工具有IDA Pro和OllyDbg。OllyDbg一款使用起来比
较简单的调试工具。当然还有很多其他优秀的调试工具,可见
/。
3)看雪上面有很多CrackMe,如果掌握了OllyDbg的使用,可以尝试去看雪找一些
简单的CrackMe来实际破解。试试看吧。
(4)漏洞挖掘
漏洞挖掘和利用一直以来都是信息安全的焦点和热点。想要入门,首先要了解缓冲区
溢出漏洞的发生原理。在学习并掌握了C语言之后,了解缓冲区溢出的发生原理并不困难,
什么是整形溢出、堆溢出、栈溢出?什么是格式化字符串溢出?C语言中的哪些函数或者
操作容易导致缓冲区溢出?
在了解了缓冲区溢出原理之后,需要再进一步了解缓冲区溢出的防护方法,比如,如
何在使用高级语言的时候进行边界检查?
在漏洞挖掘方面,给定一段源代码,能够通过审计该段高级语言,检查出是否有安全
漏洞?
如果没有源代码,只有二进制程序,如何发现其中的安全漏洞?这个时候IDA Pro和
OllyDbg又一次登场了。使用IDA Pro的hex-ray插件,可以把二进制程序反汇编成类C
语言,在反汇编得到的类C语言上,可以看到那些容易导致缓冲区溢出的脆弱性函数,随
后可通过设置断点等方式,通过动态调试的方法来检查程序是否含有漏洞,更详细的内容
请见我的代码分析文档。
(5)漏洞利用
在已获得漏洞之后,使用该漏洞能够发起哪些攻击?这时候需要了解的内容有Stack
Smashing,shellcode等,这方面的内容,我推荐大家看王清编写的0day安全这本书,
讲解的很详细。
通过0day这本书了解清楚基本概念之后,大家会发现0day的内容稍微有点陈旧,
很多内容已经没有及时更新了。这个时候,我推荐大家去David Brumley的主页上去找
他面向研究生的Software Security课程PPT,这是我目前见到的关于软件安全领域的最
好的一套PPT,没有之一。
顺便介绍一下David Brumley,著名女黑Dawn Song的弟子,博士毕业后直接CMU
留校工作,目前在软件漏洞的静态分析、动态分析及逆向方面处于世界领先。
另外,David Brumley还是PPP战队的领队和指导老师,PPP战队是CTF大赛的
传奇战队,多次蝉联Defcon CTF的冠军。
附个人主页/~dbrumley/
另外,既然软件漏洞一直以来都是安全焦点,那么操作系统和编译器等也不是吃干饭
的,它们已经设计了哪些用于防范软件漏洞的措施?什么是编译器的gs选项?什么是“栈
不可执行”保护(也成为DEP),什么是地址空间随机化ASLR,有什么用。
当然,所谓道高一尺魔高一丈,攻击者也设计出了新的漏洞利用攻击方法以绕过操作
系统或编译器的保护。高级漏洞利用技巧都有哪些?SEH劫持的原理是什么?Windows
最新版的操作系统中又采用了哪些措施来防止SHE劫持?什么是面向返回的编程攻击
(Return oriented programming),也称之为ROP。相似的攻击还有Ret2libc, JOP, COP
等?
在漏洞利用的防护方面,防火墙和IDS等也是隔离并检查shellcode的关键利器,其
作用是通过过滤网络报文,分析shellcode的哈希值或者其它关键字等,判断网络报文中
是否疑似含有shellcode,并把疑似报文丢弃等。在这种情况下,攻击需要解决的问题就
是shellcode的免杀,如何对shellcode进行变形,如何给shellcode加壳?
【强调】漏洞利用绕过技巧
DEP、ASLR、ROP、SEH劫持、SEHOP、safeSEH、HeapSpray、cookie/GS选择
项。
0day书上基本都有,去/搜索一下,可以下载到一些小
的程序来调一调
DEP:
即DataExecutionPrevention,不允许执行“数据”。在ARM上,数据和代码分开存
放,不存在此问题。X64 AMD或者
i系列Intel处理器上,微软使用NX技术,记录内存页的属性,即是否是代码。如果
一个页是数据,EIP指向了它,
系统会自动报错,从而阻止的非法数据被执行。
SEH:
当函数发生异常的时候,系统会首先尝试使用离异常最近的SEH结构体来处理异常。
异常处理程序可以选择返回继续执行刚才出错的指令、处理异常或者不处理异常。如果不
处理,则系统继续沿着调用轨迹向上寻找其他SEH结构,直到异常被处理(处理程序不是
选择"不处理异常")。如果所有的用户定义的异常都不选择处理,则最终会达到进程异常处
理的SEH,被称为UEF,即Unhandle Exception Filter。该SEH指向的处理程序会弹出
错误提示框,然后结束程序。当然,最终的异常处理程序UEF也可以通过编程来修改。
在异常处理程序开始前,系统还会进行一次unwind操作,遍历从异常点开始的所有
__finally代码块,并依次执行,执行完毕后才开始异常处理程序的执行。如果__finally块
出现了异常,则上一个异常被丢弃,系统开始处理当前异常。
因为SEH结构放在栈中,因此可以通过栈溢出修改SEH中的异常处理程序指针指向
shellcode,再人为引发异常,从而系统开始调用shellcode来处理异常。
VEH:
即Vectored Exception Handler。VEH是进程级的用户异常处理程序,可以由用户
注册多个函数,这些函数将被连接成双向链表存入堆中。异常发生时,系统首先通知调试
器,如果调试器不处理,则进入VEH的处理,然后才是SEH的处理。
HeapSpray:
首先构造1M的基本块,其中包含首部信息和数据,数据部分是nop和shellcode。
这样的一个基本块中大部分都是nop指令。再将这样的基本块组成的数组存入堆中,只要
能够从nop处开始执行,就一定会执行到shellcode部分。
ASLR:
Address Space Layout Randomization,通过将堆、栈等其实地址进行一定范围内
的随机化,加大缓冲区溢出攻击的难度。
SEHOP/SafeSEH
SEH Overwrite Protection SEH覆盖保护。该防护措施是指系统在使用栈上的SEH
时首先验证其完整性。SEHOP是系统自带功能,不需要应用程序配置,只需要用户将其开
启即可。
判断准则是:
1、SEH结构都必须在栈上;
2、最后一个SEH结构也必须在栈上;
3、所有的SEH结构都必须是4字节对齐的;
4、SEH结构中的handle(处理函数地址)必须不在栈上;
5、最后一个SEH结构的handle必须是ntdll!FinalExceptionHandler函数;
6、最后一个SEH结构的next seh指针必须为特定值0xFFFFFFFF;
可以看到,第四点要求使通过SEH跳转到栈上的shellcode不再可能。而且上述准则
保证了SEH链的完整性,因而如果要通过覆盖修改单个SEH,几乎不可能。可行的想法是
伪造整个SEH链,当然,这十分困难。
cookie/GS:
修改原来的栈结构:
Stack: bottom ... parameter-1 parameter-2 ... parameter-n 返回地址 EBP
cookie 局部变量 ... top构建函数栈帧的时候会在压入参数、返回地址、EBP后压入一个
随机数cookie,同时在.data段中保存他的一个副本。函数返回时系统自动检测栈中的
cookie和.data段中的cookie副本是否相同,如果不同则进入溢出处理程序,不会执行
ret返回语句,从而避免了转到shellcode执行
(6)密码分析
在密码分析这一方面,大家需要了解主流的密码算法,如对称密码、公钥密码、流密
码、哈希密码算法等。
在攻击方面,什么是弱口令攻击?密码字典有什么用?典型的密码破解工具有哪些?
当前的Web应用主要采取了哪些加密和编码算法?


发布评论