分布式接入方式_分布式尽实时端口扫描

hacker|
211

网络安全漏洞扫描器的应用

网络安全扫描器简介

迅速发展的Internet给人们的生活、工作带来了巨大的方便,但同时,也带来了一些不容忽视的问题,网络信息的安全保密问题就是其中之一。

网络的开放性以及黑客的攻击是造成网络不安全的主要原因。科学家在设计Internet之初就缺乏对安全性的总体构想和设计,我们所用的TCP/IP 协议是建立在可信的环境之下,首先考虑的是网络互连,它是缺乏对安全方面的考虑的。而且TCP/IP协议是完全公开的,远程访问使许多攻击者无须到现场就能够得手,连接的主机基于互相信任的原则等等这一些性质使网络更加不安全。

先进的技术是实现网络信息安全的有力武器,这些技术包括:密码技术、身份验证技术、访问控制技术、安全内核技术、网络反病毒技术、信息泄漏防治技术、防火墙技术、网络安全漏洞扫描技术、入侵检测技术等。而在系统发生安全事故之前对其进行预防性检查,及时发现问题并予以解决不失为一种很好的办法,于是网络安全漏洞扫描技术应运而生。

1. 扫描器基本工作原理

扫描器是一种自动检测远程或本地主机安全脆弱点的程序,通过使用扫描器可以不留痕迹的发现远程服务器的各种TCP端口的分配及提供的服务和它们的软件版本,这就能让我们间接的或直观的了解到远程主机所存在的安全问题。

扫描器采用模拟攻击的形式对目标可能存在的已知安全漏洞进行逐项检查。目标可以是工作站、服务器、交换机、数据库应用等各种对象。然后根据扫描结果向系统管理员提供周密可靠的安全性分析报告,为提高网络安全整体水平产生重要依据。在网络安全体系的建设中,安全扫描工具花费低、效果好、见效快、与网络的运行相对对立、安装运行简单,可以大规模减少安全管理员的手工劳动,有利于保持全网安全政策的统一和稳定。

扫描器并不是一个直接的攻击网络漏洞的程序,它仅仅能帮助我们发现目标机的某些存在的弱点。一个好的扫描器能对它得到的数据进行分析,帮助我们查找目标主机的漏洞。但它不会提供进入一个系统的详细步骤。

扫描器应该有三项功能:发现一个主机和网络的能力;一旦发现一台主机,有发现什么服务正运行在这台主机上的能力;通过测试这些服务,发现这些漏洞的能力。

扫描器对Internet安全很重要,因为它能揭示一个网络的脆弱点。在任何一个现有的平台上都有几百个熟知的安全脆弱点。在大多数情况下,这些脆弱点都是唯一的,仅影响一个网络服务。人工测试单台主机的脆弱点是一项极其繁琐的工作,而扫描程序能轻易的解决这些问题。扫描程序开发者利用可得到的常用攻击方法并把它们集成到整个扫描中,这样使用者就可以通过分析输出的结果发现系统的漏洞。

2.端口扫描介绍

真正的扫描器是TCP端口扫描器,这种程序可以选通TCP/IP端口和服务(比如,Telnet或FTP),并记录目标的回答。通过这种方法,可以搜集到关于目标主机的有用信息(比如,一个匿旬用户是否可以登录等等)。而其他所谓的扫描器仅仅是UNIX网络应用程序,这些程序一般用于观察某一服务是否正在一台远程机器上正常工作,它们不是真正的扫描器,但也可以用于收集目标主机的信息(UNIX平台上通用的rusers和host命令就是这类程序的很好的例子)。

2.1 TCP SYN 扫描

扫描程序发送的SYN数据包,好像准备打开一个新的连接并等待反映一样。一个SYN|ACK的返回信息表示端口处于侦听状态。一个RST 返回表示端口没有处于侦听状态。如果收到一个SYN|ACK,扫描程序必须再发送一个RST 信号,来关闭这个连接过程。

优点:不会在目标计算机上留下纪录。

缺点:扫描程序必须要有root权限才能建立自己的SYN数据包。

2.2 TCP FIN 扫描

关闭的端口会用适当的RST来回复FIN数据包,而打开的端口会忽略对FIN数据包的回复。

优点:FIN数据包可以不惹任何麻烦的通过。

缺点:这种方法和系统的实现有一定的关系,有些系统不论是打开的或关闭的端口对FIN数据包都要给以回复,这种情况下该方法就不实用了。

2.3 TCP connect()扫描

操作系统提供connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。

优点:系统中的任何用户都有权利使用这个调用;如果对每个目标端口以线性的方式扫描,将会花费相当长的时间,但如果同时打开多个套接字,就能加速扫描。

缺点:很容易被发现,目标计算机的logs文件会显示一连串连接和连接出错的消息,并且能很快的将它关闭。

3.扫描程序介绍

目前存在的扫描器产品主要可分为基于主机的和基于网络的两种,前者主要关注软件所在主机上面的风险漏洞,而后者则是通过网络远程探测其它主机的安全风险漏洞。

