在Internet上,各主机间通过TCP/TP协议发送和接收数据报,各个数据报根据其目的主机的ip地址来进行互联网络中的路由选择。可见,把数据报顺利的传送到目的主机是没有问题的。问题出在哪里呢?我们知道大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据报传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进来。
本地操作系统会给那些有需求的进程分配协议端口(protocal port,即我们常说的端口),每个协议端口由一个正整数标识,如:80,139,445,等等。当目的主机接收到数据报后,将根据报文首部的目的端口号,把数据发送到相应端口,而与此端口相对应的那个进程将会领取数据并等待下一组数据的到来。说到这里,端口的概念似乎仍然抽象,那么继续跟我来,别走开。
端口其实就是队,操作系统为各个进程分配了不同的队,数据报按照目的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,这个队也是有可能溢出的,不过操作系统允许各进程指定和调整自己的队的大小。
不光接受数据报的进程需要开启它自己的端口,发送数据报的进程也需要开启端口,这样,数据报中将会标识有源端口,以便接受方能顺利的回传数据报到这个端口。
端口的分类:
在Internet上,按照协议类型分类,端口被分为TCP端口和UDP端口两类,虽然他们都用正整数标识,但这并不会引起歧义,比如TCP的80端口和UDP的80端口,因为数据报在标明端口的同时,还将标明端口的类型。
从端口的分配来看,端口被分为固定端口和动态端口两大类(一些教程还将极少被用到的高端口划分为第三类:私有端口):
固定端口(0-1023):
使用集中式管理机制,即服从一个管理机构对端口的指派,这个机构负责发布这些指派。由于这些端口紧绑于一些服务,所以我们会经常扫描这些端口来判断对方是否开启了这些服务,如TCP的21(ftp),80(http),139(netbios),UDP的7(echo),69(tftp)等等一些大家熟知的端口;
动态端口(1024-49151):
这些端口并不被固定的捆绑于某一服务,操作系统将这些端口动态的分配给各个进程,同一进程两次分配有可能分配到不同的端口。不过一些应用程序并不愿意使用操作系统分配的动态端口,他们有其自己的‘商标性’端口,如oicq客户端的4000端口,木马冰河的7626端口等都是固定而出名的。
端口在入侵中的作用:
有人曾经把服务器比作房子,而把端口比作通向不同房间(服务)的门,如果不考虑细节的话,这是一个不错的比喻。入侵者要占领这间房子,势必要破门而入(物理入侵另说),那么对于入侵者来说,了解房子开了几扇门,都是什么样的门,门后面有什么东西就显得至关重要。
入侵者通常会用扫描器对目标主机的端口进行扫描,以确定哪些端口是开放的,从开放的端口,入侵者可以知道目标主机大致提供了哪些服务,进而猜测可能存在的漏洞,因此对端口的扫描可以帮助我们更好的了解目标主机,而对于管理员,扫描本机的开放端口也是做好安全防范的第一步。
常见端口的介绍
由于本人知识有限,在这里只介绍一些浅显的内容。
1)21 ftp
此端口开放表示服务器提供了FTP服务,入侵者通常会扫描此端口并判断是否允许匿名登陆,如果能找到可写目录,还可以上传一些黑客程序做近一步入侵。要想关闭此端口,需要关闭FTP服务。
2)23 Telnet
此端口开放表示服务器提供了远程登陆服务,如果你有管理员的用户名和密码,可以通过这个服务来完全控制主机(不过要先搞定NTLM身份认证),获得一个命令行下的shell。许多入侵者喜欢开启这个服务作为后门。要想关闭此端口,需要关闭Telnet服务。
3)25 smtp
此端口开放表示服务器提供了SMTP服务,一些不支持身份验证的服务器允许入侵者发送邮件到任何地点,SMTP服务器(尤其是sendmail)也是进入系统的最常用方法之一。要想关闭此端口,需要关闭SMTP服务。
4)69 TFTP(UDP)
此端口开放表示服务器提供了TFTP服务,它允许从服务器下载文件,也可以写入文件,如果管理员错误配置,入侵者甚至可以下载密码文件。许多入侵者通过在自己机器运行此服务来传文件到目标机器,从而实现文件的传输。要想关闭此端口,需要关闭TFTP服务。
5)79 finger
用于获得用户信息,查询操作系统,探测已知的缓冲区溢出错误, 回应从自己机器到其它机器finger扫描。
6)80 http
此端口开放表示服务器提供了HTTP服务,可以让访问者浏览其网页等,大部分针对IIS服务器的溢出攻击都是通过这个端口的,可以说是入侵者最常攻击的一个端口了。要想关闭此端口,需要关闭HTTP服务。
7)110 POP3
用于客户端访问服务器端的邮件服务。POP3服务有许多公认的弱点。关于用户名和密码交换缓冲区溢出的弱点至少有20个,这意味着入侵者可以在真正登陆前进入系统,成功登陆后还有其它缓冲区溢出错误。
8)TCP的139和445
许多人都很关心这两个端口,那我就来详细的介绍一下吧:
首先我们来了解一些基础知识:
1 SMB:(Server Message Block) Windows协议族,用于文件打印共享的服务;
2 NBT:(NETBios Over TCP/IP)使用137(UDP)138(UDP)139(TCP)端口实现基于TCP/IP协议的NETBIOS网络互联。
3 在WindowsNT中SMB基于NBT实现,即使用139(TCP)端口;而在Windows2000中,SMB除了基于NBT实现,还可以直接通过445端口实现。
有了这些基础知识,我们就可以进一步来讨论访问网络共享对端口的选择了:
对于win2000客户端(发起端)来说:
1 如果在允许NBT的情况下连接服务器时,客户端会同时尝试访问139和445端口,如果445端口有响应,那么就发送RST包给139端口断开连接,用455端口进行会话,当445端口无响应时,才使用139端口,如果两个端口都没有响应,则会话失败;
2 如果在禁止NBT的情况下连接服务器时,那么客户端只会尝试访问445端口,如果445端口无响应,那么会话失败。
对于win2000服务器端来说:
1 如果允许NBT, 那么UDP端口137, 138, TCP 端口 139, 445将开放(LISTENING);
2 如果禁止NBT,那么只有445端口开放。
我们建立的ipc$会话对端口的选择同样遵守以上原则。显而易见,如果远程服务器没有监听139或445端口,ipc$会话是无法建立的。那么如何关闭2000上这两个端口呢?
139端口可以通过禁止NBT来屏蔽
本地连接-TCP/IT属性-高级-WINS-选‘禁用TCP/IT上的NETBIOS’一项
445端口可以通过修改注册表来屏蔽
添加一个键值
Hive: HKEY_LOCAL_MACHINE
Key: System\Controlset\Services\NetBT\Parameters
Name: SMBDeviceEnabled
Type: REG_DWORD
value: 0
修改完后重启机器
9)3389 Terminal Services
此端口开放表示服务器提供了终端服务,如果你获得了管理员的用户名和密码,那么你可以通过这个服务在图形界面下完全控制主机,这的确是一件令人向往的事情,但如果你得不到密码也找不到输入法漏洞,你会感到束手无策。要想关闭此端口,需要关闭终端服务。
端口的相关工具
1 netstat -an
的确,这并不是一个工具,但他是查看自己所开放端口的最方便方法,在cmd中输入这个命令就可以了。如下:
C:\>netstat -an
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1025 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1026 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1028 0.0.0.0:0 LISTENING
TCP 0.0.0.0:3372 0.0.0.0:0 LISTENING
UDP 0.0.0.0:135 *:*
UDP 0.0.0.0:445 *:*
UDP 0.0.0.0:1027 *:*
UDP 127.0.0.1:1029 *:*
UDP 127.0.0.1:1030 *:*
这是我没上网的时候机器所开的端口,两个135和445是固定端口,其余几个都是动态端口。
2 fport.exe和mport.exe
这也是两个命令行下查看本地机器开放端口的小程序,其实与netstat -an这个命令大同小异,只不过它能够显示打开端口的进程,信息更多一些而已,如果你怀疑自己的奇怪端口可能是木马,那就用他们查查吧。
3 activeport.exe(也称aports.exe)
还是用来查看本地机器开放端口的东东,除了具有上面两个程序的全部功能外,他还有两个更吸引人之处:图形界面以及可以关闭端口。这对菜鸟来说是个绝对好用的东西,推荐使用喔。
4 superscan3.0
它的大名你不会没听说过吧,纯端口扫描类软件中的NO.1,速度快而且可以指定扫描的端口,不多说了,绝对必备工具。
保护好自己的端口:
刚接触网络的朋友一般都对自己的端口很敏感,总怕自己的电脑开放了过多端口,更怕其中就有后门程序的端口,但由于对端口不是很熟悉,所以也没有解决办法,上起网来提心吊胆。其实保护自己的端口并不是那么难,只要做好下面几点就行了:
1 查看:经常用命令或软件查看本地所开放的端口,看是否有可疑端口;
2 判断:如果开放端口中有你不熟悉的,应该马上查找端口大全或木马常见端口等资料(网上多的很),看看里面对你那个可疑端口的作用描述,或者通过软件查看开启此端口的进程来进行判断;
3 关闭:如果真是木马端口或者资料中没有这个端口的描述,那么应该关闭此端口,你可以用防火墙来屏蔽此端口,也可以用本地连接-TCP/IP-高级-选项-TCP/IP筛选,启用筛选机制来筛选端口;
端口即门口
在计算机领域中,“端口”词经常会被提到,它由英文“Port”翻译过来,是计算机与外界通信交流的出口。其中硬件领域的端口又称接口.如USB端口、串行端口等,是物理意义上的端口。在软件领域中提到的端口一般是指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区,是逻辑意义上的端口。端口是计算机与外部通信的途径,没有它,计算机便无法与外界进行沟通交流,虽然我们无法用肉眼看到它们,但它们的的确确存在着,并默默地为我们服务。
端口号
大家知道,一台拥有IP地址的主机可以提供多种服务,比如Web服务.FTP服务、SMTP报务等。主机是如何区分不同的网络服务呢?显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系。实际上主机是通过“IP地址十端口号”来区分不同的服务的。当目的主机接收到数据报后将根据报文首部的目的端口号,把数据发送到相应端口,而与此端口相对应的那个进程将会领取数据并等待下一组数据的到来。比如:我们上网浏览网页时采用80端口,FTP采用21端口,发送邮件采用25端口,接收邮件采用110端口等等。这四项服务都运行在同一台计算机上,并且使用同一个IP地址,当一个数据包到达该计算机时,如何知道该把哪个数据包送到哪个服务程序去呢?这就是我们使用端口号的原因。通过不同端口,计算机与外界就可以进行互不干扰的通信。
如果这样说你还不是很明白,那就把自己的IP地址比作为大楼(大楼代表IP地址),里面住了许多人(许多人代表不同的应用程序),外面来了一封信(信代表数据包),就得知道收信人的地址和门牌号,其中收信人的地址代表IP地址,门牌号就是我们所说的端口。没有端口这个“门牌号”就不知道“信件”该交给谁。这么解释你该明白了吧?需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信, 但你的电脑则可能使用“3457”这样的端口,如图1所示。
其实,端口就是队,操作系统为各个进程分配了不同的队,数据包按照目的端口被推入相应的队中,等待被进程取用。不光接收数据包的进程需要开启它自己的端口,发送数据包的进程也需要开启端口,这样,数据包中将会标识有源端口,以便接收方能顺利的回传数据报到这个端口。在TCP/IP协议的实现中,端口操作类似于一般I/O操作,进程获取一个端口,相当子获取本地唯一的I/O文件,可以用一般的读写方式访问。
常见的TCP端口如下:
服务 端口 解 释
Http 80 超文本传输协议。其实就是提供网页(WEB)服务
Ftp 21 文件传输协议。采用FTP方式可以对服务器上传下载文件。
Smtp 25 简单邮件传输协议。主要用于发送邮件。
POP3 110 邮件接受协议,主要进行邮件接收。
Telnet 23 远程登陆协议。常见文字BBS就是这种。现在主要用来进行远程维护。
常见的UDP端口如下:
服务 端口 解 释
DNS 53 域名解析服务。
OICQ 8000/4000 服务器使用8000端口,OICQ软件使用4000端口
图1 常见端口列表
面向连接服务和无连接服务
在开篇时我们提到过计算机之间相互通信的时候会采用两种方式:面向连接服务和无连接服务。
面向连接服务要经过三个阶段:数据传数前先建立连接,连接建立后再传输数据,数据传送完后释放连接。面向连接服务,可确保数据传送的次序和传输的可靠性。这种方式类似打于我们日常生活中的打电话,两个人如果要通电话,必须先建立连接——拨号,等待应答后才能相互传递信息,最后还要释放连接——挂电话。也就是说发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议。
另外一种是无连接服务,它只有传输数据阶段,消除了除数据通信外的其它开销。只要发送实体是活跃的,无须接收实体也是活跃的。它的优点是灵活方便、迅速,特别适合于传送少量零星的报文,但无连接服务不能防止报文的丢失、重复或失序。这种方式类似于我们日常生活中的写信,写好收信人的地址和姓名以后往邮筒一扔,收信人就能收到。这种无应答的方式大多采用UDP协议(如QQ)。对应这两种协议的服务提供的端口,也就分为TCP端口和UDP端口。由于TCP和UDP两个协议是独立的,因此各自的端口号也相互独立,比如TCP有210端口,UDP也可以有210端口,两者并不 冲突,因为数据报在标明端口的同时,还将标明端口的类型。在TCP/IP协议中,端口是传输层的内容,是面向连接的。
端口号分配
类似于文件描述符,每个端口都拥有一个叫端口号的整数描述符,用来区别不同的端口,端口号的范围是从O到65535。从端口的分配来看,端口被分为公认端口(Well Known Ports)、注册端口(Registered Ports)和动态和/或私有端口(Dynamicand/or/Private Ports)三种类型。其中O~1023为公认端口,使用集中式管理机制即服从一个管理机构对端口的指派。由于这些端口紧密绑定于一些服务,所以我们会经常扫描这些端口来判断对方是否开启了这 些服务。比方说,在默认情况下WWW服务的端口号是80;1024—49151为注册端口,这些端口并非固定的捆绑于某一服务,而是松散地绑定于一些服务,即有许多服务绑定于这些端口,操作系统将这些端口动态的分配给各个进程,同一进程两次分配有可能分配到不同的端口。不过一些应用于程序并不愿意使用操作系统分配的动态端口 他们有其自己喜欢的“固定”端口,如QQ客户端的4000端口,木马冰河的7626 端口等都是固定而出名的;49152—65535为动态和/或私有端口,从理论上说,不应为服务分配这些端口。不过,有很多木马喜欢使用它们,如木马网络公牛使用的234444端口,而木马BO2000使用的则是54320端口。以下是部分常见端口,如图2所示。
查看打开的端口
端口在入侵和防御中有什么用呢?如果把目标主机比喻为一间房屋,则端口就是房屋的门(假设该房间有好多“门”)。入侵者要进入这所房间,必须通过门才能进入对于入侵害来说,了解这间房间开有哪几扇“门” 都是什么样的“门”,“门”后面有什么东西是十分必要的。攻击者通常使用软件扫描目标计算机,得到目标计算机打开的端口,从而了解目标主机提供了哪些服务,进而猜测到可能存在的漏洞。如果计算机端口打开太多,而管理者又不知道,那就很危险了。出现这种情况,大都是由于以下两种原因:一种是提供了服务而管理者没有注意,比如安装IIS的时候 软件就会自动增加很多服务,而管理员可能没有注意到;另外一种就是服务器被攻击者安装木马,通过特殊的端口进行通信。这两种情况都很危险。说到底就是管理员不了解服务器提供的服务,减小了系统安全系数。所以对我们来说,扫描本机的开放端口对我们就显得非常必要了。
那么该怎么来查看端口呢,有两种方法:一种是利用系统内置的命令,如在CMD中输入。netstst—an就可以检查自己的电脑上已经打开的端口。另一种方法是利用第三方端口扫描软件如使用软件FPort,FPort可以把本机开放的TCP/UDP端口同应用程序关联起来,这和使用”netstat—an”命令产生的效果类似,但是该软件还可以把端口和运行着的进程关联起来,并可以显示进程PID名称和路径。如果你喜欢图形界面可以使用activeport.exe,它也是用来查看本地机器开放端口的软件,它还有一个令人心动的功能——可以关闭端口。至于superscan、Portscan之类的端口扫描软件大家可能已经很熟悉了,这里就不多说了。
管理端口
我们面临的下一个问题是,该怎样管理端口呢?很简单利用系统内置的管理工具就可以。以Windows 2000 Server为例,只要双击任务栏右下角的网络连接图标,再双击打开“本地连接状态”,点击“属性”按钮后选中“Internet协议(TCP/IP)”,然后点击“属性”按钮,会弹出的“Internet协议(TCP/IP)”对话框 点击“高级”按钮,在“高级TCP/IP设置”中选择“选项”标签,选中“TCP/IP筛选”,然后点击“属性”铵钮。在“TCP/IP筛选”对话框里选择“启用TCP/IP筛选”的复选框,然后把左边“TCP端口” 中的“只允许”选上。增加你允许使用的端口,如80、21、25等,重新启动以后未经允许的端口就关闭了。当然你也可以采用第三方软件管理端口如防火墙等管理端口,其实防火墙就是一整套制定好的IP地址及其端口的访问规则,你可以改变这些规则来打开和关闭指定的端口。大家可以打开自己的防火墙如天网防火墙或瑞星防火墙等试试就知道了