第一部分:概述
概念
网络应用服务,指的是在网络上所开放的一些服务,通常能见到如WEB、MAIL、FTP、DNS、
TELNET等,当然,也有一些非通用,在某些领域、行业中自主开发的网络应用服务。我们通
常所说的服务器,既是具有网络服务的主机。
网络应用服务安全,指的是主机上运行的网络应用服务是否能够稳定、持续运行,不会受到
非法的数据破坏及运行影响。
网络安全的威胁来自多个方面,主要包括:操作系统安全、应用服务安全、网络设备安全、
网络传输安全等等,以下我们就网络应用服务与其它安全问题做一比较
与其他安全问题的比较
操作系统安全问题
操作系统安全指的是一个操作系统在其系统管理机制实施中的完整性、强制性、计划性、可
预期性不受干扰、破坏。如操作系统的用户等级管理机制、文件读取权限管理机制、程序执
行权限管理机制、系统资源分配管理机制等。操作系统安全问题的来源主要表现在系统管理
程序编写失误、系统配置失误等方面。其安全问题主要体现在抵御和防范本地攻击。攻击行
为通常表现为攻击者突破以上的一些系统管理机制,对系统的越权访问和控制。
网络设备安全问题
网络设备的安全指的是网络设备是否能长期、持续、稳定地完成其特定的功能和任务。由于
网络设备提供的功能相对操作系统而言大大简化,因此管理程序编写失误方面的系数大大降
低,其安全问题主要来自于系统配置方面的失误。攻击行为主要表现为突破系统控制权身份
验证机制,恶意地修改系统配置。
网络应用服务安全问题的特点
每一个网络应用服务都是由一个或多个程序构成,在讨论安全性问题时,不仅要考虑到服务
端程序,也需要考虑客户端程序。服务端的安全问题主要表现在非法的远程访问,客户端的
安全问题主要表现在本地越权使用客户程序。由于大多数服务的进程由超级用户守护,许多
重大的安全漏洞往往出现在一些以超级用户守护的应用服务程序上。
由于网络应用服务种类繁多、涉及广泛,我们不可能逐一细述,以下我们以网络上是为常用
的三项服务:WEB、FTP、MAIL为例进行分析,以期达到抛砖引玉的效果。
第二部分 WEB安全分析
Web访问身份验证机制
序言
现在很多网站对用户的访问权限进行了严格的限制,用户在访问某些资源时需要给出“用户
名/口令”来确认自己的身份。目前,使用最多的身份认证方法是将用户名、口令存放在一个
数据库中,当用户要访问某些受限制的资源时,要在某一个页面中输入用户名和口令,程序
将用户输入的用户名和口令与数据库存放的“用户名/口令"相比较,如果输入正确,则正常
使用资源,否则,资源访问被拒绝。但是,这种身份认证方式有两个很大的问题,一方面只
要用户有一次身份认证成功,就可以记录下受限资源的链接地址,在下一次访问时只需输入
该地址,而无需通过身份认证过程就可访问受限资源;另一方面用户可以在受限制的资源的
超级链接处点右键,选择“属性",就可以查看到受限制资源的链接地址,直接访问该地址,
使身份认证不能达到预期的效果。
Apache可以很好地解决上述问题。Apache是建立WWW网站的软件,可运行于Linux、 Unix和W
indows操作系统下。下面就以Apache为例介绍用户身份认证功能。
基本原理
Apache实现身份认证的基本原理是:当系统管理员启动身份认证功能后,可以在要限制的目
录中添加一个默认名“.htaccess"的文件。当用户访问该路径下的资源时,系统就会弹出一
个对话框,要求用户输入“用户名/口令"。也就是说,它的身份认证功能不是人为由程序控
制,而是由系统直接控制的。这样就避免了用户记录需要认证的资源的超级链接,不会下次
直接访问资源。
身份认证的限制有多种,可以限定某个目录的读取权,针对IP地址进行的限制,以及一个目
录下各子目录的不同限制。以下我们具体进行说明。
具体实现
基本的Apache用户认证方法:
若对某一目录下的文件如/home/ftp/pub需要做到用户认证,则在httpd.conf 中加入下面的
行
options indexes followsymlinks
allowoverride authconfig
order allow,deny
allow from all
在目录/home/ftp/pub下放文件.htaccess,内容如下:
authname "shared files"
authtype basic
authuserfile /etc/.passwd
require valid-user
用随Apache来的程序htpasswd 生成文件/etc/.passwd,每行一个用户名:密码
只要能提供正确的用户名和密码对,就允许登录访问,这是针对任何地址来的请求都要求提
供用户名和密码认证。
针对部分网段或地址要求认证:
若公司LAN所在网段为192.168.0.0/24,且有一防火墙专线接入Internet, 内部网卡的地址
为192.168.0.1/32,则现在希望所有通过拨本地163通过防火墙上的apache反向代理向LAN上
的另一WWW服务器访问时需要认证,而本地LAN上的用户不需认证。可以在httpd.conf中放入
:
Options Indexes FollowSymLinks
AllowOverride AuthConfig
order deny,allow
deny from 192.168.0.1
在/home/ftp/pub/.htaccess中放入:
AuthName "shared files"
AuthType Basic
AuthUserFile /etc/.passwd
require valid-user
satisfy any
对同一目录及其下的子目录有不同的权限,仅某些人可以存取一目录下的子目录如有一目录
/home/ftp/pub/sales,有三个用户user1,user2,user3都需要用户名和密码进入/home/ft
p/pub,仅user1,user2能进入/home/ftp/pub/sales.则 放下面的行到httpd.conf
Options Indexes
AllowOverride AuthConfig
order allow,deny
allow from all
Options Indexes
AllowOverride AuthConfig
order allow,deny
allow from all
设置/home/ftp/pub/.htaccess为:
AuthName "shared files"
AuthType Basic
AuthUserFile /etc/.passwd
require valid-user
设置/home/ftp/pub/sales/.htaccess
AuthName "shared files"
AuthType Basic
AuthUserFile /etc/.passwd
AuthGroupFile /etc/.salesgroup
require group manager
设置文件/etc/.passwd内容为:
user1:passwd1
user2:passwd2
user3:passwd3
设置文件/etc/.salesgroup内容为:
manager: user1 user2
用SSL构建一个安全的Web
简介
众所周知,在网络上以明文传递敏感信息是相当不安全的,因此SSL提供了一种加密手段,在
底层上为上层协议提供服务和加密方案,因此当用户在以HTTP协议传输数据时,窥探者将难
以获取数据的信息。当然加密只是在传输过程中的,对用户是完全透明的。在此,我们仍以
apache为例来说明如何用SSL构建一个安全的WEB。
准备工作
如果你的系统是从头装起的话,建议你留出一个叫/chroot的分区用来运行Apache。至于这个
分区的大小,取决于你自已,一般来说,一个普通的网站有40M也就够了。但你的系统如果早
就运行了Apache,你可以另外开辟一个分区,或者选择不用独立分区来安装,仅仅在根下面
开一个目录。
另外我假定你的系统已经通过了一定的安全检测――在安装Apache之前(如果有其它漏洞存在
的话,你认为运行在其上的Apache会怎样,所谓覆巢之下,焉有完卵:),检测至少要包括(但
不仅限于)――移除不安全的SUID程序、升级某些守护进程,去掉不必要的服务。还假定你是
的WEB SERVER是运行TCP/IP而且有自己的地址。
平台
以下测试都在下列平台下通过:
1、Slackware 4.x distribution using gcc 2.7.2.3 and Perl v5.005_02
2、Solaris 7 on Sparc using gcc v2.8.1 and Perl v5.005_03
获取所需要的软件
因为阿帕奇并没有在她的包里自己SSL,因此我们必须先下载到这些加密网页所必需的部份:
1、Apache Web Server - http://www.apache.org/dist/
不必多说,我们当然需要获得这个web server,现在的版本是1.3.11,阿帕奇是现在世界上
使用最广泛的web server。
2、mod_ssl - http://www.modssl.org
这是一个为Apache1.3.x web server提供强力加密的的软件模块,它使用的是SSL v2和v3以
及TLS(Transport Layer Security)v1 协议。该软件包是在BSD的license下开发的,在非商
业的情况下,你可以自由地使用它,要判断该使用哪一个版本的mod_ssl很简单,它的版本号
是-格式的,也就是说,你如果用的是1.3.11的Apache,那么就该用2.50-1.3.11的mod_ssl。3、mod_perl - htt