应用服务安全性

    [阴 January 11, 2008 10:09 | by ]
来源:CnFan  作者:lycxy  
今天我们讲一下应用服务的安全性。
   应用服务安全,顾名思义,就是指应用服务也就是主机上运行的网络应用服务是否能够稳定、持续运行,不会受到非法的数据破坏及运行影响。它是网络安全的重要组成部分。(网络安全包括操作系统安全、应用服务安全、网络设备安全、网络传输安全等)网络应用服务包括Web服务、FTP服务、DNS服务、Mail服务、Data服务、远程登录服务及其他服务。这个篇幅比较大,所以我们不能像“网络侦察技术分析”(http://bbs.cnfan.net/thread-11095-1-1.html)那样大篇幅的运用图片了,大家跟我一起回到文字时代吧。在这里,我们也是大概的做个介绍,具体的安全操作大家查阅更为详细的安全操作指南。

NO.1 Web服务安全。

Web服务包括三点:
1、静态脚本服务
2、动态脚本服务(脚本很可能就成为获得信息的非正当的服务脚本,80%以上的网站入侵事件都是由脚本安全造成的)
3、Web Service(微软提出三层应用的关键技术,是三层结构中客户端和系统服务搭建桥梁的中间层应用服务控件(中间件))
Web服务分为C/S和B/S两类:client/server结构(属于瘦客户类型)、Browser/Server(客户为浏览器,服务器为Web Server),通常是多层(或三层)结构中的第一层。在Web应用中,Web Server后面常常与数据库打交道。大家平时所遇到的基本都是B/S结构,B/S之间的通讯协议是HTTP协议(位于TCP之上),默认的端口为80。主要功能就是客户发出对页面的请求,服务器送回这些页面,这极大的需要Web页面的表述和交互能力包括:各种标记、超链接、交互功能(表单、脚本)、交互能力的扩展(Java Applet, ActiveX等)。
Web服务的安全性分两点:
1、服务器端安全性:Web pages的访问控制机制、可用性(防止拒绝服务、抵御各种网络攻击)
2、客户端安全性:个人信息的保护、防止执行恶意代码

服务端安全:

服务端主要漏洞关系如图:

Highslide JS


服务端面临的安全隐患是最大的:
1、最危险的当然是脚本安全,最显著的就是ASP了,最常用也是最危险的动态脚本语言。其主要漏洞为:filesystemobject组件(FSO)篡改下载FAT分区上的任何文件的漏洞、输入标准的HTML语句或者JavaScript语句会改变输出结果、Access MDB数据库有可能被下载的漏洞及asp程序密码验证漏洞。
2、近几年在国内流行的是SQL注入(国内专利,国外一般不搞这种没技术含量的东西,再次鄙视某些所谓黑客),它与脚本入侵是有明显的区别的,脚本入侵是针对网站的编码脚本语言,而SQL是针对数据库,通过提交特殊结构的语句,可以得到数据库类型、数据库名、数据表名及相应字段,如果用一些注入工具,事半功倍,不过即使用工具也要懂一些基本的原理,很多东西不是单靠工具就能做到的(比如提权)。
3、“盗链”,其定义为:此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。
4、DoS/DDoS攻击。分两类,一类是带宽攻击,一类是流量攻击。最常见的是流量攻击,例如CC攻击就是利用一大堆代理服务器同时访问站点,使IIS服务器耗尽资源,特别是当大批的代理服务器同时访问带有数据库交互的动态ASP、PHP页面时,会在很短的时间内使服务器崩溃。

说到这里我补充一句,强烈建议大家使用VIF防火墙防御脚本、注入,盗链,CC攻击。它是我见过的最高效的保障Web服务安全的软件防火墙了。

为增强Web服务安全,可使用linux/unix服务器系统和APACHE,经常查看LINUX下APACHE服务,配置APACHE下的ACL。

另外Web服务的协议本身也具有安全性支持:
1、身份认证Basic Authentication
Digest Access Authentication(可抵御缺省口令攻击、重放攻击、中间人攻击,可自己添加服务器端的口令管理策略)
2、保密性TLS(基于PKI的认证,双向认证模式:单向TLS认证+客户提供名字/口令)
Microsoft passport

另外,有些应用使用SSL/TLS,我们可以为Web Service申请一个证书(https)。
Web Server往往是网络攻击的入口点,而我们为了提供Web Service,必须要开放端口和一些目录,还要接受各种正常的连接请求,因此防火墙对Web Server的保护是有限的,所以我们要及时打上Web Server软件厂商提供的补丁程序,特别是一些主流的服务软件,比如MS的IIS,要控制好控制目录和文件的权限。另外Web应用开发人员注意,在服务端的运行代码中,对于来自客户端的输入一定要进行验证还要防止缓冲区溢出。

客户端安全性:

Cookie的设置,保护用户的隐私
PKI设置,确定哪些是可信任的CA
对可执行代码的限制,包括JavaApplet,ActiveX control

NO.2 FTP服务

FTP即文件传输协议(File Transfer Protocol,FTP) ,通常被攻击者上传后门程序文件到主机,然后通过种种方式转移成为激活的后门。
FTP的特性:促进文件(程序或数据)的共享、支持间接或隐式地使用远程计算机、帮助用户避开主机上不同的、可靠并有效地传输数据
FTP的包过滤方式:FTP使用两个独立的TCP连接(一个在服务器和客户程序之间传递命令和结果(通常称为命令通道),另一个用来传送真实的文件和目录列表(通常称为数据通道));多数FTP服务器和客户程序都支持 “反向方式”或“PASV方式”。
FTP的PORT方式:当FTP客户以PORT模式连接服务器时,他动态的选择一个端口号连接服务器的21端口,注意这个端口号一定是1024以上的,因为1024以前的端口都已经预先被定义好,被一些典型的服务使用,当然有的还没使用,保留给以后会用到这些端口的资源服务。当经过TCP的三次握手后,连接(控制信道)被建立现在用户要列出服务器上的目录结构(使用ls或dir命令),那么首先就要建立一个数据通道,因为只有数据通道才能传输目录和文件列表,此时用户会发出PORT指令告诉服务器连接自己的什么端口来建立一条数据通道(这个命令由控制信道发送给服务器),当服务器接到这一指令时,服务器会使用20端口连接用户在PORT指令中指定的端口号,用以发送目录的列表。
FTP的PASV方式:FTP客户以PASV模式连接服务器时,情况就有些不同了。在初始化连接这个过程即连接服务器这个过程和PORT模式是一样的,不同的是,当FTP客户发送ls、dir、get等这些要求数据返回的命令时,他不向服务器发送PORT指令而是发送PASV指令,在这个指令中,用户告诉服务器自己要连接服务器的某一个端口,如果这个服务器上的这个端口是空闲的可用的,那么服务器会返回ACK的确认信息,之后数据传输通道被建立并返回用户所要的信息(根据用户发送的指令,如ls、dir、get等);如果服务器的这个端口被另一个资源所使用,那么服务器返回UNACK的信息,那么这时,FTP客户会再次发送PASV命令,这也就是所谓的连接建立的协商过程。
我们区分一下PORT模式和PASV模式:
PORT模式:当FTP客户以PORT模式连接服务器时,他动态的选择一个端口号(本次试验是6015)连接服务器的21端口,注意这个端口号一定是1024以上的,因为1024以前的端口都已经预先被定义好,被一些典型的服务使用,当然有的还没使用,保留给以后会用到这些端口的资源服务。当经过TCP的三次握手后,连接(控制信道)被建立。现在用户要列出服务器上的目录结构(使用ls或dir命令),那么首先就要建立一个数据通道,因为只有数据通道才能传输目录和文件列表,此时用户会发出PORT指令告诉服务器连接自己的什么端口来建立一条数据通道(这个命令由控制信道发送给服务器),当服务器接到这一指令时,服务器会使用20端口连接用户在PORT指令中指定的端口号,用以发送目录的列表。当完成这一操作时,FTP客户也许要下载一个文件,那么就会发出get指令,请注意,这时客户会再次发送PORT指令,告诉服务器连接他的哪个“新”端口,你可以先用netstat -na这个命令验证,上一次使用的6044已经处于TIME_WAIT状态。当这个新的数据传输通道建立后(在微软的系统中,客户端通常会使用连续的端口,也就是说这一次客户端会用6045这个端口),就开始了文件传输的工作。
PASV模式:
然而,当FTP客户以PASV模式连接服务器时,情况就有些不同了。在初始化连接这个过程即连接服务器这个过程和PORT模式是一样的,不同的是,当FTP客户发送ls、dir、get等这些要求数据返回的命令时,他不向服务器发送PORT指令而是发送PASV指令,在这个指令中,用户告诉服务器自己要连接服务器的某一个端口,如果这个服务器上的这个端口是空闲的可用的,那么服务器会返回ACK的确认信息,之后数据传输通道被建立并返回用户所要的信息(根据用户发送的指令,如ls、dir、get等);如果服务器的这个端口被另一个资源所使用,那么服务器返回UNACK的信息,那么这时,FTP客户会再次发送PASV命令,这也就是所谓的连接建立的协商过程。为了验证这个过程我们不得不借助CUTEFTP Pro这个大家经常使用的FTP客户端软件,因为微软自带的FTP命令客户端,不支持PASV模式。虽然你可以使用QUOTE PASV这个命令强制使用PASV模式,但是当你用ls命令列出服务器目录列表,你会发现它还是使用PORT方式来连接服务器的。现在我们使用CUTEFTP Pro以PASV模式连接服务器,连接LOG里会出现这样几句话:
COMMAND:> PASV 227 Entering Passive Mode (127,0,0,1,26,108) COMMAND:> LIST STATUS:> Connecting ftp data socket 127.0.0.1: 6764... 125 Data connection already open; Transfer starting. 226 Transfer complete.

其中,227 Entering Passive Mode (127,0,0,1,26,80). 代表客户机使用PASV模式连接服务器的26x256+108=6764端口。(当然服务器要支持这种模式)
125 Data connection already open; Transfer starting.说明服务器的这个端口可用,返回ACK信息。
再让我们看看用CUTEFTP Pro以PORT模式连接服务器的情况。其中在LOG里有这样的记录:
Quotation
COMMAND:> PORT 127,0,0,1,28,37 200 PORT command successful. COMMAND:> LIST 150 Opening ASCII mode data connection for /bin/ls. STATUS:> Accepting connection: 127.0.0.1:20. 226 Transfer complete. STATUS:> Transfer complete.

其中,PORT 127,0,0,1,28,37告诉服务器当收到这个PORT指令后,连接FTP客户的28x256+37=7205这个端口。
Accepting connection: 127.0.0.1:20表示服务器接到指令后用20端口连接7205端口,而且被FTP客户接受。

FTP服务形态:匿名服务(Anonymous Service),FTP代理允许第三方文件传输
针对FTP的攻击方式:FTP跳转攻击、无访问控制、密码截获、端口盗用

我们看一下Wu-ftp的配置文件:
/etc/ftpusers

Highslide JS


/etc/ftpconversions

Highslide JS


/etc/ftpaccess:

Highslide JS


由图可看到:

1.定义all的class 包括三种人,IP不限制
2.限制all这个class中任何时间有10个用户登陆,任何时间
3.README通知用户哪些README文件改动  
4.message信息文件的设定..Deny 192.168.50.30 /etc/reject.msg

以下是/etc/ftpaccess的功能图:

Highslide JS


Highslide JS


Highslide JS


Highslide JS


NO.3 DNS服务

DNS服务是Internet上其它服务的基础,它是一种用于TCP/IP应用程序的分布式数据库,提供主机名字和IP地址之间的转换信息;对于每一个DNS节点,包含有该节点所在的机器的信息、邮件服务器的信息、主机CPU和操作系统等信息。􀂾
正向域名解析:机器名->IP,网络用户通过UDP协议与DNS服务器进行通信,返回用户所需的相关信息;􀂾
反向域名解析:客户向一台DNS服务器请求服务,服务器根据客户的IP反向解析该IP对应的域名;

客户机要首先从DNS服务器获得www.cnfan.net对应的IP地址,才能和远地服务器建立连接,DNS域名空间的域名是由分布在不同地方的域名服务器来管理的,域名解析是由用户指定的域名服务器来完成的,DNS域名服务采用的是客户/服务器(client/server)工作模式。客户方的解析过程函数(resolver),嵌套在其它应用的客户程序之内的,本地域名服务器始终运行它的域名服务器进程(named),该进程收到客户请求时,就开始进行域名解析。

域名系统的树状结构图:

Highslide JS


DNS服务存在的主要安全问题:防火墙不会限制对DNS的访问、DNS可以泄漏内部的网络拓扑结构、DNS存在许多简单有效的远程缓冲溢出攻击,可以说DNS本身性能问题是关系到整个应用的关键,然而几乎所有的网站都需要DNS。无可避免,我们要面对它!

DNS的安全威胁:名字欺骗、信息隐藏、拒绝服务攻击、设置不当的DNS会泄漏过多的网络拓扑结构、利用被控制的DNS服务器入侵整个网络,破坏网络的安全完整性(篡改DNS的记录信息)、利用被控制的DNS服务器,绕过防火墙等其它安全设备的控制(DNS需要的端口是UDP 53和TCP 53,需要使用root执行权限)。

名字欺骗图:

Highslide JS


DNS欺骗:

Highslide JS


ARP欺骗:

Highslide JS


攻击手段:

1、当本地主机与DNS服务器/本地主机与客户端主机均不在同一个局域网内时可向客户端主机随机发送大量DNS响应数据包但命中率低最有效的方法是向DNS服务器发起拒绝攻击;􀂙
2、当本地主机至少与DNS服务器或客户端主机中的某一台处于同一局域网内,可通过ARP欺骗来实现稳定可靠的DNS ID欺骗

解决方案:若遭遇DNS欺骗,先禁用本地连接,然后启用本地连接,就可清除DNS缓存;也可在IE中使用代理服务器,这时客户端不会在本地进行域名请求,DNS欺骗就不可行;

NO.4 Serv-U

Serv-U功能:设置端口号、组管理,组用户继承用户权限、IP过滤
安全隐患:默认帐户、SERV-U暴力破解、具有执行权限,可执行命令、得到WEB-SHELL后,可利用SERV-U本地权限提升
防范:删除默认帐户,设置强度密码,禁用Serv-u命令。

NO.5 Mail服务

SMTP和POP、IMAP都存在一定的问题(协议和服务端程序),尤其以SMTP为讨论重点
Mail服务是一种不安全的服务,因为它必须接受来自Internet的几乎所有数据

简单邮件传输协议(SMTP):

潜在的风险:伪造Email,用于社交工程攻击、垃圾邮件,消耗带宽和拒绝服务、病毒和特洛伊木马的传播、以明文形式进行数据传送。
解决方法:利用PGP等加密产品进行邮件传输、加强SMTP验证,限制MAIL RELAY、安装反病毒软件及个人防火墙、定期培训,加强用户的安全意识。

动态中继验证控制:DRAC(Dynamic Relay Authorization Control)动态中继验证控制是专门为邮件服务器设计的一个服务器端软件,可以同时为多个邮件服务器提供动态中继验证服务。DRAC的原理是“邮件服务之前的pop验证”。

CMAIL:安装配置邮件服务器并以WEB方式登陆邮箱。可用ShadowEmail等挂字典跑邮箱密码的工具(部分邮件服务器对试验的次数做了限制)。

NO.6 SNMP

SNMP报头:

Highslide JS


SNMP的工作机制:

简单网络管理系统分2种角色:SNMP管理站和SNMP代理。(代理是实际网络设备中用来实现SNMP功能的部分,它在UDP的161端口接收NMS的读写请求消息,管理站在UDP的162端口接收代理的事件通告消息),SNMP v1不支持加密和授权,通过包含在SNMP中的团体名提供简单的认证。

SNMP消息:5种协议数据单元(即消息)类型 (Get-request、Get-next-request、Set-request、Get-response、Trap)。其中Get-request和Get-Next-Request由管理工作站发给代理,请求检索信息,代理以Get-Response响应它; 管理工作站使用Set-Request可以远程设置代理所在的网络设备的参数。

SNMP的安全隐患:团体名作为唯一的SNMP认证手段,也是薄弱环节之一,而且团体名在网上以明码传输。SNMP主要采用UDP传输,很容易进行IP源地址假冒,多数SNMP设备接收来自网络广播地址的SNMP消息。

安全措施:关注所用产品的改进信息,及时增打补丁,升级版本;在不必要的情况下,关闭SNMP服务 ;对进入网络的SNMP流量进行过滤;使用安全性和身份验证加固的SNMPv3(SNMPv3主要有三个模块:信息处理和控制模块、本地处理模块和用户安全模块;增加的三个新的安全机制:身份验证,加密和访问控制)

NO.7 DATA服务

DATA服务器主要是存放数据库。其安全性包括两个方面(以SQL Server为例):
1、IDC的安全性(建议使用NTFS分区、给予用户执行日常任务所必需的最低等级的访问许可权、强制执行口令和登录策略、TCP/IP过滤、防火墙及代理服务器。)
2、SQL本身的安全性问题

NO.8 远程登陆

远程登录服务是指通过某种端口协议为远程客户端提供执行系统命令的服务
常见的远程登陆服务包括:
Telnet
终端服务
PcAnywhere
rlogin
SSH
协议漏洞、服务程序漏洞等问题

防范措施为禁用。
Technology | Comments(0) | Trackbacks(0) | Reads(8133)
Add a comment
Emots
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
Enable HTML
Enable UBB
Enable Emots
Hidden
Nickname   Password   Optional
Site URI   Email   [Register]
               

Security code Case insensitive