分享
 
 
 

PortSentry实战

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

简介

1.能够检测到的端口扫描

2.监视模式和处理方式

A.安装

1.编辑portsentry_config.h文件

CONFIG_FILE

WRAPPER_HOST_DENY

SYSLOG_FACILITY

SYSLOG_LEVEL

2.编辑PortSentry的配置文件portsentry.conf

TCP_PORTS

UDP_PORTS

ADVANCED_PORT_TCP

ADVANCED_PORT_UDP

ADVANCED_EXCLUDE_TCP

ADVANCED_EXCLUDE_UDP

IGNORE_FILEB

BLOCKED_FILE

HISTORY_FILE

BLOCK_UDP

BLOCK_TCP

KILL_ROUTE

KILL_HOST_DENY

KILL_RUN_CMD

SCAN_TRIGGER

PORT_BANNER

3.编辑portsentry.ignore文件

4.编译

B.使用

C.测试

D.输出信息以及记录文件

E.总结

简介

PortSentry是Abacus工程的一个组成部分。Abacus工程的目标是建立一个基于主机的网络入侵检测系统,可以从http://www.psonic.com的到关于Abacus工程更为详细的信息。

1.能够检测的端口扫描

PortSentry主要用来检测外部对主机的端口扫描,它能够对多种扫描方法进行检测,包括:

完全连接扫描

这是最基本的一种扫描方式,使用connect()系统调用,建立完整的TCP连接,如果连接能够建立,就表明目标主机的目标端口打开。

SYN/半公开扫描

因为不用建立完整的TCP连接,所以这种方法通常称为半公开扫描。这种扫描方法不进行三次握手建立TCP连接,只是向目标主机发出一个SYN数据包。然后等待来自目标主机的相应。如果收到SYN|ACK数据包,表示目标端口打开;如果收到RST数据包就表示端口没开。

FIN扫描

向目标主机发出FIN数据包进行扫描,由Uriel Maimon在Rhrack第49期文15提出。如果收到RST数据包,就表示目标端口关闭;如果没有收到数据包,就表示目标端口可能打开。

NULL扫描

使用这种方法发出的探测包中,所有TCP包头标志都被关闭和圣诞树(xmas)扫描相反

圣诞树扫描

探测包TCP包头的所有标志都被打开,象灯都被打开的圣诞树,够形象吧:)

UDP扫描

使用recvfrom()和write()系统调用扫描

以上无法包括的其它类型的扫描

为了便于对PortSentry的使用,本文对一些端口扫描技术做了一些简单的解释,如果想了解更加详细的技术细节请参考http://www.insecure.org/nmap关于nmap的技术文档。

2.监视模式和处理方式

PortSentry可以对一般的TCP、UDP扫描进行监视,使用-tcp、-udp选项;对于隐秘扫描,PortSentry有四种检测模式:-stcp、-atcp、-sudp、-audp。有两种方法设置PortSentry需要监视的端口:

使用预定义端口列表。在配置文件中,指定需要监视的端口列表,一旦发生对这些端口的刺探行为,PortSentry就被激活。

反向端口绑定。你可以指定PortSentry监视某个范围内,除了被系统网络精灵进程绑定端口之外的所有端口,用户也可以指定不需要监视的端口。使用这种配置方法,会使PortSentry对端口扫描行为很敏感,从另一方面看,也会产生大量的误报警,凡事有利则必有弊嘛:)。

如果检测到端口扫描,PortSentry有多种方式应付扫描行为:

使用syslog()系统调用将扫描行为记录到日志中

将发起扫描的主机名加入到/etc/hosts.deny文件中,这种方式需要TCP_Wrappers的配合

自动修改路由表,删除到发起扫描主机的路由,使回应数据包无法返回

自动修改本地包过滤程序的配置,丢弃来自恶意主机的数据包

A.安装

如果你经常使用源代码安装软件,可能会习惯于./configure、make、make install的方式。但是,PortSentry到目前为止还没有configure脚本,只能手工对一些选项进行配置,然后再进行编译安装。使用这种安装方式很容易造成编译错误,或者即使编译通过,安装后因为无法找到配置文件等原因,而使PortSentry程序无法执行。下面将详细介绍起安装过程。

1.编辑portsentry_config.h文件

