记录生活的点点滴滴...... 注册 | 登陆
浏览模式: 标准 | 列表2009年02月的文章

交换机做DHCP服务器


      什么是DHCP服务器呢?为什么我们要配置DHCP服务器呢?    所谓的DHCP就是Dynamic Host Configuration Protocol的缩写,即动态主机配置协议,它是TCP/IP协议簇中的一种,主要作用给网络中其他电脑动态分配IP地址之用。    纯粹地谈DHCP协议也许大家会觉得很陌生,但是说到“自动获取IP地址”,各位有装机经验的朋友可能就比较熟悉了。在windows 2000下,我们打开“本地连接 属性”对话框之后,双击“internet 协议 (TCP/IP)”,打开“internet 协议 (TCP/IP) 属性”对话框中,就有一项“自动获得 IP 地址”(当然我们也可以直接指定固定IP给电脑)。然而为什么我们可以使电脑来自动获取IP呢?试想一下,如果每台电脑可以自动获取任意IP的话,那岂不是IP地址严重冲突,网络世界大乱。然而现实生活中使用自动获取IP的网络并没有象我们想象中的一片混乱,为什么呢?原因就是在我们的网络中存在这一个DHCP服务器,这个DHCP服务器管理着网络中的IP地址资源,使得各IP地址合理地分配给网络中的每一台有需要的主机。    为什么我们有时候需要DHCP服务器来使IP自动分配呢?举个例子来说明一下:假如在某单位中有400台电脑,但是在任何一个时刻,要上网的电脑不会超过255台。如果使用固定IP的话,那么我们就需要为这个单位申请400个IP才够用;但是如果我们使用动态IP分配的话,我们只要申请255个IP就已经足够了,节省了145个IP资源的费用。DHCP服务就是特别试用于这种IP资源使用密度不高的情况。    然而,常规的方法来讲,需要专门配置一台服务器来做DHCP服务器,这样无疑又增加了网络耗费。据笔者的经验,有时在一些网络低层设备中(如路由器、交换机等)里面整合了DHCP服务,一般的小型网络里,我们完全可以利用网络中的这些网络设备是上的DHCP服务来配置我们自己的DHCP服务器,而不需要另外专门配置一台服务器来做DHCP服务。



下面我就以cisco交换机(其他款交换机没试过)为例子,说说具体做法:    假设在某网络中有400台主机,其中申请了255个以供分配的IP,其范围从202.38.X.0~202.38.X.254,其中202.38.X.1是用来分配给网关的,该网络里有三台服务器A、B、C,其需要固定的IP,分别为202.38.X.2、202.38.X.3、202.38.X.4,其他的所有IP均供动态分配之用。网络拓扑结构如下:  

  telnet登陆上交换机,进入交换机命令行;    启动DHCP服务:    service DHCP    对于要固定分配的IP,我们需要先将其约定出来:    ip dhcp exclude-address 202.38.X.2 202.38.X.3 202.38.X.4    在分配地址前,先将测试一下该地址,如果该地址有人在用,则分配其他地址,避免IP地址的冲突:    ip dhcp ping packets 3    设置DHCP地址池全局变量,;    ip dhcp pool 1    设置动态分配的IP地址范围、子网掩码:    network 202.38.X.0 255.255.255.0 //动态分配IP范围,这里给定的是202.38.X.0到255.255.255.0,也就是该段所有IP    设置网关:    default-router 202.38.X.1    设置DNS服务器地址    dns-server 202.38.193.33 202.112.17.33    就这么简单,一个cisco交换机上的DHCP服务器配置完成了。请注意,并不是所有的交换机上都带有了DHCP服务,笔者使用的是cisco交换机,所以请大家购买的时候根据用途多加注意了。

用ASP SQL Server构建网页防火墙


      为网页设置防火墙的主要目的是根据网页内容对不同来访者提供不同的服务,利用Java Script或VB Script,我们很容易做到这一点。但网页的源码在客户浏览器中可以被看到,访问者可以查看所用的用户鉴别方法,这只是一个表面形式的防火墙。    

  

ASP是Web上的客户机/服务器结构的中间层,虽然它使用脚本语言(Java Script,VB Script等)编写,程序代码在服务器上运行,在客户端仅可看到由ASP输出的动态HTML文件,但ASP仍具有某些漏洞,采取一定手段也可以看到ASP程序的源码。这时,通过ASP与SQL Server相结合,我们可以设计出简单、高效、可靠的应用程序。下面简单介绍一下其建立过程。  



  一、建立Login  



  在SQL Server上建立访问者的Login和Password。  



  二、在网络服务器上创建数据库DSN  



  使用“控制面板”中的“ODBC数据源管理器”创建某个数据库的ODBC 数据资源名,即DSN,这样以后可以通过使用数据库DSN连接具体的数据库。  



  “ODBC数据源管理器”提供了三种DSN,分别为用户DSN、系统DSN和文件DSN。其中,用户DSN会把相应的配置信息保存在Windows的注册表中,但是只允许创建该DSN的登录用户使用。系统DSN同样将有关的配置信息保存在系统注册表中,但是与用户DSN不同的是系统DSN允许所有登录服务器的用户使用。  



  与上述两种数据库DSN不同,文件DSN把具体的配置信息保存在硬盘上的某个具体文件中。文件DSN允许所有登录服务器的用户使用,而且即使在没有任何用户登录的情况下,也可以提供对数据库DSN的访问支持。此外,因为文件DSN被保存在硬盘文件里,所以可以方便地复制到其它机器中。这样,用户可以不对系统注册表进行任何改动就可直接使用在其它机器上创建的DSN。  



  在以上三种数据库DSN中,建议用户选择系统DSN或文件DSN,如果用户更喜欢文件DSN的可移植性,可以通过在NT系统下设定文件的访问权限获得较高的安全保障。  



  建立新的DSN,用户首先选择“添加”,然后在弹出窗口中选择用户将要建立连接的数据库类型并选择列表中的“SQL Server”项。如果用户是建立文件DSN,则单击“下一步”按钮并在随后的对话框中输入所要建立的文件DSN的文件名和保存路径。如果用户建立的是系统DSN,单击“完成”按钮。  



  在选择完数据库之后,用户需要对数据库DSN进行设置。用户需要选择提供数据库服务的具体服务器,设定登录用户名和口令,以及用户将要连接的数据库。  



  三、程序设计  



  下面要实现的就是一个简单的页面防火墙的功能。此页面只限制本单位内部网的用户进行访问(在此假设内部网的IP地址是从10.61.96.至10.65.97.之间),如果是单位外部用户进行访问则要求输入访问用户名及密码。在此要使用到request对象的ServerVariables属性,通过它来获得环境变量的值。  



  程序源码(firewall.asp)如下:  