国外,基于主机的产品主要有:AXENT公司的ESM,ISS公司的System Scanner等,基于网络的产品包括ISS公司的Internet Scanner、AXENT公司的NetRecon、NAI公司的CyberCops Scanner、Cisco的NetSonar等。目前国内有中科院网威工作室开发的NetPower产品出现,另外北方计算机公司(***)也有类似产品。 下面介绍一些可以在Internet上免费获得的扫描程序。

3.1 NSS(网络安全扫描器)

(1) NSS由Perl语言编成,它最根本的价值在于速度,它运行速度非常快,可以执行下列常规检查:

■Sendmail

■匿名FTP

■NFS出口

■TFTP

■Hosts.equiv

■Xhost

注:除非你拥有最高特权,否则NSS不允许你执行Hosts.equiv。

(2) 利用NSS,用户可以增加更强大的功能,其中包括:

■AppleTalk扫描

■Novell扫描

■LAN管理员扫描

■可扫描子网

(3) NSS执行的进程包括:

■取得指定域的列表或报告,该域原本不存在这类列表

■用Ping命令确定指定主机是否是活性的

■扫描目标主机的端口

■报告指定地址的漏洞

(4) 提示

在对NSS进行解压缩后,不能立即运行NSS,需要对它进行一些修改,必须设置一些环境变量,以适应你的机器配置。主要变量包括:

$TmpDir_NSS使用的临时目录

$YPX-ypx应用程序的目录

$PING_可执行的ping命令的目录

$XWININFO_xwininfo的目录

如果你隐藏了Perl include目录(目录中有Perl include文件),并且在PATH环境变量中没有包含该目录,需要加上这个目录;同时,用户应该注意NSS需要ftplib.pl库函数。NSS具有并行能力,可以在许多工作站之间进行分布式扫描。而且,它可以使进程分支。在资源有限的机器上运行NSS(或未经允许运行NSS)应该避免这种情况,在代码中有这方面的选项设置。

3.2 Strobe(超级优化TCP端口检测程序)

strobe是一个TCP端口扫描器,它可以记录指定机器的所有开放端口。strobe运行速度快(其作者声称在适中的时间内,便可扫描整个一个国家的机器)。

strobe的主要特点是,它能快速识别指定机器上正在运行什么服务。strobe的主要不足是这类信息是很有限的,一次strobe攻击充其量可以提供给"入侵者"一个粗略的指南,告诉什么服务可以被攻击。但是,strobe用扩展的行命令选项弥补了这个不足。比如,在用大量指定端口扫描主机时,你可以禁止所有重复的端口描述(仅打印首次端口定义)。其他选项包括:

■定义起始和终止端口

■定义在多长时间内接收不到端口或主机响应,便终止这次扫描。

■定义使用的socket号码

■定义strobe要捕捉的目标主机的文件

在获得strobe的同时,必然获得手册页面,这对于Solaris 2.3是一个明显的问题,为了防止发生问题,必须禁止使用getpeername()。在行命令中加入-g 标志就可以实现这一目的。同时,尽管strobe没有对远程主机进行广泛测试,但它留下的痕迹与早期的ISS一样明显,被strobe扫描过的主机会知道这一切(这非常象在/var/adm/messages文件中执行连接请求)。

3.3 SATAN(安全管理员的网络分析工具)

SATAN是为UNIX设计的,它主要是用C和Perl语言编写的(为了用户界面的友好性,还用了一些HTML技术)。它能在许多类UNIX平台上运行,有些根本不需要移植,而在其他平台上也只是略作移植。

在Linux上运行SATAN有一个特殊问题,应用于原系统的某些规则在Linus平台上会引起系统失效的致命缺陷;在tcp-scan模块中实现 select()调用也会产生问题;最后要说的是,如果用户扫描一个完整子网,则会引进反向fping爆炸,也即套接字(socket)缓冲溢出。但是,有一个站点不但包含了用于Linux的、改进的SATAN二进制代码,还包含了diff文件。SATAN用于扫描远程主机的许多已知的漏洞,其中包括但并不限于下列这些漏洞:

■FTPD脆弱性和可写的FTP目录

■NFS脆弱性

■NIS脆弱性

■RSH脆弱性

■Sendmail

■X服务器脆弱性

SATAN的安装和其他应用程序一样,每个平台上的SATAN目录可能略有不同,但一般都是/satan-1.1.1。安装的第一步(在阅读了使用文档说明后)是运行Perl程序reconfig。这个程序搜索各种不同的组成成分,并定义目录路径。如果它不能找到或定义一个浏览器。则运行失败,那些把浏览器安装在非标准目录中(并且没有在PATH中进行设置)的用户将不得不手工进行设置。同样,那些没有用DNS(未在自己机器上运行DNS)的用户也必须在/satan-1.1.1/conf/satan.cf中进行下列设置:$dont_use_nslookuo=1;在解决了全部路径问题后,用户可以在分布式系统上运行安装程序(IRIX或SunOS),我建议要非常仔细地观察编译,以找出错误。

SATAN比一般扫描器需要更多一些的资源,尤其是在内存和处理器功能方面要求更高一些。如果你在运行SATAN时速度很慢,可以尝试几种解决办法。最直接的办法就是扩大内存和提高处理器能力,但是,如果这种办法不行,我建议用下面两种方法:一是尽可能地删除其他进程;二是把你一次扫描主机的数量限制在100台以下。最后说明的一点是,对于没有强大的视频支持或内存资源有限的主机,SATAN有一个行命令接口,这一点很重要。