portsentry_config.h文件中定义了一些很重要的信息,对于portsentry能否正常运行至关重要。

CONFIG_FILE

PortSentry配置文件的路径

WRAPPER_HOST_DENY

tcp_wrappers的hosts.deny文件所在的路径,PortSentry能够使用tcp_wrappers应付扫描行为,它将发起扫描的主机放到hosts.deny文件中,tcp_wrappers就会拒绝从这个主机发起的连接。

SYSLOG_FACILITY

PortSentry使用的syslog facility。它使用的默认syslog facility是LOCAL_DAEMON,使用这个syslog facility,syslogd一般会把PortSentry的警告信息记录在/var/log/messages文件中,这取决于/etc/syslog.conf文件。

系统中,如果某个精灵程序不使用自己的日志文件,那么它的日志信息将被syslogd记录到/var/log/messages文件,造成这个文件的信息非常庞大、杂乱,不容易阅读。因此用户希望指定PortSentry自己的日志文件,专门保存PortSentry发出的警告信息。

可以按照以下步骤设置PortSentry自己使用的日志文件:

修改portsentry_config.h文件

修改PortSenry_config.h文件的SYSLOG_FACILITY一行,就可以改变PortSentry使用的日志FACILITY:

SYSLOG_FACILITY LOG_LOCAL0 /*LOG_LOCAL0-7都可以*/

修改/etc/syslog.conf文件

在/etc/syslog.conf文件中加入下面一行,设置PortSentry使用的日志文件。你也可以选择自己喜欢的日志文件名。^_^

local0.* /usr/local/psionic/portsentry/portsentry.log

做了以上的修改后,syslogd将把PortSentry产生的报警信息同时记录到/usr/local/psinic/portsentry/portsentry.log和/var/log/messages两个文件。如果想避免这种情况,还要继续修改/etc/syslog.conf文件。在这个文件有一行:

*.info;mail.none;news.none;authpriv.none; /var/log/messages

把它改为:

*.info;mail.none;news.none;authpriv.none;local0.none /var/log/messages

重新启动syslogd程序

# /etc/init.d/syslog restart

SYSLOG_LEVEL

警告信息的sylog级别。一般不必修改。

2.编辑PortSentry的配置文件portsentry.conf

PortSentry使用portsentry.conf文件作为自己的配置文件。用户可以编辑这个配置文件设置PortSentry的各项功能,用户也可以在编译安装完成后的使用过程中,根据自己的实际情况进行调整。

TCP_PORTS

在TCP监视模式(-tcp)下使用,指定需要PortSentry监听的端口号。端口号使用逗号分开,中间不能有空格。PortSentry会对端口进行绑定,绑定的数量默认是64,在源代码的portsentry.h文件中定义#define MAXSOCKS 64。目前还没有配置选项对其进行设置置,如果想使用其它值,需要修改源代码。

如果使用隐秘扫描检测模式,PortSentry不会对端口进行绑定,而是使用RAW套接字,在套接字层对连接进行监视。

UDP_PORTS

在UDP监视模式(-udp)下使用,指定要监视的UDP端口。你应该慎重使用UDP模式,稍有不慎就会给攻击者以可乘之机,对系统进行拒绝服务攻击。攻击者可以在数据包中伪造一个端口范围,诱使PortSentry阻塞主机的这些端口,达到拒绝服务攻击的目的。如果你的站点是一个比较出名的站点,访问量很大,最好不要使用UDP监视模式。

ADVANCED_PORT_TCP

设置要监视的最大TCP端口号。PortSentry会对小于这个值的端口号进行监视。默认值为1024,最大可以是65535。建议不要超过1024,因为如果超过这个值,PortSentry就会产生大量的误报警。使用-atcp参数启动PortSentry时,会用到这个值。

ADVANCED_PORT_UDP

设置PortSentry监视的最大UDP端口号。使用-audp参数启动PortSentry时用到。

ADVANCED_EXCLUDE_TCP

和ADVANCED_PORT_TCP配合使用。设置在TCP高级监视模式(-atcp)下,不需要PortSentry监视的端口。在一些普通的端口上,一些远程客户程序的错误会造成PortSentry发出误报警信息,可以使用这个配置选项去掉这些端口,例如:ident、SSL。

ADVANCED_EXCLUDE_UDP