<html>  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">  

<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">  

<title>firewall.asp</title>  

</head>  

<body background="#800080 ">  

<%  

’使用Request.ServerVariables("REMOTE_ADDR")得到IP地址并保存在变量remoteip中  

remoteip=Request.ServerVariables("REMOTE_ADDR")  

stip=cstr(remoteip)  

取得IP地址第三个段的值并保存到stip中  

for i=1 to 2  

stip=right(stip,len(stip)-instr(1,stip,"."))  

next  

stip=left(stip,instr(1,stip,".")-1)  

’IP地址有效性检验及密码验证,包括两方面的内容:如果IP地址符合则通过验证;如果IP地址不符合则检验输入的用户名、密码是否正确  

if (left(remoteip,5) <> "10.61" or stip<"96" or stip>"97") then  

username=request.form("t1")  

password=request.form("t2")  

Set fs = CreateObject("Scripting.FileSystemObject")  

Set thisfile = fs.OpenTextFile("dsn.txt")  

db_loc=thisfile.readline  

thisfile.close  

cnstr=db_loc&&"uid="&&username&&";"&&"pid="&&password  

on error resume next  

set cn=server.createobject("adodb.connection")  

cn.open cnstr  

if err=3709 then %>  

<p><font color="#FF0000">对不起,用户:<%=username%>没有访问权限,或密码不正确! <BR></font></p>  

<form method="POST">  

<p align="center">用户名:<input type="text" name="T1" size="20">口令:<input type="password" name="T2" size="20"><input type="submit" value="提交" name="B1"><input type="reset" value="全部重写" name="B2">  

</p>  

</form>  

<%end if  

cn.close  

set cn=nothing%>  

<%else %>  

恭喜您,您已经通过了验证,可以直接使用本站点的资源!  

<%end if%>  

</body>  

</html>    



  稍微修改一下上面如IP地址等信息,该程序就可以运行了。  



  当然,上面只是实现在一个页面中的防火墙功能。如果一个网站有多个页面的话,可以设置一个session变量来对用户进行标志,在下面的页面中都进行判断

拒绝诱惑 如何有效防御网游外挂木马


        目前,很多人在各绝对女神论坛中发布各种所谓的外挂程序,或者不明网站的链接,我们奉劝各位,千万不要点击。因为那很有可能会捆绑一个“键盘纪录器”。  



  为了您账号的安全,请您留心一下这些隐藏在诱惑中的“黑手”。建议您下载专业杀木马软件。  



  防范方法:  



  1、请将IE的"INTERNET选项"的"高级"设置为"恢复默认设置"。  



  2、不要安装和下载一些来历不明的软件,特别是一些所谓的女神外挂程序。  



  3、不要随便打开来历不明信件的附件。  



  4、安装最新杀毒软件,并定时升级病毒库。  



  5、小心网吧的计算机上安装有记录键盘操作的软件,或被安装了木马。使用网吧计算机时,需先按ctrl,alt,del三个键,看看是否有来历不明的程序正在运行,如果有,则立即将该程序结束任务。  



  6、网吧上网的用户,最好是在上机器前去华军软件园下载LDM木马检查工具(bj.onlinedown.net/soft/11555.htm),先扫描一下机器看是否有木马程序。  



  · 针对于一些暴力破解密码的软件,破解用户的帐号密码  



  这种方法主要是通过使用一些暴力破解密码的软件,用穷举法逐个的尝试用户的帐号密码,但需要使用者有一定的电脑知识,而且破解需要很长时间。  



  防范方法:  



  1、尽量避免将游戏帐号暴露在公众论坛和其他网站。  



  2、用户在设置密码时,尽量设置的复杂一点,最好设置为8位数以上的字母、数字和其他符号的组合。  



  3、不要使用可轻易获得的关于您的信息作为密码。这包括生日、身份证号码、手机号码、您所居住的街道的名字等等。  



  4、经常更换密码,因为8位数以上的字母、数字和其他符号的组合也不是无懈可击的。  



  5、申请密码保护,也就是设置安全码,安全码不要和密码设置的一样。如果您没有设置安全码,  



那么别人一旦破解您的密码,就可以把您的密码和注册资料(除证件号码外)全部修改。  



  · 木马防御全攻略  



  1、您的计算机是否已被装了木马?如何检测?  



  1)检查注册表



  看HKEY_LOCAL_MACHINE/SOFTWARE/MicrosoftWindows/Curren Version  

