端口扫描
原作:Prabhaker Mateti
出处:
http://www.cs.wright.edu/~pmateti/Courses/499/Probing/References
翻译:杜香和
摘要:这篇演讲稿介绍了攻击者们常用来发现Internet上不安全主机的端口
扫描技术,文章还描述了基于nmap,portsentry和zonealarm三个工具的一项实验。
这项工作部分由NSF DUE-9951380支持。
文章内容
- 教育目标
-
端口扫描
- 端口号
- 简单端口扫描技术
- 秘密扫描SOCKS
- 端口探测
- 反弹扫描
- UDP扫描
- ICMP扫描
- 指纹识别操作系统
- 端口扫描工具
- 端口扫描侦察工具
- 实验
- 致谢
- 参考书目
- 介绍端口扫描技术.;
- 可有效的利用端口扫描审计工具,如nmap;
- 可有效的利用端口侦察工具。
端口扫描
端口扫描是一种攻击者用来发现他们可以进入服务器的很常用的侦察技术。所有局域内或通过Modem连到Internet上的机器运行了很多监听常用和非常用端口的服务。攻击者通过端口扫描发现可用的端口(正处于监听状态的端口)。事实上,端口的扫描是向每个端口一次发送一个消息的过程。根据端口的回应来确认该端口是否可用和更进一步侦察它的漏洞。
各种不同的扫描技术概括如下。要想完全理解这些内容必须对IP过滤和其它防火墙技术有一定的了解。所以你可以在后面再重新阅读这章。
端口号
正如你所知,公用IP地址由world-wide registrars控制并且在全球都是唯一的。端口号并没有被控制,但在过去的很长时间里已经形成了对一些特定的服务有了公认的端口号。端口号只在一个计算机系统中是唯一的,端口号是由16无符号数组成。端口号被分为三段:常用端口(0..1023),保留端口(1024..49151)和动态/私有端口(49152..65535)。
常用端口
所有的操作系统都遵循传统的通行仅当超级用户打开从0到1023号端口。常用端口(又称为标准端口)被IANA(互相网号码分配授权单位, http://www.iana.org)分配给服务。在Unix中,文本文件/etc/services(在windows 2000下为%windir%\system32\drivers\etc\services
)列出了这些服务名和所用的端口号。以下是从该文中提取的几行。
echo 7/tcp Echo
ftp-data 20/udp File Transfer [Default Data]
ftp 21/tcp File Transfer [Control]
ssh 22/tcp SSH Remote Login Protocol
telnet 23/tcp Telnet
domain 53/udp Domain Name Server
www-http 80/tcp World Wide Web HTTP
试图用一个未授权用户程序打开一个在0..1023范围内的端口是不能成功的,用户程序可以打开任何一个未分配的1023以上的端口。
非常用端口
通过一个非标准端口,就是我们常常简单化地认为的1023以上的端口。事实上在此范围内的端口号中,也有一些“标准“的端口,例如:
wins 1512/tcp Microsoft Windows Internet Name Service
radius 1812/udp RADIUS authentication protocol
yahoo 5010 Yahoo! Messenger
x11 6000-6063/tcp X Window System
一些恶意的程序常常散布很广,它们到处搜寻,收集到了这些常用的端口号码。
简单端口扫描技术
最简单的端口扫描(例如:发送一些经过仔细挑选建立的包到选定的目标端口)是试图打开被扫描者的0到65535号端口看些是打开的。
TCP connect(): 连接系统通过唤起一个本机上提供的可以用来打开所有感兴趣端口的程序。如果该端口处于监听状态,连接将会成功,否则不能连接是无法通过的。
Strobe: 闸门扫描是一个相对较窄的扫描,仅仅是寻找那些功击者已经普遍知道如何去攻击的服务器。闸门这个名字来源于一个原始的TCP扫描程序,而现在已成为所有扫描工具的共同特征。
Ident协议允许那些通过TCP连接到计算机上的任何进程来窥视计算机的用户名,即便是那个进程并没有被初始化。所以,例如:可以通过连接80号端口然后用Ident来判断HTTP服务是否在root下运行。
秘密扫描
从攻击者的角度来看通过端口扫描存在的一个问题是,它很容易被在此端口监听的服务所记录在访问日志里。他们会观察连进的程序,然后他们就登记一个错误。有很多的秘密扫描技术能够越过这个问题。秘密扫描工具是一种不会被审核工具发现到的扫描方法。显然,这是一场比赛——也许一个月后秘密扫描将不会这么神气了。
端口扫描器通过释放数据包到不同的端口来扫描一个主机。因此,慢速扫描(一天或者更久的时间)也变成了一种秘密技术了。另外一种秘密扫描技术是“反向映射“,当你试图在网络上搜索所有的主机时,然后通过产生“主机不可到达“的ICMP信息来确定哪些IP不存在。
IP包分片: 扫描器从IP分片中劈开TCP头。这样可绕过包过滤和防火墙,因为它他看不到一个完整的TCP头所以不能对应相应的过滤规则。许多包过滤器和防火墙要求所有的IP碎片(例如:Linux内核中的CONFIG _IP _ALWAYS _DEFRAG既是),但许多网络并不能提供避免的队列中丢失信息性能。
SYN扫描: 这种技术又叫做半开连接扫描,因为TCP连接并没有完成。一个SYN包发送(就像我们准备打开一个连接),目标机器上返回SYN和ACK,这就表示该端口处于监听状态,返回RST表示没有监听。TCP层并不会通知服务进程,因为连接并没有完成。
FIN扫描: 典型的TCP扫描是试图建立连接(以最少的步骤)。另一个技术是发送错误的包到一个端口,并期望处于监听状态的端口发回一个不同的错误消息而不是关闭端口的消息。扫描器发送一个FIN包,这将使打开的端口关闭。关闭端口时将恢复一个RST的FIN包。相反,开启的端口会忽略所有查询的包。这在TCP中是要求这样的。如果没有服务在监听目标端口,操作系统也将产生一个错误消息。如果有服务处于监听状态,操作系统将丢弃这个发送过来的包。因此,没有信息返回表示有服务在此端口监听。但是,有的包可能会在线路上发生意外丢失或被防火墙过滤,因此这并不是一个高效的扫描技术。
在XMAS扫描中用到了一些其他的技术,它是把TCP包中的所有标志都设置好了。或所有标记都没有被设置的空扫描。但是,不同的操作系统对这些扫描的回应是不同的,所以识另不同的操作系统甚至操作系统的版本和补丁等级都很重要。
SOCKS 端口探测
SOCKS是一种允许多台计算机共享公用Internet连接的系统。之所以攻击者会扫描SOCKS,是因为大多数用户的SOCKS配置有错误。
许多产品都支持SOCKS,一个典型的用户产品就是WinGate, WinGate是一个安装在个别的机器上软件用来和Internet连接。所有其它在内网的机器连接Internet都要通过这台机器上运行的WinGate。
SOCKS错误配置将允许任意的源地址和目标地址通行。就像是允许内部的机器访问Internet一样,外面的机器也可以访问内部的机器。更重要的是,这可能允许攻击者通过你的系统访问其它的Internet上的机器,使得攻击者隐藏他自己的真实地址。
IRC聊天服务器经常扫描客户端以检查SOCKS服务是否打开。他们将通过发送一个消息给那些不知道如何解决这个问题的人而把他们剔出去。如果你收到这样一个消息,你可以查看客户端是否是WinGate执行的检查。一个错误的定位可能导致如果一个应用程序暂时无效的话。在这种情况下,这看起来象是内部的机器在攻击SOCKS服务器。
反弹扫描
对于攻击者来说隐藏他们行踪是能力是很重要的。因此,攻击者快速搜索Internet,查找他们可以的攻击系统。
FTP反弹扫描利用了FTP协议本身的弱点。它要求代理FTP连接支持。这种反弹通过FTP服务隐藏了攻击者来自哪里,该技术与IP隐藏了攻击者地址的欺骗类似。例如:evil.com与target.com建立了FTPserver-PI (协议解析器)控制连接,要求server-PI初始化一个活动的server-DTP(数据传送进程)发送一个文件到Internet的任何地方。
一种端口扫描技术就是使用这种方法从ftp代理服务器来扫描tcp端口。因此你可以在防火墙后与FTP服务建立连接,然后扫描那些很可能被封锁的端口(如:139)。如果FTP服务允许读出或写入数据进一个目录(如:/incoming),你可以发送任意数据到这个被发现可以打开的端口。我们的技术是利用端口(FTP)命令来发现和记录一些虽然被动但却在监听目标机器特定的端口user-DTP用户。然后我们试着列出当前地址目录,结果被发送到server-DTP。如果我们的目标主机正在监听指定的端口,该传送就会成功(产生一个250和一个226回应)。否则将得到“425消息:不能建立数据连接:连接被拒绝“,然后我们再向目标主机的下一个端口发送其它的PORT命令。用这种方法的优势很明显(很难追踪到,可绕开防火墙);主要的缺点是比较慢,并行许多FTP服务执行最终屏蔽代理的特征。
查找器: 大部分的查找服务器允许命令转寄通过查找器支持递归查询。例如:“rob@foo@bar“查询将向“bar“询问“rob@foo”,引起向“bar“查询“foo“。这种技术可以用来隐藏查询的原始来源。
E-mail: 发送垃圾邮件的人试图通过SMTP服务器转发他们的垃圾邮件。因此,对smtp试探的方法在网上就经常被使用。
Socks: Socks允许几乎所有的协议穿过中介机器。因此,攻击者对SOCKS的探测扫描在网上是常见的。
HTTP proxy: 大多数网站服务都提供代理,便于所有的web传输都可由个别带有过滤器的服务很好的管理以提高性能。但有许多这种服务都配置错误以至于允许Internet上的任何请求,允许攻击者通过第三方转发攻击。对HTTP代理的试探在今天很常见。
IRC BNC: 攻击者喜欢通过用其它机器绕接他们的连接来隐藏自己的IRC标识。一个叫“BNC“ 的很特别的程序就是用了这种方式危及到机器的安全。
UDP 扫描
端口扫描通常指对TCP端口的扫描,它是定向连接的,因此给攻击者提供了很好的反馈信息。UDP的应答有着不同的方式,为了发现UDP端口,攻击者们通常发送空的UDP数据包,如果该端口正处于监听状态,将发回一个错误消息或不理睬流入的数据包;如果该端口是关闭的,大多数的操作系统将发回“ICMP 端口不可到达“的消息,这样,你可以发现一个端口到底有没有打开,通过排除方法确定哪些端口是打开的。ICMP和UDP包都不是可靠的通信,所以这种UDP扫描器当出现丢包时(或者你得到了一堆错误的位置)必须执行包重法。同样,这种扫描技术因为实现了RFC1812的意见和限制ICMP消息错误的发送速率所以也慢。例如:Linux内核限制那些不可到达目的地的消息的速度是每4秒钟80次,当产生错误的速率超过以上标准时就会以1/4秒的延迟来作为加罚。
有些人认为UFP扫描是不完美的和没有意义的,并非如此!让我们看看最近Solaris rpcbind
(Sun Microsystems Security Bulletin Bulletin Number: #00167, April 8, 1998)发现的漏洞rpcbind, Rpcbind能发现隐藏于32770以上的没有确定位置的UDP端口。所以端口111被防火墙封锁并不影响。但是你能发现高于30,000以上的端口是处于监听状态的吗?有了UDP扫描器,你可以做到!
UDP recvfrom()和write()扫描
: 非root用户不能直接读取ICMP Port Unreach消息,
Linux提供了一种方法可以间接通知到用
户。例如:
第二次对一个关闭的UDP端口调用write()总是会失败。很多扫描器,如:netcat和pscan.c,都是这样。用recvfrom()访问未封装的UDP套接字,一般都返回
“重试
“消息。如果没有收到
ICMP错误报告,就会返回ECONNREFUSED(连接拒绝)。
ICMP扫描
ICMP扫描并不是真正的端口扫描,因为ICMP并没有一个确切的端口。但是它常可以用来ping网内的机器以确定哪台机器是连网的。ICMP扫描也可并行执行,所以速度很快。
指纹识别操作系统
指纹识别是一种解析系统回应,来确定到底是出什么问题的技术。对数据的重新组合被发送到系统而引起系统的回应。数据正确,系统有同样的回应,但一般都不对错误的数据作出同样的回应。
端口扫描工具
这里列出三种安全审计工具: SAINT, nmap
,和 nessus. 在这三种之中,nmap是明显的和主要的端口扫描工具;所以在这里加以讨论。SAINT和nessus将在安全审计一章讨论。
nmap由Foydor开发的著名端口扫描器。按照Foydor的话说: “nmap对大型网络端口扫描很有用,尽管它在一台主机上也工作的很出色。让我产生开发nmap的思想是TMTOWTDI (There\’s More Than One Way To Do It条条大道通罗马)。这是Perl的口号,但同样可以应用在扫描器上。有时你需要的是速度,而有时你需要的又是隐藏,在许多情况下,绕过防火墙是必要的。更不用说扫描不同协议(UDP, TCP, ICMP,等等)了,你不可能用同一种扫描方式做完所有的事,同样你也不希望用10种不同的扫描方法,每一种方法都有各自的界面和性能来完成这件事情。所以我整合了所有我知道的扫描技术开发了nmap“。
部分实验基于nmap的。
端口扫描侦察工具
在Unix下,写一个非隐藏扫描侦察器很简单,你可以打开SOCK_RAW,使协议为IPPROTO_IP协议,然后调用recvfrom(),捕获数据包并分析它们。侦察隐藏扫描得在内核层进行。一个被探测的端口的明显的特征是“在短时间内几个包来自同一地址而有不同的目的地“,另一个信号是“一个没有监听的端口有SYN(连接请求) “。显然,还有很多种其它方法可以侦察端口扫描。
记住:攻击者常常也使用IP地址欺骗,所以侦察器会告诉我们我们被端口扫描了,但不一定告诉我们来自哪儿。但是,端口扫描有时会泄漏其它的信息,通过这些信息,可以得到一些欺骗地址扫描的真实来源。例如:如果我们终端接收到的包有IP TTL 255标记,实际上我们就知道他们发送的包来自于我们本地网络而不去管他们是什么信息,例如我们只能说攻击者在5跳之内,我们不能准确说出他距我们有多远。开启TTL和源端口号可以给我们一些启示,例如端口扫描类型(只对隐藏扫描)或攻击者使用的操作系统(只对全TCP连接扫描),当然这并不是完全确定的。例如,nmap设置TTL 为255,源端口号为49724,而Linux内核设置TTL为64.
实验
在这个实验过程中,需要一些来自于SAINT手册的段落:
做一个不友好的邻居: 未经过他人亲自许可,扫描他人的主机或网络通常被认为是非常粗鲁和反社交的行为;最好在扫描本网络以外的机器时先进行询问。
请注意考虑周到和巧妙,未经授权扫描你的网上邻居,即使你认为这是善意的,也会被当作严重侵犯的,不但造成恶意或不好的感觉,也可能会有法律问题。
攻击,侦探,扫描 什么是攻击,什么是侦探和什么是扫描?这几种分得并不是很清晰,尤其是系统管理员有更多的了解和意识到很多信息在Internet上传送时。举个例子,一个来自远方站点的查找算攻击吗?在不知道任何有关攻击的动机的情况下,这是不能断定的。“查找器战争“,或者两个站点使用相同的tcp包装或者相似的软件的时候,都会自动地查找远方的站点而并非处于本意要这么做的。
要注意很多的探测器在控制台上将会产生消息或者会对远方的目标发出警告,尽管如此,你也应该注意假警告的潜在,目标也就在指向你了。
目标:在一台机器上故意配置错误的服务。在另一台机器上运行一个端口扫描器来最先发现它的脆弱点。
所有的工作都将在操作系统和Internet安全(OSIS)实验室,429 Russ中完成。使用了19到30号PC。而比允许使用其它的WSU工具。
这项实验要求你阅读操作手册,手册中包括了实验目的和在实验组织不可缺少的详细设计资料。你将在实验过程是得到:
a 端口岗哨 http://www.psionic.com/abacus/portsentry/
b 区域警报(个人使用可从http://www.zonelabs.com/免费下载)可发觉端口扫描。
c nmap
不管是GUI前后调用namapfe,还是nmap被安装在实验室的所有机器上,复制本地端口岗哨和区域警报都位于匿名FTP机器的Cocke. osis. cs. wright. Edu上。
下载这些到你的压缩硬盘上。有这些区域警报文件中存在一Windows NT/2000自动安装运行文件,其它的都是Linux文件。
选择三台机器:P0,P1和P2,把这三台机器接入以太网交换机。.你将以root用户登录这三台机器。
在机器P0上,生成并安装端口岗哨,把可执行文件保存在你的硬盘上,你将会在P1机器上用到这些文件。
在P1机器上故意削弱一些你选择的服务,添加一些服务到这个设备中,在P1上启动端口岗哨。
启动机器P2进行Windows NT。如果区域警报没有安装,则安装,并运行。
在机器P0上启动nmapfe来探测机器P1和P2上的所有端口。
恢复机器P1到最初设置。
得到这个实验的详细资料,以及所有机器上的日志文件。也得到你分析有关通过nmap发现的东西。
致谢
这篇文章是由http://advice.networkice.com/Advice/Underground/Hacking/Methods/Technical/Port_Scan/上提供的资料,以及nmap文档组合而成。
参考书目
1. Ron Gula, How to Handle and Identify Network Probes, April 1999, http://www.securitywizards.com/ [Local Copy] Required Reading.
- Hobbit, The FTP Bounce Attack, The original paper on the subject. http://www.insecure.org/
nmap
/ hobbit.ftpbounce.txt Reference. - Fyodor, Remote OS detection via TCP/IP Stack Finger Printing. Written: October 18, 1998 Last Modified: April 10, 1999. http://www.insecure.org/
nmap
/nmap
-fingerprinting-article.html Required Reading. - solar designer, Designing and Attacking Port Scan Detection Tools, Phrack Magazine, Volume 8, Issue 53 July 8, 1998, article 13 of 15, http://www.phrack.com/ or http://phrack.infonexus.com/search.phtml?view&article=p53-13 Recommended Reading.
- List of ports used by Trojans, http://www.simovits.com/nyheter9902.html Reference.
附:本人英语较差,如果错误或不明白之处,请查阅原文