和ADVANCED_PORT_UDP配合使用。设置不用PortSentry监视的端口。

IGNORE_FILE

有时候需要指定一些IP地址,无论如何都不要使PortSentry阻塞这些IP地址,例如:127.0.0.1。在一个文件中保存要被忽略的IP地址,然后使用IGNORED_FILE指定这个文件所处的路径,默认的情况下是/usr/local/psionic/portsentry/portsentry.ignore。文件中,每个IP地址占一行,例如:

127.0.0.1

0.0.0.0

BLOCKED_FILE

指定记录被阻塞主机IP地址的临时文件。默认是portsentry.blocked,在记录时,PortSentry会自动在后面加上监视模式名作为文件的后缀。例如:portsentry.blocked.tcp、portsentry.blocked.udp。

HISTORY_FILE

指定被阻塞着急IP地址的文件。BLOCKED_FILE和HISTORY_FILE的区别:BLOCKED_FILE指定的文件是一个临时文件,每次PortSentry运行,被阻塞的主机IP,重新启动PortSentry后,就会被清空,其记录就被加入到HISTORY_FILE指定的文件。默认是portsentry.history。

BLOCK_UDP

设置针对UDP探测的自动反应功能。。有三个选项:

0

只对探测行为进行记录。不阻塞探测报文中的源地址。

1

启动KILL_RUN_CMD指定的命令,然后运行KILL_ROUTE指定的命令,阻塞探测报文中的源地址。

2

只启动KILL_RUN_CMD设置的命令,使用外部的程序或者脚本处理探测行为。

UDP报文比较容易伪造,攻击者可以伪造大量的UDP报文,使其源地址为大量不同的IP地址,然后使用这些数据包进行探测,就可以诱使PortSentry启动对UDP扫描的自动相应机制,将受保护主机从网络上隔离,从而完成对其的拒绝服务攻击。因此,应该慎重使用PortSentry的这个功能。对于连接到Internet上的主机不要使用这项功能保护,设置BLOCK_UDP=0。对于内部网络的主机,建议打开这项功能,设置BLOCK_UDP=1,这样可以检测到网络地址欺骗行为,而且从某种程序上还可以检测到被侵入的主机。

BLOCK_TCP

设置针对TCP探测主动相应功能。也有0、1、2三个选项。解释同上。

对于TCP连接,PortSentry会等待建立一个完整的连接,而这是非常难以伪造的,因此TCP伪造报文不是什么太大问题。将这项功能打开吧。:)

BLOCK_UDP和BLOCK_TCP是下面几个功能选项(KILL_ROUTE、KILL_RUN_CMD)的入口。

KILL_ROUTE

如果检测到攻击,PortSentry能够主动断开到恶意主机的路由。使用KILL_ROUTE指定切断路由,PortSentry使用的外部命令。注意:出于安全的考虑,一定要使用完全路径指定PortSentry使用的外部命令。宏$TARGETS$被用来指定恶意主机的地址。PortSentry可以使用两种方式切断恶意主机的路由:

1).直接使用route命令

你可以使用route命令将到恶意地址的网关定义为本地子网的一个地址,一般使用localhost地址127.0.0.1即可。

KILL_ROUTE="/sbin/route add $TARGET$ 127.0.0.1"

这是最基本的设置,你可以使用route命令其它的一些选项,关于route命令的用法请参考手册页,man route。在portsentry.conf文件中已经提供了一些针对不同系统的设置。

2).使用包过滤

系统内核一般具有包过滤功能,因此使用包过滤,比直接使用使用route程序具有更大的灵活性。

ipfwadm

Linux-2.0.x内核使用ipfwadm程序管理IP防火墙:

KILL_ROUTE="/sbin/ipfwadm -I -i deny -S $TARGET$ -o"

ipchains

Linux-2.2.x内核使用ipchains:

KILL_ROUTE="/sbin/ipchains -I input -s $TARGET$ -j DENY -l"

iptables

Linux-2.4.x内核使用iptables:

KILL_ROUTE="/sbin/iptables -I input -s $TARGET$ -j DENY --log-level alert --log-prefix "stealth_scan"

KILL_HOST_DENY

如果系统使用了TCP_wrappers,可以使用KILL_HOST_DENY使PortSentry将恶意主机地址放到hosts.deny文件中。TCP_wrappers会拒绝从这些地址发起的连接。