和HKEY_CURRENT_USER/Software/MicrosoftWindows/CurrentVersion下,所有以"Run"开头的键值名,其下有没有可疑的文件名。如果有,就需要删除相应的键值,再删除相应的应用程序。  



  2)检查启动组



  木马们如果隐藏在启动组虽然不是十分隐蔽,但这里的确是自动加载运行的好场所,因此还是有木马喜欢在这里驻留的。启动组对应的文件夹为:C:windowsstart menuprogramsstartup,在注册表中的位置:  

   HKEY_CURRENT_USER/Software/MicrosoftWindows/Current Version/ExplorerShell Folders  

   Startup="C:windowsstart menuprogramsstartup"。要注意经常检查这两个地方哦!  



  3)Win.ini以及System.ini也是木马们喜欢的隐蔽场所,要注意这些地方。  

  比方说,Win.ini的[Windows]小节下的load和run后面在正常情况下是没有跟什么程序的,如果有了那就要小心了,看看是什么;在System.ini的[boot]小节的Shell=Explorer.exe后面也是加载木马的好场所,因此也要注意这里了。当你看到变成这样:



  Shell=Explorer.exewind0ws.exe,请注意那个wind0ws.exe很有可能就是木马服务端程序!赶快检查吧。  



  4)检查C:windowswinstart.bat、C:windowswininit.ini、Autoexec.bat。木马们也很可能隐藏在那里。  



  5)如果是EXE文件启动,那么运行这个程序,看木马是否被装入内存,端口是否打开。如果是,则说明要么是该文件启动木马程序,要么是该文件捆绑了木马程序,只好再找一个这样的程序,重新安装一下了。  



  6)木马启动都有一个方式,它只是在一个特定的情况下启动,所以,平时多注意一下你的端口,查看一下正在运行的程序,用此来监测大部分木马应该没问题的。  



  2、目前已经有一些专门的清除木马的软件,在新推出天网防火墙里面捆绑有强大的木马清除功能,清除一般木马的机制原理主要是:  



  1)检测木马。  



  2)找到木马启动文件,一般在注册表及与系统启动有关的文件里能找到木马文件的位置。  



  3)删除木马文件,并且删除注册表或系统启动文件中关于木马的信息。  



  但对于一些十分狡滑的木马,这些措施是无法把它们找出来的,现在检测木马的手段无非是通过网络连接和查看系统进程,事实上,一些技术高明的木马编制者完全可以通过合理的隐藏通讯和进程使木马很难被检测到。  



  3、木马防范工具。  



  防范木马工具有很多,请您务必安装一个,以提高您的计算机的安全性。

网管必读


      
  很多情况下,入侵者在使用工具注入时发现工具才解不出来表名和字段名,那是因为所有的工具都有自己的一部字典,这部字典内包括了表名和字段名,如果管理员把表名和字段名改成了不在这部字典内,那么我们使用的工具将无法猜解出字段名和表名。在以下的文章中,将从分析手工注入出发,来打造抵御SQL注入的防线。
  入侵者将会构造简单的判断条件,来判断该页面是否存在注入漏洞,一般步骤如下:
  这里要检测的页面为http://127.0.0.1/111/view.asp?id=198
  1.入侵者要想对站点进行手工注入就必须对浏览器进行设置,以保证手工注入时能返回出错信息,其操作步骤如下:
  右键点击浏览器选择“属性”,在弹出来的对话框中选择“高级”选项卡。如下图所示:
图一
  接着去掉“显示友好的HTTP错误信息”前面的钩,最后点击“应用”按钮即可。
  2.入侵者向浏览器提交如下url:
  http://127.0.0.1/111/view.asp?id=198 and 1=1
  如果存在SQL注入漏洞,就可以查询数据库,1=1是一个恒等式可以忽略,因此会返回一个正常的页面,此页面和http://127.0.0.1/111/view.asp?id=198一样,这时入侵者便判断此站有希望被注入。如果返回的是一些错误信息,那么一些初级的入侵者可能就会放弃这个站点。
  3.入侵者进一步向浏览器提交如下url:

  http://127.0.0.1/111/view.asp?id=198 and 1=2
  1=2为一个恒不等式,如果该站点支持数据库查询,则大概会返回如下图所示的信息:
图二
  一般出现上图所示入侵者就基本确定此站能够进行SQL注入攻击了。
  不过很多时候入侵者只需用一个单引号即可快速判断出目标站点是否存在SQL注入漏洞,向浏览器提交如下url:
  http://127.0.0.1/111/view.asp?id=198’如果返回如下信息则说明有一半机会以上存在注入漏洞:
  Microsoft OLE DB Provider for ODBC Drivers 错误’80040e14’
  [Microsoft] [ODBC Microsoft Access Driver]字符串的语法错误在查询表达式’id =1’’中。/list.asp,行50
  4.此时入侵者开始构造特殊的SQL查询语句开始查询站点数据库的表名,向url提交如下语句:
  http://127.0.0.1/111/view.asp?id=198 and exists(select * from admin)
  这个语句是向数据库查询是否存在admin这个表,如果存在则返回正常页面,如果不存在此表则返回出错页面。一般入侵者会先测试常用的表名,也是一般的注入工具密码字典内存在的表名和字段名。如果表名不在常用表名中则入侵者就会结合社会工程学来猜解表名,这种情况下入侵者猜中表名的几率较低。
  5.入侵者在得到表名后开始构造查询语句查询数据库字段名,向url提交如下语句:
  http://127.0.0.1/111/view.asp?id=198 and exists(select user from admin)
  这个语句是向数据库中admin表中查询是否存在user字段,如果存在则返回正常页面,如果不存在则返回出错页面。
  7.接下来入侵者开始确定字段id的值,构造如下语句可以查询id的值:http://127.0.0.1/111/view.asp?id=198 and exists (select id from admin where id=1)
  正确则返回正确页面,错误则返回出错页面。
  6.表名和字段名猜测出来以后,入侵者开始构造查询语句猜测管理员帐号长度,向url提交如下语句:
  http://127.0.0.1/111/view.asp?id=198 and exists(select id from admin where len(user)<6 and id=1)
  此语句为查询user字段中用户名长度范围,表示长度小于6,正确则返回正常页面,错误则返回出错页面。
  缩小范围,然后构造如下语句确定用户名具体长度:
  http://127.0.0.1/111/view.asp?id=198 and exists(select id from admin where len(user)=5 and id=1)
  正确则返回正常页面,错误则返回出错页面。
  8.接下来入侵者开始进入最后的环节构造语句查询管理员用户名,向url提交如下语句:http://127.0.0.1/111/view.asp?id=198 and exists(select count(*) from admin where left(user,1)=’a’)
  此语句是从用户名左边开始猜测用户名地一位为a,正确则返回正常页面,错误则返回出错页面,一位一位猜,猜第2位时,修改语句为(user,2)=’ad’,后面类推。
  在入侵者得到用户名密码以后,此次注入就接近尾声了。
  至于防范方法很简单,从上面的过程可以看出如果表名和字段名不在常用表名和字段名中则入侵者是使用社会工程学来猜解,如果管理员修改的表名和字段名足够复杂则入侵者依然不能达到目的,还有一种简单的防御方法就是到网上去下载一些防注入补丁程序打上就可以了,这种方法是修改站点文件,增加过滤语句来过滤入侵者提交的语句来达到防注入的,这里就不再给大家讲解其原理了。