3.4 Jakal

Jakal是一个秘密扫描器,也就是就,它可以扫描一个区域(在防火墙后面),而不留下任何痕迹。

秘密扫描器工作时会产生"半扫描"(half scans),它启动(但从不完成)与目标主机的SYN/ACK过程。从根本上讲,秘密扫描器绕过了防火墙,并且避开了端口扫描探测器,识别出在防火墙后面运行的是什么服务。(这里包括了像Courtney和GAbriel这样的精制扫描探测器)。

3.5 IdentTCPscan

IdentTCPscan是一个更加专业化的扫描器,其中加入了识别指定TCP端口进程的所有者的功能,也就是说,它能测定该进程的UID。

3.6 CONNECT

CONNECT是一个bin/sh程序,它的用途是扫描TFTP服务子网。

3.7 FSPScan

FSPScan用于扫描FSP服务顺。FSP代表文件服务协议,是非常类似于FTP的Internet协议。它提供匿名文件传输,并且据说具有网络过载保护功能(比如,FSP从来不分叉)。FSP最知名的安全特性可能就是它记录所有到来用户的主机名,这被认为优于FTP,因为FTP仅要求用户的E- mail地址(而实际上根本没有进行记录)。FSP相当流行,现在为Windows 和OS/2开发了GUI客户程序。

3.8 XSCAN

XSCAN扫描具有X服务器弱点的子网(或主机)。乍一看,这似乎并不太重要,毕竟其他多数扫描器都能做同样的工作。然而,XSCAN包括了一个增加的功能:如果它找到了一个脆弱的目标,它会立即加入记录。

XSCAN的其他优点还包括:可以一次扫描多台主机。这些主机可以在行命令中作为变量键入(并且你可以通过混合匹配同时指定主机和子网)。

4. 结束语

随着Internet的应用日渐普及,网络攻击的种类和方式也愈来愈多,扫描程序不太可能集成所有的远程攻击。每发现一个新的漏洞,扫描程序就应该加入检查这个新漏洞的能力,这是一个永不停止的过程。因此扫描器最多提供一个快速观察TCP/IP安全性的工具,通过系统管理员的正确使用,能够避免一些入侵者的恶意攻击,但并不能保证网络的安全。

type 8E是什么文件系统?

Snort分析报告

1.--snort的简介

snort 是一个基于libpcap的数据包嗅探器并可以作为一个轻量级的网络入侵检测系统(

NIDS)。所谓的轻量级是指在检测时尽可能低地影响网络的正常操作,一个优秀的轻量

级的NIDS应该具备跨系统平台操作,对系统影响最小等特征并且管理员能够在短时间内

通过修改配置进行实时的安全响应,更为重要的是能够成为整体安全结构的重要成员。

Snort作为其典型范例,首先可以运行在多种操作系统平台,例如UNIX系列和Windows 9

X.(需要libpcap for Win32的支持),与很多商业产品相比,它对操作系统的依赖性比

较低。其次用户可以根据自己的需要及时在短时间内调整检测策略。就检测攻击的种类

来说,据最新数据表明(2000/12/4)snort共有21类(???)1271条检测规则,其中包括

对缓冲区溢出,端口扫描和CGI攻击等等。SNORT集成了多种告警机制来提供实时告警功

能,包括:syslog、用户指定文件、UNIXSocket、通过SMBClient使用WinPopup对Windo

ws客户端告警。 Snort的现实意义维作为开源软件填补了只有商业入侵检测系统的空白

,可以帮助中小网络的系统管理员有效地监视网络流量和检测入侵行为。

2.snort与其他工具的比较。

Snort的主要用途就是网络监视、数据包的记录和检测入侵行为,下面是与分别具有上述

两种功能的典型工具的比较。

1)--snort与tcpdump的比较

Tcpdump是最为经典的嗅探工具,主要是用于记录网络数据,网络故障的探测诊断工具。

Snort与它的最大的共同之处在于都是基于libpcap的并且支持BPF过滤机制,所以本质上

都是调用的捕获数据包的库函数,但是snort的目的不仅仅是在于记录这个数据包而是从

安全的角度考虑出发区解析它,并且tcpdump主要是分析第二层或者第三层的报文来进行

网络故障诊断,而snort则主要针对于应用层的数据进行分析从而实现检测入侵行为。除

此之外,由于tcpdump旨在快速完整地记录流量,所以它制定了特殊的输出格式,速度快

但是不易看懂,而snort就提供了更为友好的输出格式,有利于系统管理员的直接分析。

--Figure 1 - Typical Snort telnet packet display:

--------------------------------------------------------------------------

20:59:49.153313 0:10:4B:A9:66 - 0:60:97:7:C2:8E type:0x800 len:0x7D

192.168.1.3:23 - 192.168.1.4:1031 TCP TTL:64 TOS:0x10 DF

***PA* Seq: 0xDF4A6536 Ack: 0xB3A6FD01 Win: 0x446A

FF FA 22 03 03 E2 03 04 82 0F 07 E2 1C 08 82 04 ..".............

