linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > perl >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·perl入门学习指南
·perl入门教程:Perl 的变量
·perl入门教程:Perl的语法与C语
·Perl文件及目录操作
·perl入门教程:Perl概述
·perl入门教程:正则表达式
·perl 学习笔记
·Perl常用系统函数
·perl中传递和存储文件句柄
·Perl连接Oracle数据库的方法
·curl+perl的自动MAIL报警程序
·使用 perldoc 找文档
·perl入门教程:Perl 程序的属性
·Perl新手的误区和新手必读
·Perl命令行应用介绍
最新文章
·perl 学习笔记
·Perl 特殊变量
·perl Base64码的获取
·perl 父子进程的数据库连接继承
·工作中的实用 perl 脚本
·perl中传递和存储文件句柄
·curl+perl的自动MAIL报警程序
·Perl类包的动态调用
·使用open创建的管道进行父子进
·perl 执行一个系统命令(svn in
·windows平台下根据可执行文件名
·关联数组(hash)
·Perl语言在风险评估的系统基础
·在Perl/CGI中使用模板
·PERL CGI 常见问题
Google
 
Perl语言在风险评估的系统基础信息采集工作中的应用
[ 作者:  加入时间:2007-10-29 11:21:11  来自:Linux联盟收集整理 ]

1 前言 信息安全风险评估就是从风险管理的角度,运用科学的方法和手段,系统地分析网络与信息系统所面临的威胁及其存在的脆弱性,评估安全事件一旦发生可能造成的危害程度,提出有针对性的抵御的防护对策和整改措施,并为防范和化解信息安全风险,或者将风险控制在可接受的水平,从而最大限度的保障网络和信息安全提供科学依据。信息安全风险评估的形式可以分为自评估和检查评估两种,自评估是指网络与信息系统拥有、运营或使用单位发起的对本单位信息系统进行的风险评估,检查评估是指上级管理部门或国家有关职能部门依法开展的风险评估。 随着我国信息化工作的不断推进,各行各业信息化水平得到了很大的提高,信息安全保障工作已经成为确保社会安定、促进经济发展的重要因素。信息安全风险评估作为信息安全保障工作的重要组成部分,应当作为提高我国信息安全保障水平重要举措,贯穿于网络与信息系统建设运行的全过程。 2 风险评估工具及其不足 风险评估过程的自动化和标准化促成了风险评估工具的层出不穷。自动化的风险评估工具不仅可以将风险评估人员从繁重的手工劳动中解脱出来,更重要的是它能够将专家知识进行集中,使专家的经验知识被广泛的应用。 2.1 风险评估工具基本情况 国际上根据风险评估的实践,研发出各种各样的工具,这些工具在风险评估的各个阶段被广泛使用。根据这些工具的主要任务和作用原理的不同,风险评估的工具主要可以区分为风险评估管理工具和基础信息采集工具两大类。二者的特点如表1所示。 表格 1 风险评估工具 风险评估工具类别 特点 典型工具 风险评估管理工具 集成了风险评估各类知识和判据的管理信息系统,以规范风险评估的过程和操作方法;或者是用于收集评估所需要的数据和资料,基于专家经验,对输入输出进行模型分析 ASSET CC Toolbox COBRA MSAT RiskWatch CRAMM CORA RA等 基础信息采集工具 主要用于对信息系统的主要组件(如网络设备、操作系统、数据库系统、应用系统、安全管理等)的基础信息的采集。 Nessus MBSA ISS Internet Scanner SARA Saint等   风险评估管理工具是风险评估方法或标准的某种实现。以COBRA为例,COBRA(Consultative, Objective and Bi-functional Risk Analysis)是英国的C&A系统安全公司推出的风险分析工具软件,它依据ISO 17799,通过问卷的方式来采集和分析数据,并对被评估方的风险进行定性分析,通过基于知识的评估方法,将被评估方的安全现状与标准相比较,从中找出差距,最终的评估报告中包含已识别风险的水平和推荐措施。 通过风险评估管理工具能否真正获得被评估方的安全风险,首先依赖于该评估工具基于的方法或标准的科学性,其次,基础信息的可靠性和完备性也是评估结论合理与否的关键因素。而随着信息系统复杂程度的提升,如何快速准确地采集风险评估基础信息已越来越成为影响风险评估工作有效开展的关键。 在国内各主要风险评估机构的风险评估实践中,对基础信息的采集除操作系统漏洞外,大多使用手工的方式完成。真正较为实用的采集工具主要有Nessus或基于Nessus开发的网络与系统漏洞扫描工具和微软公司的MBSA。漏洞扫描工具借助网络通信探测目标网络和系统的安全问题,可对端口开放、服务识别、程序缺陷等安全问题进行检测并形成检测报告,此类工具通常是独立的,不需要在被测对象上安装;MBSA可对视窗操作系统进行本地或远程的扫描,其操作的对象为微软产品,如视窗系列操作系统、互联网信息服务器(Internet Information Server)、微软数据库管理系统(SQL Server)等。通过MBSA可发现以上微软产品安全更新情况、基本配置情况等。 2.2 基础信息采集工具的不足 现有的各类基础信息采集工具在一定程度上实现了某些基础信息采集的自动化,但由于其自身的缺陷和信息系统的复杂性,不具备、不可能实现对各种数据信息的全面搜集。 常见的扫描工具大多是基于网络的,这些工具不能直接访问目标系统的文件系统,相关的一些漏洞不能检测到。例如,网络扫描工具虽然能够猜测系统用户的账号和口令,但难以有效检测操作系统对账号口令长度、修改周期等参数的配置情况。而这些配置对操作系统的安全性起着至关重要的作用。对于微软的视窗操作系统,微软公司自已开发了基于主机的基线扫描器,能够实现对视窗系列操作系统基础信息的搜集,但对于其他的操作系统,尤其是类UNIX操作系统,类似的工具还不太成熟,相关的工作往往需要手工完成。

3 Perl语言的操作系统基础信息采集上的实现

根据上文所描述的问题,在当前风险评估实践中,大量类UNIX系统下的基础信息搜集都是手工完成的。脚本程序由于具有编程灵活、开发速度快和跨平台能力强的特点,在这些工作中具有巨大的技术优势和应用前景。

3.1 UNIX操作系统的特点

UNIX操作系统的特点和优势很多,其中与信息采集有关的特点就是其绝大多数功能和性能的配置和管理都可以通过修改某些纯文本格式的配置文件实现。由于这个特点,使得通过分析配置文件掌握操作系统基础安全信息成为可能。

除了操作系统自身,主要的应用程序也有各自的以纯文本方式保存的配置文件。表2列出了RedHat Linux release 8中典型的系统管理项和典型应用及其配置文件。

表格 2 Linux操作系统中典型的系统管理和应用

类别

名称

配置文件情况

备注

系统管理

用户基本管理

/etc/passwd

/etc/shadow

设置系统用户账号、口令、主目录等

用户登录管理

/etc/login.defs

用户口令长度、修改频度等

系统日志

/etc/syslogd.conf

 

本机防火墙规则

/etc/sysconfig/iptables

 

系统日志

/etc/syslogd.conf

 

应用软件

Web应用

/etc/httpd/conf/*

该目录下多个文本文件

MySQL数据库

/etc/my.cnf

 

文件共享

/etc/samba/smb.conf

 

vsftpd

/etc/vsftpd.conf

/etc/vsftpd.ftpusers

/etc/vsftpd.user_list

 

 

这些类UNIX系统中配置文件的格式主要有两种类型,赋值型和记录型。

1)赋值型

赋值型配置文件实现对应用关键属性的定义,例如,操作系统中对于新创建用户有初始设置,其配置文件如表2所示,为根目录下etc目录下的login.defs文件,其文件格式如下。

######  /etc/login.defs##########           

……                             

PASS_MAX_DAYS       99999          

PASS_MIN_DAYS        0                 

PASS_MIN_LEN         5                 

PASS_WARN_AGE      7            

……                                        

 

在此文件中定义了一系列参数及这些参数的值。比如定义了PASS_MAX_DAYS参数,该参数的意义为新创建用户密码最大使用时间(以天为单位)。该变量的值被赋为99999,意思用户可永不修改密码。这种默认情况对于重要系统来说是存在安全隐患的。通过读取login.defs可以获知这些基础信息。

2)记录型

记录型配置文件的典型特征是配置文件中有若干条记录,每一条记录具有相同的结构特点,例如系统账号/etc/passwd:

######  /etc/passwd                                       

root:x:0:0:root:/root:/bin/bash                        

bin:x:1:1:bin:/bin:/sbin/nologin                 

daemon:x:2:2:daemon:/sbin:/sbin/nologin       

adm:x:3:4:adm:/var/adm:/sbin/nologin      

……                                        

在这类文件中,每一行为一条记录,每一条记录的不同字段用特定的字符隔离。对于上述实例,用于字段隔离的字符为冒号。

3.2 Perl语言的优势

Perl语言是类UNIX系统下的脚本语言之一。Perl的设计目标是帮助UNIX用户完成一些常见的任务,这些任务对于普通的SHELL来说过于沉重或对移植性要求过于严格。Perl编程语言对进程、网络、文字有很强的识别、处理、变换能力,因此凡是有关快速原型设计、系统工具、系统管理、数据库处理、图像程序设计、网络连接,和 WWW程序设计等之类的任务,都特别适合用 Perl 来做。

1、信息分析处理能力

Perl语言在信息分析处理上的能力来源于它对正则表达式支持程度。正则表达式赋予了Perl极大的处理和操作自由文本中的模式的能力。其他语言也有支持正则表达式的,但是没有一种能像Perl一样结合得这么好。

对于类似login.defs文件中信息的读取,仅需以下六行代码即可完成文件读取和信息提取。

open(FILE,"/etc/login.defs");                                   

while(<FILE>){                                                      

        next if(/^#/);                                              

        $config{$1}=$2 if(/(\w+)\s+(\w+)/);          

}                                                                             

close(FILE);                                                           

2、功能扩展能力

Perl语言不仅仅具有很强大的文本处理能力,同时由于其使用广泛,具有很好的技术支撑能力。其对模块的支持能力使得任何从都可以开发自已的功能模块,并提供给他人使用。

The Comprehensive Perl Archive Networkhttp://cpan.perl.org)是一个Perl资源的集散地,汇集了来自全世界Perl爱好者提供的Perl语言功能扩展模块,这些模块对Perl语言的功能起到了巨大的扩充,也使得Perl语言相比于pythonshell等更具生命力的重要原因之一。

3.3 一个Perl语言实现的系统检测实例

Linux系统用户管理中新建用户基础信息采集为例。关于新建用户的有关配置信息保存在/etc/login.defs文件中。该文件定义的常用变量及意义如表3所示。

表格 3 login.defs主要变量

变量名

意义

典型值

备注

MAIL_DIR

用户邮件保存位置

/var/spool/mail

 

GID_MAX

最大可用组id

60000

 

GID_MIN

最小可用组id

500

 

PASS_MIN_LEN

密码允许的最少字符数

5

 

PASS_MAX_DAYS

密码最长使用时间

99999

99999意思是可以永远不改,属安全隐患

PASS_MIN_DAYS

密码最短使用时间

0

0的意思是用户可以随时修改密码

PASS_WARN_AGE

密码过期提前几天报警

7

当离密码过期还有7天时,系统向用户报警提示

UID_MAX

最大可用用户id

60000

 

UID_MIN

最小可用用户id

500

 

CREATE_HOME

创建用户时是否同时创建用户主目录

yes

 

 

      在表3中,关于密码长度、修改时间配置情况是影响安全的重要因素,假设做以下定义:

<!--[if !supportLists]-->l       <!--[endif]-->密码长度

<!--[if !supportLists]-->n       <!--[endif]-->长度小于6为非常危险

<!--[if !supportLists]-->n       <!--[endif]-->长度小于或等于8为一般

<!--[if !supportLists]-->n       <!--[endif]-->长度大于8为安全

<!--[if !supportLists]-->l       <!--[endif]-->密码最长使用时间

<!--[if !supportLists]-->n       <!--[endif]-->密码可以永不修改为非常危险

<!--[if !supportLists]-->n       <!--[endif]-->密码可连续使用n天以上为较危险,其中n大于30

<!--[if !supportLists]-->n       <!--[endif]-->密码必须在n天内修改为安全,其中n小于30

<!--[if !supportLists]-->l       <!--[endif]-->密码最短使用时间

<!--[if !supportLists]-->n       <!--[endif]-->密码随时可以修改为安全

<!--[if !supportLists]-->n       <!--[endif]-->密码必须使用n天才能修改为危险,其中n小于30

<!--[if !supportLists]-->n       <!--[endif]-->密码必须使用n天才能修改为非危险,其中n大于30

Perl语言实现如下:

见附件iscLinux联盟

执行程序,得出以下结果:

非常危险!本系统中用户账号的密码可以永不修改。

安全。本系统中用户账号的密码修改没有时间限制。

非常危险!本系统中用户账号允许设定5个字符的密码。

4 结论

      综上所述,在风险评估的基础信息采集工作中,尤其是针对类UNIX系统的基础信息采集,Perl语言具有突出的优势,可以在相关工作中发挥出应有的作用。iscLinux联盟

#####-----------以下为示例程序---------------#####

#!/usr/bin/perl

my $CONFIG="/etc/login.defs";

my %configs;

 

open(CONF,"<$CONFIG") or die "文件$CONFIG读取失败!\n";

while(<CONF>){

        next if(/^\s*#/);

        next if(/^\s*$/);

        $configs{$1}=$2 if(/(.*?)\s+(.*)/);

}

close(CONF);

##判断系统账号密码使用的最长时间##

if($configs{'PASS_MAX_DAYS'} == 99999){

    print "非常危险!本系统中用户账号的密码可以永不修改。\n";

}elsif(($configs{'PASS_MAX_DAYS'} >= 30) and ($configs{'PASS_MAX_DAYS'} < 99999)){

    print "较危险。本系统中用户账号的密码可以连续使用达$configs{'PASS_MAX_DAYS'}天。\n";

}else{

    print "安全。本系统中用户账号的密码最多只能连续使用$configs{'PASS_MAX_DAYS'} 天,短于建议的30天。\n";

}

##判断系统账号密码使用的最短时间##

if($configs{'PASS_MIN_DAYS'} == 0){

   print "安全。本系统中用户账号的密码修改没有时间限制。\n";

}elsif(($configs{'PASS_MIN_DAYS'} > 0) and ($configs{'PASS_MIN_DAYS'} < 30)){

    print "危险。本系统中用户账号的密码必须在设定使用后 $configs{'PASS_MIN_DAYS'} 天才能更改。\n";

}else{

    print "非常危险!本系统中用户账号的密码必须在设定使用后 $configs{'PASS_MIN_DAYS'} 天才能更改。\n";

}

##判断系统账号密码最短字符长度##

if($configs{'PASS_MIN_LEN'} <= 6){

    print "非常危险!本系统中用户账号允许设定$config{'PASS_MIN_LEN'}个字符的密码。\n";

}elsif(($configs{'PASS_MIN_LEN'} > 6) and ($configs{'PASS_MIN_LEN'} <= 8)){

    print "一般。本系统中用户账号密码至少为$config{'PASS_MIN_LEN'}个字符。\n";

}else{

    print "安全。一般。本系统中用户账号密码至少为$config{'PASS_MIN_LEN'}个字符。\n";

}

#####----------以上为示例程序-----------------#####

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【