我们做管理员必须知晓的安全(长篇)


      本文从系统管理员的角度讨论安全问题.系统管理员是管理系统的人:启动系统,停止系统运行,安装新软件,增加新用户,删除老用户,以及完成保持系统发展和运行的日常事务工作.  



1.安全管理  



安全管理主要分为四个方面:  



(1)防止未授权存取:这是计算机安全最重要的问题:未被使用系统的人进入系统.用户意识,良好的口令管理(由系统管理员和用户双方配合),登录活动记录和报告,用户和网络活动的周期检查,这些都是防止未授权存取的关键.  



(2)防止泄密:这也是计算机安全的一个重要问题.防止已授权或未授权的用户相互存取相互的重要信息.文件系统查帐,su登录和报告,用户意识,加密都是防止泄密的关键.  



(3)防止用户拒绝系统的管理:这一方面的安全应由操作系统来完成.一个系统不应被一个有意试图使用过多资源的用户损害.不幸的是,UNIX不能很好地限制用户对资源的使用,一个用户能够使用文件系统的整个磁盘空间,而UNIX基本不能阻止用户这样做.系统管理员最好用PS命令,记帐程序df和du周期地检查系统.查出过多占用CUP的进程和大量占用磁盘的文件.  



(4)防止丢失系统的完整性:这一安全方面与一个好系统管理员的实际工作(例如:周期地备份文件系统,系统崩溃后运行fsck检查,修复文件系统,当有新用户时,检测该用户是否可能使系统崩溃的软件)和保持一个可靠的操作系统有关(即用户不能经常性地使系统崩溃).  



本文其余部分主要涉及前两个问题,第三个问题在"安全查帐"一节讨论.  



2.超级用户  



一些系统管理命令只能由超级用户运行.超级用户拥有其他用户所没有的特权,超级用户不管文件存取许可方式如何,都可以读,写任何文件,运行任何程序. 系统管理员通常使用命令: /bin/su 或以 root 进入系统从而成为超级用户.在后面文章中以#表示应敲入必须由超级用户运行的命令,用$表示应敲入由所有其他用户运行的命令.  



3.文件系统安全  



(1)UNIX文件系统概述  



UNIX文件系统是UNIX系统的心脏部分,提供了层次结构的目录和文件.文件系统将磁盘空间划分为每1024个字节一组,称为块(block)(也有用512字节为一块的,如:SCO XENIX).编号从0到整个磁盘的最大块数.  



全部块可划分为四个部分,块0称为引导块,文件系统不用该块;块1称为专用块,专用块含有许多信息,其中有磁盘大小和全部块的其它两部分的大小.从块2开始是i节点表,i节点表中含有i节点,表的块数是可变的,后面将做讨论. i节点表之后是空闲存储块(数据存储块),可用于存放文件内容.  



文件的逻辑结构和物理结构是十分不同的,逻辑结构是用户敲入cat命令后所看到的文件,用户可得到表示文件内容的字符流.物理结构是文件实际上如何存放在磁盘上的存储格式.用户认为自己的文件是边疆的字符流,但实际上文件可能并不是以边疆的方式存放在磁盘上的,长于一块的文件通常将分散地存放在盘上.然而当用户存取文件时,UNIX文件系统将以正确的顺序取各块, 给用户提供文件的逻辑结构.  



当然,在UNIX系统的某处一定会有一个表,告诉文件系统如何将物理结构转换为逻辑结构.这就涉及到i节点了.i节点是一个64字节长的表,含有有关一个文件的信息,其中有文件大小,文件所有者,文件存取许可方式,以及文件为普通文件,目录文件还是特别文件等.在i节点中最重要的一项是磁盘地址表. 该表中有13个块号.前10个块号是文件前10块的存放地址.这10个块号能给出一个至多10块长的文件的逻辑结构,文件将以块号在磁盘地址表中出现的顺序依次取相应的块.  



当文件长于10块时又怎样呢?磁盘地址表中的第十一项给出一个块号,这个块号指出的块中含有256个块号,至此,这种方法满足了至多长于266块的文件(272,384字节).如果文件大于266块,磁盘地址表的第十二项给出一个块号, 这个块号指出的块中含有256个块号,这256个块号的每一个块号又指出一块, 块中含256个块号,这些块号才用于取文件的内容.磁盘地址中和第十三项索引寻址方式与第十二项类似,只是多一级间接索引.  



这样,在UNIX系统中,文件的最大长度是16,842,762块,即17,246,988,288字节,有幸是是UNIX系统对文件的最大长度(一般为1到2M字节)加了更实际的限制,使用户不会无意中建立一个用完整个磁盘窨所有块的文件.  



文件系统将文件名转换为i节点的方法实际上相当简单.一个目录实际上是一个含有目录表的文件:对于目录中的每个文件,在目录表中有一个入口项, 入口项中含有文件名和与文件相应的i节点号.当用户敲入cat xxx时,文件系统就在当前目录表中查找名为xxx的入口项,得到与文件xxx相应的i节点号,然后开始取含有文件xxx的内容的块.  



(2)设备文件  



UNIX系统与边在本系统上的各种设备之间的通讯,通过特别文件来实现,就程序而言,磁盘是文件,MODEM是文件,甚至内存也是文件.所有连接到系统上的设备都在/dev目录中有一个文件与其对应.当在这些文件上执行I/O操作时,由UNIX系统将I/O操作转换成实际设备的动作.例如,文件/dev/mem是系统的内存,如果cat这个文件,实际上是在终端显示  