09 C2 1A 0A 82 7F 0B 82 15 0F 82 11 10 82 13 FF ................

F0 0D 0A 46 72 65 65 42 53 44 20 28 65 6C 72 69 ...FreeBSD (elri

63 2E 68 6F 6D 65 2E 6E 65 74 29 20 28 74 74 79 c.home.net) (tty

70 30 29 0D 0A 0D 0A p0)....

---------------------------------------------------------------------------

--Figure 2 - The same telnet packet as displayed by tcpdump:

---------------------------------------------------------------------------

20:59:49.153313 0:10:4b:d:a9:66 0:60:97:7:c2:8e 0800 125: 192.168.1.3.23

192.168.1.4.1031: P 76:147(71) ack 194 win 17514 (DF) [tos 0x10] (ttl 64,

id 660)

4510 006f 0294 4000 4006 b48d c0a8 0103

c0a8 0104 0017 0407 df4a 6536 b3a6 fd01

5018 446a d2ad 0000 fffa 2203 03e2 0304

820f 07e2 1c08 8204 09c2 1a0a 827f 0b82

150f 8211 1082 13ff f00d 0a46 7265 6542

5344 2028 656c 7269 632e 686f 6d65 2e6e

6574 2920 2874 7479 7030 290d 0a0d 0a

---------------------------------------------------------------------------

2)--snort与NFR的比较

根据Denmac System公司1999年11月的现有商用网络入侵检测工具的调查结果表明,NFR

的综合性能指数高于ISS公司的RealSecure和CA公司的SessionWall,所以其代表了目前

国际上的IDS的最高水准,是一个比较成熟的商业产品。Snort的许多设计思想类似于NF

R,但是在很多方面都显出不足之处,例如无法实现IP Defragmentation等功能,在探测

规则语言的格式上来说,NFR采用的是一种深层次的脚本语言,SNORT与其相比就略显单

薄。但是snort的优势就在于它是开源软件,全世界的爱好者都可以加入它的开发升级工

作中来,其前景是无法限量的。

2.--原理