KILL_HOSTS_DENY="ALL: $TARGET$ : DENY"

KILL_RUN_CMD

KILL_RUN_CMD设置PortSentry执行KILL_ROUTE命令之前使用的命令。如果BLOCK_UDP/BLOCK_TCP=2,PortSentry就会只使用KILL_RUN_CMD指定的命令。

可以使用KILL_RUN_CMD指定针对攻击行为的反应程序或者脚本。你可以编写一个脚本,使其能够对目标主机进行扫描,并且能够针对发现的各种系统缺陷,发起反击(难度很大,不过不是不可能^_^);或者向对方发出警告信息。但是,建议你不要对攻击主机采取过于激烈的措施,因为发起端口扫描的系统本身可能已经被侵入了。注意上面的选项中用到了两个宏$TARGET$和$PORT$,但是它们在这个选项中是无效的。

SCAN_TRIGGER

PortSentry有一个状态引擎,能够记住连接的主机。使用SCAN_TRIGGER选项可以使PortSentry忽略一定数量的端口扫描,不对其作出反应。通过增减这个选项的值,可以调整对于扫描的敏感程度。这个选项的默认值是0,也就是对端口扫描立刻作出反应。如果不想使PortSentry过于敏感的话,可以把这个值设置为1或者2,这样会减少误报警的发生。如果这个值再大,就会是系统过于迟钝。

PORT_BANNER

设置标题(banner)信息,一旦PortSentry被激活,就可以把这段文本信息发送到连接主机。不过,如果你不想惹事的话,建议你不要使用这个功能,即使用了也不要使用伤人的话。否则可能触怒一些人,他们会想尽一切办法干掉你的系统。注意如果你使用隐秘扫描检测模式(-stcp或者-sudp),这项功能无效。

3.编辑portsentry.ignore文件

portsentry.ignore文件保存你不想阻塞的主机地址,至少要包括127.0.0.1以及本机的接口。建议你不要把内部网络的所有IP地址都放到这个文件中。因为如果内部网络的某太主机被侵入了,攻击者就可能利用这太主机攻击PortSentry保护的主机。反之,如果被侵入主机IP地址不在这个文件,PortSentry可能检测到它被侵入了。

4.编译

PortSentry目前支持linux、bsd、solaris、hpux、hpux-gcc、freebsd、openbsd、netbsd、bsdi、aix、osf等系统。可以根据自己的平台进行编译。例如,在Linux系统上:

#make linux

#make install

PortSentry就会被安装到自己的路径。默认是:/usr/local/psionic/portsentry。你也可以设置自己喜欢的路径,请参考A.1.编辑portsentry_config.h文件。

为了方便使用,可以将/usr/local/psionic/portsentry加入到PATH变量中。

B.使用

安装完毕以后,就可以启动PortSentry了。启动portsentry非常简单,它只有六个操作模式参数。注意:每次只能使用一种监视模式。这六个监视模式是:

portsentry -tcp

基本TCP端口绑定模式。PortSentry将检查所有的配置文件,接着在后台绑定所有在portsentry.conf文件中指定的TCP端口(默认情况下,不超过64个)。如果你想检查PortSentry的启动状态,可以浏览其日志文件。PortSentry使用的默认日志文件是/var/log/messages,你也可以根据需要指定自己的日志文件。

portsentry -udp

基本UDP端口绑定模式。PortSentry检查配置文件,接着在后台绑定所有的UDP端口(默认情况下,不超过64个)。可以从日志文件中的到PortSentry的启动状态。

portsentry -stcp

TCP隐秘扫描检测模式。如果使用这种检测模式,PortSentry会打开一个RAW套接字,监视所有进入的报文。如果某个向内报文的目的端口是被监视端口,PortSentry就会进行反应动作。这种检测模式可以检测到connect()扫描、SYN/半公开扫描以及FIN扫描。

portsentry -atcp

高级TCP隐秘检测模式。在这种模式下,PortSentry回对某个范围的端口号进行监听,需要被监听的端口号范围由ADVANCED_PORTS_TCP指定,还可以使用ADVANCED_EXCLUDE_TCP指定在这个范围中,不需要监听的端口号。在此,你应该注意以下问题:

这种模式在所有的

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有