系统的内存.为了安全起见,这个文件对普通用户是不可读的.因为在任一给定时间,内存区可能含有用户登录口令或运行程序的口令,某部分文件的编辑缓冲区,缓冲区可能含有用ed -x命令解密后的文本,以及用户不愿让其他人存取的种种信息.  



在/dev中的文件通常称为设备文件,用ls /dev命令可以看看系统中的一些设备:  



acuo 呼叫自动拨号器  



console 系统控制台  



dsknn 块方式操作磁盘分区  



kmem 核心内存  



mem 内存  



lp 打印机  



mto 块方式操作磁带  



rdsknn 流方式操作的磁盘分区  



rmto 流方式操作的磁带  



swap 交换区  



syscon 系统终端  



ttynn 终端口 x25 网络端口  



等等  



(3)/etc/mknod命令  



用于建立设备文件.只有root能使用这个命令建立设备文件.其参数是文件名,字母c或b分别代表字符特别文件或块特别文件,主设备号,次设备号.块特别文件是像磁带,磁盘这样一些以块为单位存取数据的设备.字符特别文件是如像终端,打印机,MODEM,或者其它任何与系统通讯时,一次传输一个字符的设备,包括模仿对磁盘进行字符方式存取的磁盘驱动器.主设备号指定了系统子程序(设备驱动程序),当在设备上执行I/O时,系统将调用这个驱动程序.调用设备驱动程序时,次设备号将传递给该驱动程序(次设备规定具体的磁盘驱动器,带驱动器,信号线编号,或磁盘分区).每种类型的设备一般都有自己的设备驱动程序.  



文件系统将主设备号和次设备号存放在i节点中的磁盘地址表内,所以没有磁盘空间分配给设备文件(除i节点本身占用的磁盘区外).当程序试图在设备文件上执行I/O操作时,系统识别出该文件是一个特别文件,并调用由主设备号指定的设备驱动程序,次设备号作为调用设备驱动程序的参数.  



(4)安全考虑  



将设备处理成文件,使得UNIX程序独立于设备,即程序不必一定要了解正使用的设备的任何特性,存取设备也不需要记录长度,块大小,传输速度,网络协议等这样一些信息,所有烦人的细节由设备驱动程序去关心考虑,要存取设备,程序只须打开设备文件,然后作为普通的UNIX文件来使用.  



从安全的观点来看这样处理很好,因为任何设备上进行的I/O操作只经过了少量的渠道(即设备文件).用户不能直接地存取设备.所以如果正确地设置了磁盘分区的存取许可,用户就只能通过UNIX文件系统存取磁盘.文件系统有内部安全机制(文件许可).不幸的是,如果磁盘分区设备得不正确,任何用户都能够写一个程序读磁盘分区中的每个文件,作法很简单:读一i节点,然后以磁盘地址表中块号出现的顺序,依次读这些块号指出的存有文件内容的块.故除了root以外,决不要使盘分区对任何人可写.因为所有者,文件存取许可方式这样一些信息存放于i节点中,任何人只要具有已安装分区的写许可,就能设置任何文件的SUID许可,而不管文件的所有者是谁,也不必用chmod()命令,还可避过系统建立的安全检查.  



以上所述对内存文件mem,kmem和对换文件swap也是一样的.这些文件含有用户信息,一个"耐心"的程序可以将用户信息提取出来.  



要避免磁盘分区(以及其它设备)可读可写,应当在建立设备文件前先用umask命令设置文件建立屏蔽值.  



一般情况下,UNIX系统上的终端口对任何人都是可写的,从而使用户可以用write命令发送信息.虽然write命令易引起安全方面的问题,但大多数用户觉得用write得到其他用户的信息很方便,所以系统将终端设备的存取许可设置成对所有用户可写. /dev目录应当是755存取许可方式,且属root所有.  



不允许除root外的任何用户读或写盘分区的原则有一例外,即一些程序(通常是数据库系统)要求对磁盘分区直接存取,解决这个问题的经验的盘分区应当由这种程序专用(不安装文件系统),而且应当告知使用这种程序的用户,文件安全保护将由程序自己而不是UNIX文件系统完成.  



(5)find命令  



find命令用于搜索目录树,并对目录树上的所有文件执行某种操作,参数是目录名表(指出从哪些起点开始搜索),还可给出一个或多个选项,规定对每个文件执行什么操作.  



find . -print 将列出当前工作目录下的目录树的每一个文件.  



find / -user bob -print 将列出在系统中可找到的属于bob用户的所有文件.  



find /usr/bob -perm 666 -print 将列出/usr/bob目录树下所有存取许可为666的文件.若将666改为-666则将列出所有具有包含了666在内的存取许可方式的文件(如777).  



find /usr/bob -type b -print 将列出/usr/bob目录树下所有块特别文件(c为字符特别文件).  



find / -user root -perm -4000 -exec ls -l {} ; 是一个较复杂一点的命令,-exec COMMAND ;允许对所找到的每个文件运行指定的命令COMMAND.若COMMAND中含有{},则{}将由find所找到的文件名替换.COMMAND必须以;结束.  



以上举例介绍find的用法,各选项可组合使用以达到更强的功能.  



(6)secure程序  



系统管理员应当做一个程序以定期检查系统中的各个系统文件,包括检查设备文件和SUID,SGID程序,尤其要注意检查SUID,SGID程序,检查/etc/passwd和/etc/group文件,寻找久未登录的户头和校验各重要文件是否被修改. (源程序清单将在今后发表)  



(7)n  



check命令  



用于检查文件系统,只用一个磁盘分区名作为参数,将列出i节点号及相应的文件名.i节点相同的文件为建链文件.  



注意:所列出的清单文件名与mount命令的第一个域相同的文件名前部分将不会列出来.因为是做文件系统内部的检查,ncheck并不知道文件系统安装点以上部分的目录.  



也可用此命令来搜索文件系统中所有的SUID和SGID程序和设备文件,使用-s选项来完成此项功能.  