snort作为一个NIDS[注:基于网络的入侵检测系统(NIDS),其工作原理为在基于共享

网络上检测原始的网络传输数据,通过分析捕获的数据包,主要工作为匹配入侵行为的

特征或者从网络活动的角度检测异常行为,进而采取入侵的预警或记录。从检测模式而

言,snort属于是误用检测(misuse detection)。[注:该方法对已知攻击的特征模式

进行匹配,包括利用工作在网卡混杂模式下的嗅探器被动地进行协议分析,以及对一系

列数据包解释分析特征。]从本质上上来说,snort是基于规则检测的入侵检测工具,即

针对每一种入侵行为,都提炼出它的特征值并按照规范写成检验规则,从而形成一个规

则数据库。其次将捕获得数据包按照规则库逐一匹配,若匹配成功,则认为该入侵行为

成立。目前,snort的检测规则库主要包括了以下几类的入侵行为:

snort的结构主要分为三个部分如图n-1:

l--数据包捕获和解析子系统(Capture Packet Mechanism from link layer and the

packet decoder ):

该子系统的功能为捕获网络得传输数据并按照TCP/IP协议的不同层次将数据包进行解析

。Snort利用libpcap库函数进行采集数据, 该库函数可以为应用程序提供直接从链路层

捕获数据包的接口函数并可以设置数据包的过滤器以来捕获指定的数据。(的详细介绍

请参阅附录N)。网络数据采集和解析机制是整个NIDS实现的基础,其中最关键的是要保

证高速和低的丢包率,这不仅仅取决于软件的效率还同硬件的处理能力相关。对于解析

机制来说,能够处理数据包的类型的多样性也同样非常重要,目前,snort可以处理以太

网,令牌环以及SLIP等多种链路类型的包。

l--检测引擎(the detect engine)

检测引擎是一个NIDS实现的核心,准确性和快速性是衡量其性能的重要指标,前者主要

取决于对入侵行为特征码的提炼的精确性和规则撰写的简洁实用性,由于网络入侵检测

系统自身角色的被动性——只能被动的检测流经本网络的数据,而不能主动发送数据包

去探测,所以只有将入侵行为的特征码归结为协议的不同字段的特征值,通过检测该特

征值来决定入侵行为是否发生。后者主要取决于引擎的组织结构,是否能够快速地进行

规则匹配。

Snort采用了灵活的插件形式来组织规则库,即按照入侵行为的种类划分为相应的插件,

用户可以根据需要选取对应的插件进行检测。目前包括的插件分别如下:

每一类插件中包括了数十条的检测规则,分别代表同一类型的不同入侵行为。对于规则

的定义,snort使用了一种简单的,轻量级的规则描述语言,上述已经提及到检测的最终

行为就是检测数据包中协议的不同字段,例如端口号就是重要的入侵线索。为了更为清

楚地阐述这个问题,我们举一例说明:

攻击名称--NT IIS Showcode ASP

攻击种类--获取非法访问权限。

攻击描述--通过构造特定的URL请求可以非法阅读服务器上的其他文件

host/msadc/Samples/SELECTOR/showcode.asp?source=/msadc/Samples/../../../../.

./boot.ini

入侵特征码 --IP地址:保护网段以外的IP地址。

--协议类型:TCP

--端口:80

--TCP标志位:PUS, ACK

--数据段内容:/selector/showcode.asp

CVE ID--CAN-1999-0736

Bugtraq ID --167

分析以上的这个入侵实例,我们可以看出其实检测该入侵行为的关键是判断端口号和数

据段内容,IP地址、协议类型和TCP标志位只是辅助的特征码。但是当开始分析原始数据

包时,是否应该就直接匹配端口和数据段的内容?无疑针对该入侵行为上述做法的匹配

效率是最高的。但是实际上这样做会降低整体检测的效率,因为入侵系统要对庞大的网

络数据逐一进行检测,应该遵循先检测所有入侵行为的共同特征其次才是个体特征的原

则,例如如果首先检测IP地址,一旦发现并不属于检测范围之内,就立即检测下一个数

据包而并非继续检测该包的其他字段。这样既保证了检测的快速性,又提高了报警的实

时性。

Snort正是按照上述原则定义规则的,将检测规则划分成两个部分:规则头和规则选项。

前者是所有规则共有的包括IP地址、协议类型、端口号,后者根据不同规则包括相应的

字段关键字,例如TCP的标志位或者窗口大小等。检测规则除了包括上述的关于“要检测

什么”还应该定义“检测到了该做什么”,snort定义了三种处理方式——alert(发送报

警信息),log(记录该数据包)和pass(忽略该数据包)并定义为规则的第一个匹配关键

字,这样设计的目的非常简单,旨在在程序中组织整个的规则库,即将所有的规则按照

处理方式组织成三个链表以用于更快速准确地进行匹配,体现了设计者的巧妙之处。

下面我们来举一实例来具体说明规则的定义:

alert tcp !$HOME_NET any - $HOME_NET 80 (msg:"CAN-1999-0736 - IIS-showcode"

;flagsA; content:"/selector/showcode.asp"; nocase

该实例正式针对表(N)中所示的入侵行为所定义的检测规则,通过该例可以看出snort

的规则语言简明实用,基本格式为:

规则动作 协议类型 IP地址 端口号 - 协议类型 IP地址 端口号 (规则选项)

源发送方 目的接受方

关于规则的具体书写规范不再赘述,下面就其关键和特别之处加以说明:

1.-- 变量和操作符

snort作为一个NIDS,主要的目的就是能够保护本网段即及时发现外部网对内部网的攻击

,所以规则中的IP地址的定义主要是针对外部网和内部网地址两种。由此snort引入了变

量的机制,即可以在规则中用变量表示IP地址字段,用户在运行前可根据实际的子网地

址来定义该变量,这样在解析检测规则时snort会自动替换变量值,增加了规则的灵活性

,不过只适应于像IP地址这种基本所有规则都具有同一值。

为了更为准确地表达规则和精确地表示检测范围,snort还定义了三类操作符:

l--否定操作符——“ ! ”

用于表示snort还增加了否定符“!”来区分内部网和外部网。例如例n的!$HOME_NET。

l--方向操作符——“-”和””

用于表示传输的方向,分别表示单向和双向传输。

l--端口描述符——“ : ”

用于表示端口的范围。例如: “600:“表示大于600的端口号。

2. 规则选项

规则选项作为检测时的重要标准组成了snort入侵检测引擎的核心,既易用又非常灵活强

大。首先其灵活性是指可以根据不同的不同行为制定相应的检测选项内容,其次其强大

性是指不仅检测具有一定的广度和深度并且定义了检测到时该做什么 。snort中有15个

规则选项关键字,其中有三个关键字是做为检测到后的回应:

msg - 在报警和包日志中打印一个消息

logto - 把包记录到用户指定的文件中而不是记录到标准输出

resp - 主动反应(切断连接等)

Resp关键字可以对匹配一条Snort规则的流量进行灵活的反应(flexible reponse

-FlexResp)。FlexResp代码允许Snort主动地关闭恶意的连接。该模块合法的参数如下

rst_snd - 向发送方发送TCP-RST数据包

rst_rcv - 向接受方发送TCP-RST数据包

rst_all - 向收发双方发送TCP_RST数据包

icmp_net - 向发送方发送ICMP_NET_UNREACH

icmp_host - 向发送方发送ICMP_HOST_UNREACH

icmp_port - 向发送方发送ICMP_PORT_UNREACH

icmp_all - 向发送方发送上述所有的ICMP数据包。

作为入侵检测系统,理论上只需要检测入侵,并不需要去回应入侵行为的。所以该功能

应该是作为SNORT的附加功能,但是值得一提的是,发送RST和ICMP UNREACH数据包向攻

击方可以暂缓其对目标主机的攻击,我们所研究的一个工具叫做dsniff中的tcpkill就是

利用这个原理进行切断非法连接,但是对于一般的拒绝服务攻击,该方法的作用就不甚

明显了。对于SNORT来说,实现该功能必然会降低检测的的效率尤其是在网络流量特别大

的时候。

另外12中关键字都是针对协议中的不同字段设置的:

关键字--检测内容--主要针对的攻击行为

ttl--检测ip头的ttl的值 --用于对traceroute探测的检测

id--检测ip头的分片id值--黑客的固定攻击,例如设置为31337

dsize--检测包的净荷尺寸的值--缓冲区溢出攻击。

content--在包的净荷中搜索指定的样式--最为重要的一个选项,用于在数据包的数据段

中搜索指定的内容并根据数据触发响应,可以搜索包含混合的文本和二进制数据。并设

置了三个辅助关键字:offset,dsize,nocase

Flags--检测tcp flags的值--非法端口扫描或者其他非法探测主机操作系统类型等。

Seq--检测tcp顺序号的值--检测主机发送的序列号集是否是固定的集合。入侵者可以利

用该值冒充合法用户向被入侵者发送数据,伪装正常的通信以窃取信息或者其他非法活

动。

Ack--检测tcp应答(acknowledgement)的值--Nmap的TCP PING会设置该项的值为0,从而

判断可能正在用Nmap进行非法扫描。

Itype--检测icmp type的值--拒绝服务攻击。注:只作为其中的一种特征。

Icode--检测icmp code的值--可疑的流量。

Session--记录指定会话的应用层信息的内容--记录在TCP会话中的会话数据。

Icmp_id--检测ICMP ECHO ID的值--

Icmp_seq--检测ICMP ECHO 顺序号的值--

Ipoption--监视IP option的特定代码--

Rpc--监视特定应用/进程调用的RPC服务--检测非法的RPC请求,查看RPC请求,并自动将

应用(Application),过程(procedure)和程序版本(program version)译码,如果

所有三个值都匹配的话,该规则就显示成功。

3.预处理程序

预处理程序从Snort版本1.5开始引入,其代码在检测引擎被调用之前先被运行,为检测

做铺垫,从而提高检测的准确性和速度。而且预处理机制采用插件形式,用户和程序员

能够将模块化的插件方便地融入Snort之中。目前snort现有的预处理程序模块有以下三

种:

l--Minfrag

Minfrag预处理程序检查给定尺寸限制的分片数据包。数据包被分片通常是由源和目的主

机之间的路由器引起的。一般说来,商业网络设备不会产生小于512字节的分片包。可以

利用这个事实,来监控含有小分片的流量。

l--HTTP Decode

HTTP Decode用于处理HTTP URI字符串,将串中的数据转化为可读的ASCII字串,用于检

测HTTP的数据信息对付隐蔽的WebURL扫描器和恶意的入侵者。

l--Portscan Detector

Snort Portscan预处理程序的用处:

向标准记录设备中记录从一个源IP地址来的端口扫描的开始和结束。

如果指定了一个记录文件,在记录扫描类型的同时也记录目的IP地址和端口。端口扫描

定义为在时间T(秒)之内向超过P个端口进行TCP连接尝试,或者在时间T(秒)之内向

超过P个端口发送UDP数据包。端口扫描可以是对任一IP地址的多个端口,也可以是对多

个IP地址的同一端口进行。现在这个版本可以处理一对一和一对多方式的端口扫描,下

一个完全版本将可以处理分布式的端口扫描(多对一或多对多)。端口扫描也包括单一

的秘密扫描(stealthscan)数据包,比如NULL,FIN,SYNFIN,XMAS等。如果包括秘密

扫描的话,端口扫描模块会对每一个扫描数据包告警。

network to monitor - 监视端口扫描的目标网络以network/CIDR表示

number of ports - 在探测期间访问的端口数目

detection period - 以秒计数的端口访问时间限制

logdir/filename - 告警信息存放的目录/文件名,告警也可以写入标准的告警文件中。

l--日志及报警子系统(logging/alerting subsystem)

入侵检测系统的输出结果系统的必要特征是实时性和多样性,前者指能够在检测到入侵

行为的同时及时记录和报警,后者是指能够根据需求选择多种方式进行记录和报警。一

个好的NIDS,更应该提供友好的输出界面或发声报警等等。

Snort是一个轻量级的NIDS,它的另外一个重要功能就是数据包记录器,所以该子系统主

要提供了方式:

1.--fast model :采取TCPDUMP的格式记录信息

2. readable model :按照协议格式记录,易于用户查看。

3.alert to syslog: 向syslog发送报警信息。

4.alert to text file :以明文形式记录报警信息。

值得提出的是,snort考虑到用户需要高性能的时候,即网络数据流量非常大,可以将数

据包信息进行压缩从而实习快速的报警。

3.-- 程序结构

1)--snort的整体结构

snort作为优秀的公开源代码的入侵检测系统范例,其整个程序结构清晰,构思巧妙,我

们对于其版本1.6.3的源码进行了深入的分析。Snort共有64个c文件和h文件,首先介绍

程序的整体结构,其流程图如下:

其中最为关键的函数就是ProcessPacket(),--其流程图如下:

2)--数据结构--

