admin 管理员组文章数量: 887019
网络攻击技术
一、隐藏攻击者的地址和身份
1.IP地址欺骗或盗用技术:源IP地址为假冒或虚假
2.MAC地址盗用技术:修改注册表或使用ifconfig命令
3.通过Proxy隐藏技术:作为攻击跳板;实际上很难真正实现隐藏
4.网络地址转换技术:私有IP地址可以隐藏内部网络拓扑结构
5.盗用他人网络账户技术:网络安全链路中最薄弱的链接
二、踩点技术(Footprinting)
踩点是使用合法工具,获取公开信息的一种方式。
1.踩点所得到的有价值信息
信息名称 | 简单说明 |
网页信息 | 包括联系方式、合作伙伴、公司业务情况等较直观的信息 |
域名信息 | 包括域名服务器、网管联系人、邮件服务器以及其他应用服务器的注册信息 |
网络块 | 公司注册的IP地址范围 |
网络结构 | 初步探测目标网络的拓扑结构,包括防火墙位置等 |
路径信息 | 目标系统的网络路由信息 |
其他 | 包括一些非常规手段得到的有价值信息,社会工程学 |
2.踩点常用的工具和方法
- 直接利用浏览器获取信息
- 使用命令行方式的踩点工具:Finger(TCP 79):账号信息、Nslookup:经典的DNS测试工具、Ping:测试网络畅通与否
- 借助Sniffer Pro 4.5协议分析工具
- Traceroute(Tracert):跟踪路由信息,往往倒数第二个的路由信息就是目的端网关
3.踩点对策
(1)层次结构的DNS分布
DMZ中放置www、FTP、E-mail、外部DNS服务器等。i)外部DNS服务器只提供Internet卡访问的域名解析服务,而通过防火墙对外隔绝内部主机的所有域名信息;ii)内部网络中有另一个DNS服务器提供对内的域名解析服务。两者扮演的角色不同,DMZ的DNS服务器扮演转发器就可以限制内部DNS服务器直接向外发送域名解析请求,内部DNS服务器配置其“转发”选项,使得自身无法解析的域名请求被转发到DMZ中的DNS服务器。
(2)限制区域文件传输
三、扫描技术(Scanning)
扫描技术有:主机扫描、端口扫描、操作系统探测、漏洞扫描、Banner获取、IP地址欺骗扫描、FTP反弹式扫描。
1.扫描的分类
扫描的目的在于获得一些安全敏感信息和安全漏洞信息
1.主机扫描(Host Scanning)
一般使用Ping实现:发送ICMP echo请求给目标主机,若收到应答则表明目标主机激活。使用Fping工具因其“并行轮转、多线程”的特点发送大量Ping请求,可加快扫描速度。防火墙的存在使得Ping扫描的应答可能丢失,扫描结果不一定准确。
2.端口扫描(Port Scanning)
端口扫描的目标是获得目标主机开放的TCP和UDP端口列表,确定主机上开放的网络服务,得到监听端口返回的Banner信息。
端口扫描策略:
(1)随机端口扫描(Random Port Scan)
(2)慢扫描(Slow Scan)
(3)分片扫描(Fragmentation Scanning)将过滤特征分开,过滤设备因无法测试标志位,会忽略后续分片包,从而绕过成功。
(4)诱骗(Decoy):所有进入分组的TTL值相同则认为来自同一主机,使用Nmap,随机产生介于51~64的TTL值的分组,使IDS无法判断。
3.操作系统探测(Operate System Probing)
- 被动探测
- 主动探测:利用系统旗标(Banner)信息、TCP栈指纹探测(Stack Fingerprinting)、ICMP Fingerprinting、利用Ping进行探测(TTL接近256,则是Solaris/BSD系统;TTL接近128,则是Windows系统;TTL接近64,则是Linux系统)
4.漏洞扫描(Hole Scanning)
- 漏洞(脆弱性,Vulnerability)计算机或网络系统具有的某种可能被入侵者恶意利用的特性。
- 漏洞扫描:针对特定应用和服务(如操作系统、Web服务器、数据库服务器、防火墙、路由器)查找目标网络漏洞,并抽取有效账号或导出资源名
2.探测防火墙
防火墙的探测方法:
① 最简单方法是Traceroute:通常目标主机的前一个节点,就应是路由器/防火墙;
② Nmap根据经验方法来判断防火墙的存在及过滤规则的设定——有些端口信息多了一个Filterd。
③ 利用数据包生成器,从网络层开始构造各种特殊的数据包,测试防火墙的反应并加以判断。
防火墙对数据流的三种处理方式:
①允许数据流通过;
②拒绝数据流通过:防火墙向发送者回复一条“该数据流已被拒绝”消息。
③将这些数据流丢弃:防火墙不给发送者任何提示信息——网络扫描所花费时间加长,发送者只能等待回应直至通信超时。
Hping2数据包生成器:主要用于在UNIX平台下探测防火墙,Windows平台下的工具是Hwing/Nemesis。Hping2的用法灵活,使用者可精心设计操作流程,组合使用不同命令选项并综合分析各种探测结果。
Kali上已经集成了hping3,使用hping3对学校的防火墙进行探测。
每秒发一个包,不设置任何TCP,扫0号端口号,没有载荷。0号端口一般是不开放的,但是返回了RA则说明主机是激活的。而且可以得知此主机目前是空闲的,从id可以判断。
向TCP的22号端口发出SYN请求,返回报文说明SSH服务开启。
22端口在监听,80、23端口返回了flags=RA,可能是防火墙拒绝了探测分组,或者探测分组穿过了防火墙不过端口关闭。
3.扫描过程中的隐藏技术
- IP地址欺骗扫描:最好的情况是被冒充的主机是空闲的,而上面的主机刚好空闲,可以冒充它。
- 通过Proxy隐藏
4.扫描对策
1.综合性网络安全扫描评估工具
基于主机系统的扫描器,用于审计主机相关的安全漏洞:目录和文件的权限设置、用户口令等安全策略设置、共享文件系统配置。
基于网络的扫描器:用于远程扫描指定网络内的服务器、路由器、交换机、防火墙等,找到漏洞还可进行模拟攻击,以测试系统的防御能力。
2.端口监测扫描技术
3.修改Banner
四、嗅探技术(Sniffing)
嗅探技术:共享以太网、交换以太网和复杂环境下嗅探技术的实现原理和检测/防范方法。
DoS/DDoS:DoS攻击方法、反射式/反弹式/蠕虫型DDoS及其防范。
1.共享网络的嗅探技术
1.UNIX下的分组捕获过滤机制:BSD的BPF(Berkeley Packet Filter)、SVR4的DLPI、Linux的SOCK_PACKET类型关键字
将网卡设置成混杂模式,并安装BPF分组捕获过滤机制。
分组捕获过滤机制的实现过程为:如果一个数据帧到达网络接口,原本应提交到系统协议栈,会首先提交调用BPF提交给过滤器,然后提交给上层应用。这个时候网卡才重新获得控制权,提交到系统协议帧栈。
2.Windows的NPF(Netgroup Packet Filter)在用户级有可直接利用的库(Winpcap)与NPF接口:1)NPF虚拟设备驱动程序的功能是解析数据包,并将它们原封不动地传给用户层模块。2)packet.dll为Win32平台提供了一个公共的接口。3)wpcap.dll不依赖于操作系统,提供更加高层、抽象的函数。
调用设备驱动程序packet.sys,是使用DDK开发的,基于NDIS(网络驱动接口规范),接受局域网中所有经过的数据报,并可脱离系统的TCP/IP协议栈独立发送数据包。同时,可在NDIS规范下通过此接口编写网络驱动程序,内部细节由packet.sys实现。
3.Linux下网络安全程序的开发技术
2.交换网络的嗅探技术
ARP欺骗的方式、工具和防范
3.嗅探检测技术
- 基于主机的检查
- 基于网络的检查
- 针对系统硬件过滤及软件过滤的测试:如果通过过滤器接收到了不属于自己的ICMP包,会进行响应。
- 针对DNS反向域名解析的测试
- 针对网络和主机响应时间的测试
4.对嗅探程序的攻击:设置网卡为隐秘模式
为方便管理,嗅探主机设置两块网卡,一块设置隐秘模式进行网络监听,另一块连接到独立网段,,有管理员远程配置和管理。
五、攻击技术(Attack Technology)
1.社会工程(Social Engineering)
① 社会工程的核心:攻击者伪装身份并设法让受害人泄露系统信息。
② 一种低技术含量破坏网络安全的方法,其实是高级黑客技术的一种,往往使得看似处在严密防护下的网络系统出现致命的突破口。
③ 利用说服或欺骗的方式,让安全意识薄弱的职员来提供必要的信息,从而获得对信息系统的访问。
2.口令破解(Password Cracking)
① 手工尝试(猜测)
② 对口令文件使用破解工具(字典/暴力/组合攻击)
③ 使用嗅探技术获得口令
④ 使用社会工程方法获得口令
⑤ 恶意网页和恶意电子邮件
⑥ 通过键盘记录器获得口令
⑦ 账号口令锁定机制->拒绝服务攻击
3.IP欺骗(IP Spoofing)
IP欺骗:通过伪造数据包源IP地址,伪装成被信任主机来骗取目标主机信任,从而实现攻击。
一般被登陆服务器设置有:(1)/etc/hosts.equiv文件的作用范围是整个系统,他列出被服务器信任的主机和用户,被信任的用户可以登录服务器而无需要口令;(2)用户目录下的$HOME/.rhosts文件表示该用户信任的主机和用户,远程被信任的用户对本地服务器的使用权限局限于信任者自身的权限。
难点在于序列号的猜测。
对策:
• OS使用强壮的随机序列号生成器使得猜测ISN很难。
• 用SSH代替rlogin这样不安全的网络服务。
• 在边界路由器上进行源地址过滤:禁止外来的却使用本地IP的数据包进入(入口过滤机制)。
• 借助Linux系统路由模块的源地址过滤功能防止欺骗。(antispoof)
• 分割序列号空间能弥补TCP序列号随机性不足,每个连接有自己独立的序列号空间。
4.ARP欺骗(ARP Spoofing)
5.DNS欺骗(DNS Spoofing)
DNS协议的缺陷:DNS服务器向另一个DNS服务器发送解析请求时并不认证被请求方,黑客可以冒充被请求方返回一个被篡改的IP地址。
DNS服务器会缓存被黑客篡改的IP地址,以后对该服务器的同一域名的解析请求,在该条目被缓存的生存期内,得到的结果都将被篡改。与网络嗅探、ARP欺骗、IP欺骗和会话劫持有联系
欺骗方法一:
1)黑客控制本地域名服务器,在其数据库中增加一个条目:将被攻击主机请求解析的域名映射成一个不正确的IP地址。
2)然后将在本地域名服务器上伪造的该条目“注射”到被攻击主机所在的域名服务器的Cache中。
——原理上容易理解,但很难控制DNS服务器,实现起来难度很大。
欺骗方法二:
黑客只能控制所在局域网的某台主机,并可进行
嗅探。
这时黑客要对远程DNS服务器进行欺骗攻击,所采用手段很像IP欺骗:
1)黑客要冒充某个域名服务器的IP地址;2)黑客要能预测某个目标域名服务器所发送DNS数据包的ID号。
欺骗方法三:
建立在ARP欺骗基础上,只能在局域网中实现。当黑客主机至少与DNS服务器或目标主机的某一台处在同一局域网内,黑客可同时欺骗网关和目标主机(网关和DNS服务器/DNS服务器和目标主机)。
DNS欺骗对策:
• 使用最新版本的BIND,并及时安装补丁。djbdns
• 限制区域传输的范围。
• 采用分层的DNS体系结构。
• 将DNS缓存表的映射设置为静态,限制动态更新。
• 将映射的前向查询结果与反向查询结果进行比较。
• 若某台主机遭受DNS欺骗时间不长,登录到网络中其他DNS Server,可比较出不同。
DNS Expert分析各种类型和版本的DNS服务器——带嵌入式安全机制的DNSSEC
6.会话劫持(Session Hijacking)
1.(1)TCP会话劫持:结合嗅探和欺骗技术,在正常的通信过程中,黑客作为第三方参与其中:
① 要么在数据流里注射额外的信息;
② 或将双方的通信模式暗中改变,即从直接联系变成交由黑客中转。
(2)中间人攻击
2.会话注射。最好的会话劫持工具——ettercap
会话劫持对策:
• 尽量用交换式网络代替共享式网络;
• 最好采用SSH、SSL及VPN之类的加密通信机制;
• 坚决防止ARP欺骗及DNS欺骗的发生;
• 限制能连接到用户网络上的连接;
• 使用嗅探器和Cisco IDS检测会话劫持;
• 引入更好的认证系统:在会话过程中,在任意时间内要求用户重新进行认证。
7.拒绝服务(Denial of Service)攻击
攻击的结果是服务器不能正常的对外界提供服务,可用性遭到破坏。
TCP三次握手存在缺陷,可进行伪造源IP,能够掩盖攻击的来源、增强攻击的效果、用以欺骗第三方。
- Ping Of Death(死亡之Ping)
- Teardrop(泪滴/碎片攻击)
- UDP Flood
- Land Attack
- SYN Flood
- Smurf Attack
- 分布式拒绝服务攻击DDoS
8.缓冲区溢出(Buffer Overflow)攻击
C语言本身是在要求严苛的语言时代开发出来的开放新生儿,这种经验不足带来了大量的问题。
1.堆栈概念基础
缓冲区溢出攻击的原理:攻击者利用计算机指令系统弱点,分析有缺陷程序代码,向程序提交恶意超长的输入数据,破坏或改写内存中控制流程的关键信息,获得进程的控制权。
根本原因:C/C++没有对数组引用进行边界检查:
① 如果读取数组以外内容,会使程序得出错误结果
② 如果是写入,可能破坏该进程内存的其它内容
利用栈是从内存高地址向低地址增长的和填充数据的增长方向是由低地址到高地址这一特点,可利用指针实现对更高地址的覆盖。若给局部变量填充的数据超过预先分配的大小,有可能覆盖掉EBP甚至RET。黑客用自己代码覆盖原有RET,就能改变程序流程,让进程转而执行黑客设定的代码。
超长串会往高地址进行覆盖,覆盖到main函数的局部变量、EBP,紧接着就是返回地址。如果可以巧妙地把main函数的返回地址换成自己想要的shellcode的首地址,运行shellcode,之后的事情就会无比美好了。
void function(int a,int b,int c){
char buffer1[5];
char buffer2[10];
int *ret =buffer1+12;//读取栈中存放的function函数的返回地址
(*ret)+=8;//将该返回地址加8
}
void main(){
int x=0;
function(1,2,3);
x=1;//function函数返回时,跳过x=1语句,直接执行printf语句
printf(“%d\n”,x);
}
我们看到,缓冲区溢出成功实现,但是黑客并不会满意,因为用来覆盖原返回地址的并不是一个有效的地址,这样本身没什么意义。事实上,实现缓冲区溢出一共需要三个程序:存在缓冲区溢出漏洞的程序、shellcode和黑客编写的exploit程序。
得到具有root权限的Shell:strcpy、gets、strcat、sprintf、vsprintf、scanf都能导致缓冲区溢出。 通常利用此类漏洞攻击时,植入的字串是通过命令行参数传递给程序的主函数,再传给被调函数的。 通常植入缓冲区的代码用来执行Shell(shellcode) ,如果缓冲区溢出程序本身是SUID的,其属主是root,黑客就得到具有root权限的Shell。
shellcode的设计:利用溢出漏洞攻击具有root权限的程序,如执行类似exec族函数获得被攻击主机的root权限。 • 典型shellcode源程序:使用execve函数执行/bin/sh(Windows中是cmd.exe)命令得到一个Shell。 • 只有shellcode的机器代码才能植入缓冲区,所以要先将该程序编译成汇编代码,适当调整后得到适合系统类型的机器代码(相对固定)。
#include <stdio.h>
void main(){
char *name[2];
name[0]=“/bin/sh”;
name[1]=NULL;
execve(name[0],name,NULL);
}
编译为汇编:
char shellcode[]=
“\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b”
“\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd”
“\x80\xe8\xdc\xff\xff\xff/bin/sh”;
使用shellcode得到Shell的过程:
1)使用一个shellcode数组存放shellcode(shellcode把要执行命令编辑成二进制形式以便执行)。 2)利用程序中的strcpy函数,把shellcode放入程序堆栈。 3)制造数组越界,用shellcode的开始地址覆盖程序返回地址。 4)程序返回时会执行shellcode,从而得到一个Shell。
黑客攻击程序(exploit程序)的设计:
1)黑客构造一个特殊的字串,它包含shellcode,也包含shellcode地址(用它覆盖函数返回地址)。 其中包含最难实现的如何定位栈溢出位置的技术。 2)攻击程序调用exec族函数来执行有溢出漏洞的程序,并将构造好的字串作为参数传递给该程序。
char large_string[128];
void main(){
char buffer[96];
int i;
long *long_ptr=(long *)large_string;
for (i=0;i<32;i++)
*(long_ptr+i)=(int)buffer;
for (i=0;i<strlen(shellcode);i++)
large_string[i]=shellcode[i];
strcpy(buffer,large_string);}
缓冲区容纳不下shellcode时,可将shellcode放在填充字串后面,前面放shellcode地址。 实际应用中黑客执行自己的exploit程序,它独立于有溢出漏洞程序。 在相同系统环境下,exploit进程和被exec族函数执行的溢出进程,其栈的地址空间是一样的。 适当调整exploit进程栈空间的某个地址值,就得到shellcode的入口地址。
90909090是空操作,这里存在的意义是,如果定位到sehllcode返回地址后的空操作,会自动往下读,然后自动运行shellcode。形象点说,就是扩大了靶心的面积,更容易实现缓冲区溢出攻击。
exploit的编写
最后一句实现了进程替换、权限替换和溢出程序调用。将exploit栈空间和漏洞程序栈空间放到了一起,这样寻找栈顶的工作就容易多了。
2.关于SUID/SGID位
SUID位赋予普通用户临时的权限提升,以保证用户可以在系统中完成某些特定的任务。
设置SUID位的原因:
① root用户管理上的方便;
② 暂时提升用户的权限,又没有及时关闭;
③ 否则用户甚至都不能修改自己密码(passwd程序)。
需要尽可能小地限制SUID程序的访问范围,管理员要能了解/查找系统中所有SUID程序。
一旦程序开始执行,就变成动态的进程:
① 系统给进程分配进程标识号(PID);
② 进程还具有两组特殊标识号:
Ⅰ真实(Real)UID和GID:标识运行该进程的用户;
Ⅱ有效(Effective)UID和GID:用于存取权限判断。
缓冲区溢出攻击的三个条件:
① C/C++程序有缓冲区溢出漏洞;
② 创建该程序的用户具有root权限;
③ 该程序设置SUID位:该程序被普通用户或黑客执行时的有效UID为0,具有和root用户一样的ID和权限。
3.UNIX的栈溢出攻击
4.Windows的栈溢出攻击
5.堆/BSS溢出攻击
6.格式化串溢出攻击
7.缓冲区溢出攻击对策
六、权限提升(Escalating Privilege)
七、掩盖踪迹(Covering Tracks)
隐藏自己踪迹,以防被管理员发觉,以便能随时返回被入侵系统继续破坏或作为跳板
1.隐藏上传的文件
2.禁止或篡改日志审计信息
3.清除日志记录
4.改变系统时间造成日志文件数据紊乱
5.干扰入侵检测系统的正常运行
6.修改完整性检测数据
7.使用Rootkit工具
八、创建后门(Creating Bookdoor)
无论用户账号增加/减少、服务开启/关闭等配置如何改变,“后门程序”都能为攻击者提供访问权限。
1.重新开放不安全的服务端口
2.修改系统配置留下漏洞
3.安装嗅探器和建立隐藏通道
4.创建具有root权限的虚假用户账号
5.安装批处理文件
6.安装远程控制工具
7.使用木马程序替换系统程序
8.常用的后门创建方法
1)SUID后门:提升权限后门
2)利用信任关系建立rlogin后门
3)使用Netcat建立远程登录后门
4)采用隧道技术的后门:通过封包来穿越防火墙
5)端口重定向后门:通过中转主机将请求转发给目标
使用Netcat实现端口重定向
6)采用反向连接来穿越防火墙
7)键盘记录器后门
8)木马服务器后门
9)内核级Rootkit后门:工作效率高且很难发现
九、Web攻击技术
1.攻击Web服务器:
样板文件和源代码泄露、缓冲区溢出攻击
资源解析和二次解码攻击(即同义异名攻击)
服务器功能扩展模块问题
服务器端包含(Server Side Include,SSI)问题
SQL注入(SQL Injection)攻击
2.攻击Web浏览器:
对ActiveX和JavaScript脚本的攻击
攻击会话跟踪(cookie)机制
跨站脚本(Cross-Site Scripting,XSS)攻击
同形异义词(Homograph)漏洞
补充
网络诱骗系统(蜜罐):技术分类、蜜罐的优缺点、产品、发展趋势。
蠕虫和木马:蠕虫与其他攻击技术的结合(病毒、DDoS);木马的概念、特征、分类、实现、发展趋势等。
口令猜测攻击:手工猜测、字典攻击、暴力攻击、组合攻击、直接获得明文口令文件、联机破解散列口令文件、下载破解散列口令文件。用户和管理员口令的选择和管理;缺省账号和口令;有无计算机接口的区别;在网络中传送口令问题。
TCP/IP协议缺陷:包括底层和高层协议及安全增强。
Windows/UNIX现有的安全机制、具体安全漏洞的攻击与防范。SYSKEY、 活动目录(AD/LDAP)PKI、EFS、L2TP、Kerberos、IPSec、缓冲区溢出保护/GS。不遗余力的审计、检查和测试——OpenBSD在目前免费Unix中最安全。
Windows/UNIX下黑客获得访问权、权限提升、掩盖踪迹和创建后门的实现原理和防范措施。
Web攻击:IIS、CGI、ActiveX、JavaApplet、JavaScript、Cookie、HTML、ASP、PHP。
特定应用服务漏洞及安全增强:数据库、网管软件、Web服务器/浏览器、路由软件。
日志和审计:各种操作系统、应用程序日志文件格式;日志和审计工具;日志策略。
对FW、VPN、IDS的攻击及防范。
网络攻击与防御技术的关系
① “网络渗透”过程有多个阶段、多种技术,但没有一个统一的定式。
② 网络攻击技术发展很快,今天可行的技术可能明天就过时了。
③ 网络攻击技术的过时主要是因为相应的网络防御技术发展也很快。
④ 许多网络安全技术都是双刃剑,两者相辅相成,互为补充(如:扫描、嗅探和嗅探检测等)
网络防御技术:
1)加密/签名/散列技术(理论基础)
2)主机加固技术(打补丁)
3)病毒防护技术(广义病毒)
4)防火墙技术(门卫/被动/进出)
5)虚拟专用网技术(端-端/密码技术)
6)入侵检测技术(警察/动态/内部)
7)蜜罐技术(主动/位置/误报漏报少)
8)计算机取证技术(主机取证和网络取证)
版权声明:本文标题:【期末复习】网络攻击与防御 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726804481h1031543.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论