(8)安装和拆卸文件系统  



UNIX文件系统是可安装的,这意味着每个文件系统可以连接到整个目录树的任意节点上(根目录总是被安装上的).安装文件系统的目录称为安装点.  



/etc/mount命令用于安装文件系统,用这条命令可将文件系统安装在现有目录结构的任意处.  



安装文件系统时,安装点的文件和目录都是不可存取的,因此未安装文件系统时,不要将文件存入安装点目录.文件系统安装后,安装点的存取许可方式和所有者将改变为所安装的文件根目录的许可方式和所有者.  



安装文件系统时要小心:安装点的属性会改变!还要注意新建的文件,除非新文件系统是由标准文件建立的,系统标准文件会设置适当的存取许可方式, 否则新文件系统的存取许可将是777! 可用-r选项将文件系统安装成只读文件系统.需要写保护的带驱动器和磁盘应当以这种方式来安装.  



不带任何参数的/etc/mount可获得系统中所安装的文件系统的有关信息.包括:文件系统被安装的安装点目录,对应/dev中的哪个设备,只读或可读写, 安装时间和日期等.  



从安全的观点来讲,可安装系统的危险来自用户可能请求系统管理员为其安装用户自己的文件系统.如果安装了用户的文件系统,则应在允许用户存取文件系统前,先扫描用户的文件系统,搜索SUID/SGID程序和设备文件.在除了root外任何人不能执行的目录中安装文件系统,用find命令或secure列出可疑文件,删除不属用户所有的文件的SUID/SGID许可.  



用户的文件系统用完后,可用umount命令卸下文件系统.并将安装点目录的所有者改回root,存取许可改为755.  



(9)系统目录和文件  



UNIX系统中有许多文件不允许用户写,如:/bin,/usr/bin,/usr/lbin, /etc/passwd, /usr/lib/crontab, /unix, /etc/rc, /etc/inittab这样一些文件和目录(大多数的系统目录),可写的目录允许移动文件,会引起安全问题. 统管理员应经常检查系统文件和目录的许可权限和所有者.可做一个程  



序根据系统提供的规则文件(在/etc/permlist文件中)所描述的文件所有者和许可权规则检查各文件.  



(源程序清单将在今后发表)  



注意:如果系统的安全管理不好,或系统是新安装的,其安全程序不够高, 可以用make方式在安全强的系统上运行上述程序,将许可规则文件拷贝到新系统来,再以设置方式在新系统上运行上述程序,就可提高本系统的安全程序.但要记住,两个系统必须运行相同的UNIX系统版本.  



4.作为root运行的程序  



在UNIX系统中,有些程序由系统作为root进程运行.这些程序并不总是具有SUID许可,因为其不少程序仅由root运行,系统管理员需要清楚这些程序做什么, 以及这些程序还将运行其它什么程序.  



(1)启动系统  



当某些UNIX系统(如SCO UNIX/XENIX)启动时,是以被称为单用户的方式运行,在这种方式中普通用户不能登录,唯有的进程是init,swapper,以及一些由系统管理员从控制台运行的进程.UNIX系统的单用户方式启动,使系统管理员能在允许普通用户登录以前,先检查系统操作,确保系统一切正常,当系统处于单用户方式时,控制台作为超级用户,命令揭示是"#",有些UNIX系统不要确认超级用户口令就认可控制台是root,给出#提示符.这就可能成为一个安全问题.  



(2)init进程  



UNIX系统总是以某种方式或称为某种级运行,系统有若干种运行级,这些运行级由init进程控制.  



UNIX系统启动时以单用户方式运行,也叫1级或S级.  



对于其他用户登录进入系统,UNIX有一种多用户运行方式,也叫2级.  



init进程控制系统运行级,它读入文件/etc/inittab,该文件详细地规定了哪些进程在哪一级运行.当root敲入init n(数字),系统就进入n级.init读该文件以确定终止哪些进程,启动哪些进程.  



有效的运行级的数值是从0到6与s.  



注意:由init建立的进程以UID为0运行(root)从/etc/inittab运行的程序也作为root运行,所以系统管理员要确保自己知道/etc/inittab中的程序做什么工作,确保这些程序以及这些程序所在的目录直到/和/etc/inittab除root外无人可写.  



(3)进入多用户  



当UNIX系统进入多用户方式时,将寝化一系列事件,接着开始执行gettys, 允许其他用户登录进入系统.如果再看看/etc/inittab文件,会看到gettys定义在运行级2,至少三个shell程序/etc/brc, /etc/bcheckrc, /etc/rc*也定义在运行级2.这些程序都在gettys启动前运行.  



这些shell程序作为root运行,也不能仅对root可写还应当检查shell程序运行的命令,因为这些命令也将作为root运行.  



(4)shutdown命令  



用shutdown命令关系统,shutdown shell程序发送警告通知所有用户离开系统,在"给定的期限时间"到了后,就终止进程,拆卸文件系统,进入单用户方式或关机状态.一旦进入单用户方式,所有的gettys停止运行,用户再不能登录. 进入关机状态后可将系统关电. shutdown仅能由作为root登  



    6./etc/group文件  



/etc/group文件含有关于小组的信息,/etc/passwd中的每个GID在本文件中应当有相应的入口项,入口项中列出了小组名和小组中的用户.这样可方便地了解每个小组的用户,否则必须根据GID在/etc/passwd文件中从头至尾地寻找同组用户.  



/etc/group文件对小组的许可权限的控制并不是必要的,因为系统用UID,GID(取自/etc/passwd)决定文件存取权限,即使/etc/group文件不存在于系统中,具有相同