snort的主要数据结构就是几个链表,上述已经提及,snort组织规则库的巧妙之处就是

按照规则的处理动作来划分成三个链表,其中每个链表又按照协议类型:TCP,IP和ICMP

分成三个链表,所以所有的规则都会被分配到这个三个链表中。链表中的成员就是描述

每条规则的结构——RuleTreeNode,该结构中的一个重要成员就是记录该规则的处理函

数链表——RuleFpList,一条规则有时候需要调用多个处理函数来进行分析。该结构中

的另外一个重要成员就是规则选项的结构,该结构同样包括该规则的选项信息以及其处

理函数链表。

值得提出的是,并不是每一条规则都分配一个RuleTreeNode结构,因为很多规则的选项

前的头部分是相同的,只需要根据不同的规则选项链取不同的选项函数处理链表。基本

整体的结构如图n所示,所有链表的初始化都是在捕获数据包前进行的。

除以上链表外,snort还定义了预处理、输出的关键字和处理函数链表,设计链表的主要

意图是为了实现插件的思想,即用户何以根据需求添加删除预处理的功能模块。其只要

的数据结构如下:

typedef struct _PreprocessKeywordNode

{

char *keyword;

void (*func)(char *);

} PreprocessKeywordNode;

// 预处理关键字信息结构。

typedef struct _PreprocessKeywordList

{

PreprocessKeywordNode entry;

struct _PreprocessKeywordList *next;

} PreprocessKeywordList;

//预处理关键字链表。

typedef struct _PreprocessFuncNode

{

void (*func)(Packet *);

struct _PreprocessFuncNode *next;

} PreprocessFuncNode;

//预处理函数链表。

所有链表的初始化都是在捕获数据包前进行初始化的,一旦链表都已建立完毕,开始捕

获数据包,每收到一个数据包都会现首先调用预处理程序链表中的函数进行处理后,其

次按照默认地顺序遍历AlertList,PassList和LogList三个链表。遍历时首先根据数据包

的协议类型定位规则链表,其次调用递归函数进行规则的逐一匹配,即首先匹配规则头

,若匹配则继续递归匹配规则选项,若不匹配,直接匹配下一条规则。为了加快遍历的

速度,snort在规则选项中的”content”内容匹配时调用了Boyer-Moore算法。

4.--改进

1.--背景

我们认为snort已经具备了NIDS的基本功能,由于它本身定位在一个轻量级的入侵检测工

具,尽管与商业的入侵检测工具比起来,它的规则语言略显简陋,在报警方式和图形化

使用界面上也显露出不足之处,但是程序的整体结构清晰,规则语言简单实用并提供插

件的功能支持,用户可以添加自己的检测规则和处理函数,这对于规则库的及时更新有

着极为现实的意义。

通过分析,与商业的NIDS相比,SNORT 1.6.3没有设置对IP 分片包的处理功能,即对于

例如“Teardrop”和“Ping of Death”两类利用非法IP分片包进行的攻击无法检测:

?--teadrop——该攻击是针对很多操作系统的TCP/IP协议栈没有正确处理已分段的IP包

的重组。其特征是发送2个或更多特别的分段IP数据报。第一个包是偏移量为0的段,数

据段(分段长度)字节是N,并设置了MF位,第二个包是最后一个分段(MF==0),但它的偏移

量小于N,所有造成两个分段重叠了。为了重组这些包,有弱点的系统就会在TCP/IP栈中

分配非常大的空间,因此导致目标系统因为内存耗尽而停止响应或者重启。

?--Ping of Death——该攻击的特正是向攻击目标发送大量的ICMP分片数据包,当这些

数据包重组时其数据段已经大于65535个字节,系统会因为无法处理这种数据包而造成拒

绝服务或者重启。

?--

2.--方案

3.--实现

什么是端口扫描?

一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行。 在手工进行扫描时,需要熟悉各种命令。对命令执行后的输出进行分析。用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能。 通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。 什么是扫描器 扫描器是一种自动检测远程或本地主机安全性弱点的程序,通过使用扫描器你可一不留痕迹的发现远程服务器的各种TCP端口的分配及提供的服务和它们的软件版本!这就能让我们间接的或直观的了解到远程主机所存在的安全问题。 工作原理 扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息(比如:是否能用匿名登陆!是否有可写的FTP目录,是否能用TELNET,HTTPD是用ROOT还是nobady在跑!) 扫描器能干什么 扫描器并不是一个直接的攻击网络漏洞的程序,它仅仅能帮助我们发现目标机的某些内在的弱点。一个好的扫描器能对它得到的数据进行分析,帮助我们查找目标主机的漏洞。但它不会提供进入一个系统的详细步骤。 扫描器应该有三项功能:发现一个主机或网络的能力;一旦发现一台主机,有发现什么服务正运行在这台主机上的能力;通过测试这些服务,发现漏洞的能力。 编写扫描器程序必须要很多TCP/IP程序编写和C, Perl和或SHELL语言的知识。需要一些Socket编程的背景,一种在开发客户/服务应用程序的方法。开发一个扫描器是一个雄心勃勃的项目,通常能使程序员感到很满意。 常用的端口扫描技术 TCP connect() 扫描 这是最基本的TCP扫描。操作系统提供的connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度。如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点是很容易被发觉,并且被过滤掉。目标计算机的logs文件会显示一连串的连接和连接是出错的服务消息,并且能很快的使它关闭。 TCP SYN扫描 这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。扫描程序发送的是一个SYN数据包,好象准备打开一个实际的连接并等待反应一样(参考TCP的三次握手建立一个TCP连接的过程)。一个SYN|ACK的返回信息表示端口处于侦听状态。一个RST返回,表示端口没有处于侦听态。如果收到一个SYN|ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。这种扫描技术的优点在于一般不会在目标计算机上留下记录。但这种方法的一个缺点是,必须要有root权限才能建立自己的SYN数据包。 TCP FIN 扫描 有的时候有可能SYN扫描都不够秘密。一些防火墙和包过滤器会对一些指定的端口进行监视,有的程序能检测到这些扫描。相反,FIN数据包可能会没有任何麻烦的通过。这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。另一方面,打开的端口会忽略对FIN数据包的回复。这种方法和系统的实现有一定的关系。有的系统不管端口是否打开,都回复RST,这样,这种扫描方法就不适用了。并且这种方法在区分Unix和NT时,是十分有用的。 IP段扫描 这种不能算是新方法,只是其它技术的变化。它并不是直接发送TCP探测数据包,是将数据包分成两个较小的IP段。这样就将一个TCP头分成好几个数据包,从而过滤器就很难探测到。但必须小心。一些程序在处理这些小数据包时会有些麻烦。 TCP 反向 ident扫描 ident 协议允许(rfc1413)看到通过TCP连接的任何进程的拥有者的用户名,即使这个连接不是由这个进程开始的。因此你能,举