与病毒赛跑 系统中毒之后的自救


        现在虽然有众多的杀毒软件和防火墙作为电脑的保护网,但由于不可预知病毒的不断更新加上系统的未知漏洞和更隐蔽的黑客入侵,电脑中毒在互联网时代还是不可避免的。万一中毒该如何处理呢?下面就谈谈中毒后的一些处理措施。  



  一、正在上网的用户,发现异常应立刻断开连接  



  所谓的异常:  



  1.机器运行速度明显减慢;  



  2.打开某网页后无数对话框弹出;  



  3.花屏以及出现奇怪的消息;  



  4.鼠标键盘不受控制等现象;  



  典型的上网中毒有两种情况:  



  1、浏览某些带恶意代码的网页时候被修改了浏览器的默认主页或是标题。还有就是遇到可以格式化硬盘或是令你的Windows 不断打开窗口,直到耗尽资源死机——这种情况恶劣得多,你未保存和已经放在硬盘上的数据都可能会受到部分或全部的损失。  



  2、潜在的木马发作或是蠕虫类病毒发作,让你的机器不断地向外界发送你的隐私;或是利用你的名义和邮件地址发送垃圾进一步传播病毒;还有就是黑客的手工入侵,窥探你的隐私或是删除破坏你的文件。  



  自救措施:马上断开连接,这样在自己的损失降低的同时,也避免了病毒向更多的在线电脑传播。请先不要马上重新启动系统或是关机,进一步的处理措施请参看后文。  



  二、中毒后应马上备份、转移文档和邮件等  



  中毒后运行杀毒软件杀毒是理所当然的了,但为了防止杀毒软件误杀或是删掉你还未处理完的文档和重要的邮件,你应该首先将它们备份到其他储存媒体上。有些长文件名的文件和未处理的邮件要求在Windows下备份,所以上文笔者建议你先不要退出Windows,因为病毒一旦发作,可能就不能进入 Windows了。  



  不管这些文件是否带毒,你都应该备份,用标签纸标记为“待查”即可。因为有些病毒是专门针对某个杀毒软件设计的,一运行就会破坏其他文件,所以先备份是防患于未然的措施。等你清除完硬盘内的病毒后,再来慢慢分析处理这些额外备份的文件较为妥善。  



  三、需要在Windows下先运行一下杀CIH的软件(即使是带毒环境)  



  如果是发现了CIH病毒,要注意不能完全按平时报刊和手册建议的措施,即先关机、冷启动后用系统盘来引导再杀毒,而应在带毒的环境下也运行一次专杀CIH的软件。这样做,杀毒软件可能会报告某些文件受读写保护无法清理,但带毒运行的实际目的不在于完全清除病毒,而是在于把CIH下次开机时候的破坏减到最低,以防它在再次开机时破坏主板的BIOS硬件导致黑屏,让你下一步的杀毒工作无法进行。  



  四、需要干净的DOS启动盘和DOS下面的杀毒软件  



  到现在,就应该按很多杀毒软件的标准手册去按部就班地做。即关机后冷启动,用一张干净的DOS启动盘引导;另外由于中毒后可能Windows已经被破坏了部分关键文件,会频繁地报告非法操作,所以Windows下的杀毒软件可能会无法运行。所以请你也准备一个DOS下面的杀毒软件如KV300系列、金山毒霸以防万一。  



  即使能在Windows下运行杀毒软件,也请用两种以上工具交叉清理。在多数情况下Windows可能要重装,因为病毒会破坏掉一部分文件让系统变慢或出现频繁的非法操作。比如即使杀了CIH,微软的Outlook邮件程序也是反应较慢的。建议不要对某种杀毒软件带偏见,由于开发时候侧重点不同、使用的杀毒引擎不同,各种杀毒软件都是有自己的长处和短处的,交叉使用效果较理想。  



  五、如果有Ghost和分区表、引导区的备份,用之来恢复一次最保险  



  如果你在平时用Ghost备份做了Windows的,用之来镜像一次,得到的操作系统是最保险的。这样连潜在的未杀光的木马程序也顺便清理了。当然,这要求你的Ghost备份是绝对可靠的。要是作Ghost的时候把木马也“备份”了就后患无穷了。  



  六、再次恢复系统后,更改你的网络相关密码  



  包括登录网络的用户名、密码,邮箱的密码和QQ的密码等,防止黑客用上次入侵过程中得到的密码进入你的系统。另外因为很多蠕虫病毒发作会向外随机发送你的信息,所以及时地更改是必要的。

警惕:网站程序中默认的几个危险文件


      
随着互联网的兴起,越来越多的人想拥有自己的网站,可是许多人都不太懂做网站或者是没时间做,所以借用别人的源码便成了一种流行的方式。正因为如此,才造就了如此不平静的网络世界,因为程序漏洞无处不在。    许多朋友谈起论坛就首先想到的是动网,因为它确实是国内最优秀的ASP论坛程序,所以许多的网站都用动网论坛架设自己的论坛。也正因为动网的广泛使用,所以读它代码研究漏洞的人是越来越多,当然漏洞是一次又一次的被发现,各网站的管理员是一次又一次的为动网而烦恼,而伤神。
    好了,扯远了,我们这里从动网的安装文件说起,让大家知道你的网站是如何被人攻击的。
    一.从动网key.asp文件谈起
    动网的key.asp文件说明书是这样写的:
    1、请把压缩包中的key.asp文件上传到Dvbbs7.1论坛目录下。
    2、运行key.asp后选择您所需要的选项。
    3、注意:使用完毕后请点击"删除文件"或在FTP中删除key.asp文件以防留有后门。
    写的够明白了,使用后要删除,可是就是有许多的网站管理员不负责,将这个危险的后门放在网站上,直到有一天,有个家伙闯了进来,改了它的首页……..时至今日,仍有些网站有这样的漏洞,不信,我给大家抓个图:
图1 网站的漏洞截图(点击看大图)
    看图上的你就知道key.asp到底是做什么的啦,它可以将一个网站的管理员资料修改或者添加一个管理员。加了一个管理员后我们可以像正常的管理员一样编辑别人的贴子,新添加一些版块什么的,这些都不算是严重的,更严重的是,前台我们发贴就可以上传图片,而后台我们可以备份数据库。试想,如果我们把一个ASP木马保存为图片格式上传到网站服务器,然后在后台通过备份数据库功能把这个图片备份为一个ASP文件,那么我们就拿到一个webshell了。思路很清晰,由于我这里讲的是key.asp文件的危害,就不操作了,以后的章节会有详细的讲述。
    二.由动网key.asp想到的惊云下载系统漏洞
    当然,互联网上并不仅公只有像动网这样的论坛程序,也还有许多其它优秀的文章系统、下载系统、留言本系统、博客程序、甚至有整站系统提供下载,笔者前不久研究惊云下载系统的漏洞的时候无意发现其安装说明谈到用zz.asp安装,安装的时候就是设置站长的账号和密码,当站长忘了自己的密码的时候可以通过它来修改,正如key.asp一样的功能,但是一不小心被我找到了:
图2 zz.asp文件(点击看大图)
    重新设置一个新的账号和密码,那么这个网站就是你的啦,后台随便你进。后台我们可以利用得到webshell的方法,目前网上最为流传的是利用上传漏洞得到webshell,其实笔者通过几天的研究与测试,得到了另外两种得到webshell的方法,思路很灵活。总之,不要轻易留下后门给别人有机可乘。
    三.向BBSXP学习
    安装BBSXP论坛的时候,会调用install.asp来安装,装好了以后我们再把程序上传到网站上去,如果有哪个家伙还想用上面的方法来攻击你,那么他就知道他错了,写BBSXP的程序员看来是从动网的key.asp事件里学来的呵呵。他在代码时首先检测调试者写的IP与以后再调试的IP,如果不是同一个IP他就会报错,主要代码如下:
    youip="192.168.1.123" '您本机的IP地址
    if adminpassword<>"" and remoteaddr<>youip then
    error("<li>为了安全起见,请编辑 <font color=red>install.asp</font> 内本机的IP地址<li>请把它设置成 <font color=red>"&remoteaddr&"</font>")
    end if
    当我们访问一个BBSXP论坛的这个页面的时候,会出现一个醒目的红叉:
图3 BBSXP检测IP的功能(点击看大图)
    小结:
    对于别人的程序,在使用前最好先好好读一下程序的说明,毕竟程序是别人写的,写个说明当然是向使用者交待一些相关信息,另外,如果懂点程序,最好改一下比如说后台呀,数据库调用文件呀之类的,当然,如果你有能力发现漏洞,你就为官方补上这些漏洞呀!

驱除烦恼 如何应对最流行的几种捆绑器


        一、传统的捆绑器  这种原理很简单,也是目前用的最多的一种。就是将B.exe附加到A.exe的末尾。这样当A.exe被执行的时候,B.exe也跟着执行了。这种捆绑器的代码是满网都是。我最早是从jingtao的一篇关于流的文章中得知的。就目前来说,已经没什么技术含量了。

  检测方法:稍微懂一点PE知识的人都应该知道。一个完整有效的PE/EXE文件,他的里面都包含了几个绝对固定的特点[不管是否加壳]。一是文件以MZ开头,跟着DOS头后面的PE头以PE\0\0开头。有了这两个特点,检测就变得很简单了。只需利用UltraEdit一类工具打开目标文件搜索关键字MZ或者PE。如果找到两个或者两个以上。则说明这个文件一定是被捆绑了。不过值得注意的是,一些生成器也是利用了这个原理,将木马附加到生成器末尾,用户选择生成的时候读出来。另外网上流行的多款“捆绑文件检测工具”都是文件读出来,然后检索关键字MZ或者PE。说到这里,相信大家有了一个大概的了解。那就是所谓的“捆绑文件检测工具”是完全靠不住的一样东西。

  二、资源包裹捆绑器  就这原理也很简单。大部分检测器是检测不出来的,但灰鸽子木马辅助查找可以检测出捆绑后未经加壳处理的EXE文件。但一般人都会加壳,所以也十分不可靠。这个学过编程或者了解PE结构的人都应该知道。资源是EXE中的一个特殊的区段。可以用来包含EXE需要/不需要用到的任何一切东西。利用这个原理进行100%免杀捆绑已经让人做成了动画。大家可以去下载看看。那捆绑器是如何利用这一点的呢?这只需要用到BeginUpdateResource、UpdateResource和EndUpdateResource这三个API函数就可以搞定。这三个API函数是用来做资源更新/替换用的。作者只需先写一个包裹捆绑文件的头文件Header.exe.头文件中只需一段释放资源的代码。而捆绑器用的时候先将头文件释放出来,然后用上面说的三个API函数将待捆绑的文件更新到这个头文件中即完成了捆绑。类似原理被广泛运用到木马生成器上。

  检测方法:一般这种很难检测。如果你不怕麻烦,可以先将目标文件进行脱壳。然后用“灰鸽子木马辅助查找”或“ResTorator”一类工具将资源读出来进行分析。但这种方法毕竟不通用。所以还是推荐有条件的朋友使用虚拟机。

  三、编译器捆绑法

  暂时不知用什么名字来形容,所以只能用这个来代替。这种方法相当的阴险。是将要捆绑的文件转换成16进制保存到一个数组中。像这样muma:array[0..9128] of Byte=($4D,$5A,$50....$00);

  然后用时再用API函数CreateFile和WriteFile便可将文件还原到硬盘。这里稍稍学过编程的都知道。代码中的数组经过编译器、连接器这么一搞。连影都没了。哪还能有什么文件是吧?所以就这种方法而言,目前还没有可以查杀的方法。这种方法可以利用编程辅助工具jingtao的DcuAnyWhere或Anskya的AnyWhereFileToPas来实现。

  四、最最毒辣的一种  因为暂时用的人较少,且危害性及查杀难度太大。[一个被杀的病毒直接捆绑就能免杀,汗~]所以就不公布了。此法查杀方法通用性极差。如果流行,估计大家连动画都不敢下着看了。HOHO~

  补充:可以利用一些第三方工具将硬盘和注册表监视起来以后再运行那些你不确定是否被捆绑的程序。这样,一旦硬盘出现变化,或有文件新建,或有文件改变都会被记录在案。就算是查找起来也方便一点。