站长工具 端口扫描?

一.我在家里玩游戏上网以及下载东西,从来没有被禁止过啊!所以搞不懂家用路由器上的端口映射有什么意义!答:玩游戏不需要管端口映射的问题,因为你是客户端,需要做端口映射的是服务端。二.有些说如果是在单位上网管封了端口,这个端口映射就能发挥作用了,我就奇怪了,网管把端口都封了,你还怎么映射?再映射也没用啊答:看封什么端口,如果是出口的话,就没用了。如果是入口,那么就可以用端口映射解决。三.朋友说在路由器上做了映射后,用站长工具扫描端口,会发现该端口打开了,我扫描后发现无论是映射还是不映射,扫描都是关闭的,这是怎么回事。答:因为你不了解端口映射,所以我猜测可能是你映射没成功。举例给你说明吧。你一台路由器中接了2台PC。每台都从路由器中获取一个内网IP地址。但是他们却公用同一个公网IP地址。如果两台PC都做了网站服务器,且都用80端口。因为公用外网IP只有一个,所以从外网访问的话,路由器不知道80端口到底该访问的是第一台PC还是第二台PC。所以要通过端口映射来指定其中一台PC的端口为80。仅仅是端口映射中的一个小例子,帮助楼主理解下。

一般情况下,采用端口扫描可以比较快速了解某台主机上提供了哪些网络服务

 通过135端口入侵实际上是利用RPC漏洞来攻击计算机的。一般情况下135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)

协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地 执行远程计算机上的代码;

使用DCOM可以通过网络直接进行通信,能够跨包括HTTP协议在内的多种网络传输。RPC本身在处理通过TCP/IP的消息交换部分有一个漏洞,该漏洞是由于错误地处理格式不正确的消息造成的。会影响到RPC与DCOM之间的一个接口,该接口侦听的端口就是135。

下面我就来介绍一下通过135端口入侵的方法。

(1)通过135端口入侵,攻击者首先需要查找网络上存在135端口漏洞的主机地址,在查找此类主机过程中,可以使用一些扫描工具,比如SuperScan就是典型的端口工具之一。在SuperScan逗开始地文本框中输入需要扫描的起始地址,然后在逗结束地文本框里填写好扫描结束的IP地址,在逗扫描类型地选项中选择逗所有端口定义地单选按钮,并在右侧的文本框中输入逗135地。再点击逗开始地按钮即可开始扫描。扫描结束后,在下方的列表中可以查看目标主机打开的端口。然后再点击逗Save地按钮选好保存路径,把里面有漏洞的IP整理下即可。

(2)得到有漏洞后,我们还有一个功能强大的扫描工具,比如NTSscn汉化版。然后在逗主机文件逗处点击逗打开地按钮找到我们刚才保存的IP路径,在连接共享$处选择逗WMI扫描地,在逗扫描打开端口的主机地处填写135端口。最后点击逗开始地即可。要不了多久就会有结果显示。

(3)获得漏洞主机用户名以后,我们需要一个开启的工具,那就是Recton v2.5。好了,万事具备之欠那逗东风地拉。把刚刚扫描的IP输入TELNET界面的逗远程主机地处,以及用户名和密码,不过一般情况下密码都是空。下一步点击逗开始执行地按钮等待把TELNET打开吧。打开后按WIN+R输入CMD进入再输入Telnet IP 回车,会提示让你输入用户名,把用户名输入后,回车即可进入主机。而且得到的还是SYSTEM权限。

下一步就是为我们加了拥有管理员权限的用户,看看我杰作。最后我们可以上传一些远程性木马软件作为后门,比如灰鸽子,冰河等。在这里我就不在展示。我还是喜欢3389端口,那我就给他上传个开启3389的脚本,不过对于开启3389端口的工具网上还真的不少,比如Recton v2.5就有这个功能。好了3389端口已经成功开启大家看我连接的。怎么样,就这么轻松得到了一台。是不是很过瘾啊。

0条大神的评论

发表评论