<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LinuxSense &#187; Linux安全</title>
	<atom:link href="http://www.linuxsense.org/archives/category/linux%e5%ae%89%e5%85%a8/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linuxsense.org</link>
	<description>分享Linux技术的点点滴滴</description>
	<lastBuildDate>Sat, 01 Aug 2009 05:23:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Unix下rootkit</title>
		<link>http://www.linuxsense.org/archives/209.html</link>
		<comments>http://www.linuxsense.org/archives/209.html#comments</comments>
		<pubDate>Sat, 19 Jul 2008 08:28:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux安全]]></category>
		<category><![CDATA[rootkit]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=209</guid>
		<description><![CDATA[传统的Rootkit是一种比普通木马后门更为阴险的木马后门。它主要通过替换系统文件来达到目的，这样就会更加隐蔽，使检测变得比较困难。传统的Rootkit主要针对Unix平台，例如Linux、AIX、 SunOs等操作系统，有些Rootkits可以通过替换DLL文件或更改系统来攻击Windows平台。Rootkit并不能让你直接获得权限，相反它是在你通过各种方法获得权限后才能使用的一种保护权限的措施，在我们获取系统根权限（根权限即root权限，是Unix系统的最高权限）以后， Rootkits提供了一套工具用来建立后门和隐藏行迹，从而让攻击者保住权限。
传统Rootkit对Unix的攻击
RootKits是如何实现后门的呢？为了理解 Rootkits后门，有必要先了解一下Unix的基本工作流程，当我们访问Unix时（不管是本地还是远程登录），/bin/login程序都会运行，系统将通过/bin/login来收集并核对用户的帐号和密码。Rootkits使用一个带有根权限后门密码的/bin/login来替换系统的 /bin/login，这样攻击者输入根权限后门的密码，就能进入系统。就算管理员更改了原来的系统密码或者把密码清空。我们仍能够使用后门密码以根用户身份登录。在攻入Unix系统后，入侵者通常会进行一系列的攻击动作，如安装嗅探器收集重要数据，而Unix中也会有些系统文件会监视这些动作，比如 ifconfig等，Rootkit当然不会束手就擒，它会同样替换一下这些系统文件，通常被Rootkit替换的系统程序有login， ifconfig，du，find，ls，netstart，ps等。由于篇幅问题，这些系统文件的功能就不一一罗列，有兴趣的读者可以自己去查找，现在 Rootkit的工具很多，里面基本都是包含一些处理过的系统文件来代替原来的系统文件的，像tOmkit等一些Rootkit就是比较优秀的了。

防御办法：Rootkit如此可怕，得好好防它才行，实际上，最有效的防御方法是定期对重要系统文件的完整性进行核查，这类的工具很多，像Tripwire就是一个非常不错的文件完整性检查工具。一但发现遭受到 Rootkit攻击，必须完全重装所有的系统文件、部件和程序，以确保安全性。
写到这里，战争似乎结束了，然而更可怕的Rootkit还没登场，那就是内核级Rootkit。在大多数操作系统中（各种Unix和Windows)，内核是操作系统最基本的部件，它控制着对网络设备、进程、系统内存、磁盘等的访问。例如当你打开一个文件时，打开文件的请求被发送到内核，内核负责从磁盘得到文件的比特位并运行你的文件浏览程序。内核级 Rootkit使攻击者获得对系统底层的完全控制权。攻击者可以修改你的内核，大多数内核级Rootkit都能进行执行重定向，即截获运行某一程序的命令，将其重定向到入侵者所选中的程序并运行此程序。也就是说用户或管理员要运行程序A，被修改过的内核假装执行A，实际却执行了程序B。
内核级Rootkit对Unix的攻击
和传统的Rootkit不同，内核级Rootkit攻击时 Unix的bin/login并未被修改，但所有执行/bin/login的请求（当登录系统时将产生）都被重定向到攻击者制作的隐藏文件 /bin/backdoorlogin，这样当系统管理员使用检测传统级别的Rootkit的方法（比如用tripwire之类的软件检测文件的完整性）就行不通了，因为/bin/login并没有被改变。同样的道理，攻击者对其他的系统程序也进行重定，这样你的操作实际就是按照入侵者的意愿执行了。
内核级Rootkit不仅会进行“执行重定向”设置，还有很多支持文件隐蔽。传统的Rootkit是通过替换ls程序来实现文件的隐藏，而内核级的Rootkit则是通过对内核的修改来对ls程序欺骗，更加的阴险隐蔽。另外内核级的Rootkit还能对进程和网络进行隐藏，用户将得不到真实的系统情况报告。
实现思路：根据系统的类型，攻击者有不同的方法来对内核进行修改，在N种Unix系统上修改内核最简单的方法就是利用系统本身的加载的内核模块(LKM)的功能，因此大多数的内核级Rootkit通过利用LKM动态地将内核更新来提供新功能，新添加的模块扩展了内核，同时对内核和其他使用内核的所有东西有了完全访问权。
因此，许多内核级Rootkit都通过LKM来实现。安装通过LKM实现的内核级Rootkit十分简单。例如，在Linux上安装Knark内核级Rootkit只需具有根权限的入侵者输入命令：insmod knark.o就行了，模块被安装后就等着我们输入命令了。更妙的是整个过程不需要重启。通过LKM实现的Rootkit在Unix上十分流行。我们也常常会通过给windows平台打LKM补丁的方法攻击windows。
内核级Rootkit实例
现在有大量的内核级Rootkit可用，就选几种比较强大的来跟大家讨论一下。
一、linux上的内核级Rootkit：Knark
Knark具有各种标准的内核级Rootkit功能，包括执行重定向，文件隐藏，进程隐藏和网络隐藏。另外，还有不少比较过瘾的功能，如：
1、远程执行：我们可以通过网络向运行Knark的机器发送一条命令，源地址是假造的，命令被发往UDP端口53，使之表面上看起来像是DNS流量。我们就可以利用这个功能来升级Knark，删除系统文件或任何我们想做的事。
2、任务攻击：当某一进程在系统上运行时，它总是具有与 UID和有效的UID(EUID)相关的权限。另外进程还具有与文件系统UID(FSUID)相关的文件及目录访问权。Knark的任务攻击能力可实时地将进程UID，EUID和FSUID改变。进程在不停止运动的情况下突然具有了新的权限。
3、隐藏混杂模式：同一般的RootKit一样，入侵者也会在受害者机器上运行嗅探器。我们可以用文件隐藏和进程隐藏将嗅探器隐藏起来。然而，以太网卡会被设成混杂模式，管理员可以检查到这一点Knark将内核进行了修改，使之隐瞒网卡的混合模式，这将使嗅探变得更加隐秘。
4、实时进程隐藏：Knark可以将一个正在运行的进程隐藏起来。通过发送信号31给一个进程，此进程将消失，但仍在运行。命令kill-31 process_id将阻止内核汇报任何有关此进程的信息。进程在运行时，ps和lsof命令的使用都不能显示此进程。
5、内核模块隐藏：Linux中的lsmod命令可以列出当前在机器上安装的LKM，我们自然不想让管理员看到Knark模块，因此Knark包含了一个单独的模块modhide，modhide将Knark和自己隐藏了起来。这样，当我们用Knark攻击一个系统时，我们首先为Knark.o做一个insmod，然后为modhide.o做一个insmod。这样不管谁运行lsmod命令，这些模块都不会被发现。
二、另一个Linux上的内核级Rootkit：Adore
同Knark一样，Adore也是一个针对Linux的LKM RootKit，他包含了标准的内核级Rootkit功能，如文件隐藏，进程隐藏，网络隐藏和内核模块隐藏。我们只所以讨论Adore，是因为他还有一个非常强大的功能：内置的根权限后门。
Adore的根权限后门可以让我们连接到系统上并获得根权限的命令外壳，此功能十分直接了当 ，Adore将此功能巧妙的包含在内核模块中了。这一招十分难破，因为管理员看不到任何文件、进程、侦听网络端口的迹象。
防御办法：防御内核级的Rootkit的根本办法是不要让攻击者得到你的机器的系统的根本权限（Unix里的root和windows里的admin)，不过这看起来像废话：），目前对内核级的Rootkit还没有绝对的防御体系。
]]></description>
			<content:encoded><![CDATA[<p>传统的Rootkit是一种比普通木马后门更为阴险的木马后门。它主要通过替换系统文件来达到目的，这样就会更加隐蔽，使检测变得比较困难。传统的Rootkit主要针对Unix平台，例如Linux、AIX、 SunOs等操作系统，有些Rootkits可以通过替换DLL文件或更改系统来攻击Windows平台。Rootkit并不能让你直接获得权限，相反它是在你通过各种方法获得权限后才能使用的一种保护权限的措施，在我们获取系统根权限（根权限即root权限，是Unix系统的最高权限）以后， Rootkits提供了一套工具用来建立后门和隐藏行迹，从而让攻击者保住权限。<br />
传统Rootkit对Unix的攻击<br />
RootKits是如何实现后门的呢？为了理解 Rootkits后门，有必要先了解一下Unix的基本工作流程，当我们访问Unix时（不管是本地还是远程登录），/bin/login程序都会运行，系统将通过/bin/login来收集并核对用户的帐号和密码。Rootkits使用一个带有根权限后门密码的/bin/login来替换系统的 /bin/login，这样攻击者输入根权限后门的密码，就能进入系统。就算管理员更改了原来的系统密码或者把密码清空。我们仍能够使用后门密码以根用户身份登录。在攻入Unix系统后，入侵者通常会进行一系列的攻击动作，如安装嗅探器收集重要数据，而Unix中也会有些系统文件会监视这些动作，比如 ifconfig等，Rootkit当然不会束手就擒，它会同样替换一下这些系统文件，通常被Rootkit替换的系统程序有login， ifconfig，du，find，ls，netstart，ps等。由于篇幅问题，这些系统文件的功能就不一一罗列，有兴趣的读者可以自己去查找，现在 Rootkit的工具很多，里面基本都是包含一些处理过的系统文件来代替原来的系统文件的，像tOmkit等一些Rootkit就是比较优秀的了。</p>
<p><span id="more-209"></span><br />
防御办法：Rootkit如此可怕，得好好防它才行，实际上，最有效的防御方法是定期对重要系统文件的完整性进行核查，这类的工具很多，像Tripwire就是一个非常不错的文件完整性检查工具。一但发现遭受到 Rootkit攻击，必须完全重装所有的系统文件、部件和程序，以确保安全性。<br />
写到这里，战争似乎结束了，然而更可怕的Rootkit还没登场，那就是内核级Rootkit。在大多数操作系统中（各种Unix和Windows)，内核是操作系统最基本的部件，它控制着对网络设备、进程、系统内存、磁盘等的访问。例如当你打开一个文件时，打开文件的请求被发送到内核，内核负责从磁盘得到文件的比特位并运行你的文件浏览程序。内核级 Rootkit使攻击者获得对系统底层的完全控制权。攻击者可以修改你的内核，大多数内核级Rootkit都能进行执行重定向，即截获运行某一程序的命令，将其重定向到入侵者所选中的程序并运行此程序。也就是说用户或管理员要运行程序A，被修改过的内核假装执行A，实际却执行了程序B。<br />
内核级Rootkit对Unix的攻击<br />
和传统的Rootkit不同，内核级Rootkit攻击时 Unix的bin/login并未被修改，但所有执行/bin/login的请求（当登录系统时将产生）都被重定向到攻击者制作的隐藏文件 /bin/backdoorlogin，这样当系统管理员使用检测传统级别的Rootkit的方法（比如用tripwire之类的软件检测文件的完整性）就行不通了，因为/bin/login并没有被改变。同样的道理，攻击者对其他的系统程序也进行重定，这样你的操作实际就是按照入侵者的意愿执行了。<br />
内核级Rootkit不仅会进行“执行重定向”设置，还有很多支持文件隐蔽。传统的Rootkit是通过替换ls程序来实现文件的隐藏，而内核级的Rootkit则是通过对内核的修改来对ls程序欺骗，更加的阴险隐蔽。另外内核级的Rootkit还能对进程和网络进行隐藏，用户将得不到真实的系统情况报告。<br />
实现思路：根据系统的类型，攻击者有不同的方法来对内核进行修改，在N种Unix系统上修改内核最简单的方法就是利用系统本身的加载的内核模块(LKM)的功能，因此大多数的内核级Rootkit通过利用LKM动态地将内核更新来提供新功能，新添加的模块扩展了内核，同时对内核和其他使用内核的所有东西有了完全访问权。<br />
因此，许多内核级Rootkit都通过LKM来实现。安装通过LKM实现的内核级Rootkit十分简单。例如，在Linux上安装Knark内核级Rootkit只需具有根权限的入侵者输入命令：insmod knark.o就行了，模块被安装后就等着我们输入命令了。更妙的是整个过程不需要重启。通过LKM实现的Rootkit在Unix上十分流行。我们也常常会通过给windows平台打LKM补丁的方法攻击windows。<br />
内核级Rootkit实例<br />
现在有大量的内核级Rootkit可用，就选几种比较强大的来跟大家讨论一下。<br />
一、linux上的内核级Rootkit：Knark<br />
Knark具有各种标准的内核级Rootkit功能，包括执行重定向，文件隐藏，进程隐藏和网络隐藏。另外，还有不少比较过瘾的功能，如：<br />
1、远程执行：我们可以通过网络向运行Knark的机器发送一条命令，源地址是假造的，命令被发往UDP端口53，使之表面上看起来像是DNS流量。我们就可以利用这个功能来升级Knark，删除系统文件或任何我们想做的事。<br />
2、任务攻击：当某一进程在系统上运行时，它总是具有与 UID和有效的UID(EUID)相关的权限。另外进程还具有与文件系统UID(FSUID)相关的文件及目录访问权。Knark的任务攻击能力可实时地将进程UID，EUID和FSUID改变。进程在不停止运动的情况下突然具有了新的权限。<br />
3、隐藏混杂模式：同一般的RootKit一样，入侵者也会在受害者机器上运行嗅探器。我们可以用文件隐藏和进程隐藏将嗅探器隐藏起来。然而，以太网卡会被设成混杂模式，管理员可以检查到这一点Knark将内核进行了修改，使之隐瞒网卡的混合模式，这将使嗅探变得更加隐秘。<br />
4、实时进程隐藏：Knark可以将一个正在运行的进程隐藏起来。通过发送信号31给一个进程，此进程将消失，但仍在运行。命令kill-31 process_id将阻止内核汇报任何有关此进程的信息。进程在运行时，ps和lsof命令的使用都不能显示此进程。<br />
5、内核模块隐藏：Linux中的lsmod命令可以列出当前在机器上安装的LKM，我们自然不想让管理员看到Knark模块，因此Knark包含了一个单独的模块modhide，modhide将Knark和自己隐藏了起来。这样，当我们用Knark攻击一个系统时，我们首先为Knark.o做一个insmod，然后为modhide.o做一个insmod。这样不管谁运行lsmod命令，这些模块都不会被发现。<br />
二、另一个Linux上的内核级Rootkit：Adore<br />
同Knark一样，Adore也是一个针对Linux的LKM RootKit，他包含了标准的内核级Rootkit功能，如文件隐藏，进程隐藏，网络隐藏和内核模块隐藏。我们只所以讨论Adore，是因为他还有一个非常强大的功能：内置的根权限后门。<br />
Adore的根权限后门可以让我们连接到系统上并获得根权限的命令外壳，此功能十分直接了当 ，Adore将此功能巧妙的包含在内核模块中了。这一招十分难破，因为管理员看不到任何文件、进程、侦听网络端口的迹象。<br />
防御办法：防御内核级的Rootkit的根本办法是不要让攻击者得到你的机器的系统的根本权限（Unix里的root和windows里的admin)，不过这看起来像废话：），目前对内核级的Rootkit还没有绝对的防御体系。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/209.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux病毒发展史</title>
		<link>http://www.linuxsense.org/archives/208.html</link>
		<comments>http://www.linuxsense.org/archives/208.html#comments</comments>
		<pubDate>Sat, 19 Jul 2008 08:22:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux安全]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=208</guid>
		<description><![CDATA[不要以为只有windows下才有病毒, linux操作系统等类unix操作系统家族一样避免不了病毒, 没有任何OS可以避免病毒
1996年的Staog是Linux系统下的第一个病毒，它出自澳大利亚一个叫VLAD的组织（Windows 95下的第一个病毒程序Boza也系该组织所为）。Staog病毒是用汇编语言编写，专门感染二进制文件，并通过三种方式去尝试得到root权限。 Staog病毒并不会对系统有什么实质性的损坏。它应该算是一个演示版。它向世人揭示了Linux可能被病毒感染的潜在危险。Linux系统上第二个被发现的病毒是Bliss病毒，它是一个不小心被释放出来的实验性病毒。与其它病毒不同的是，Bliss本身带有免疫程序，只要在运行该程序时加上 “disinfect-files-please”选项，即可恢复系统。
　　
　　如果说刚开始时Linux病毒向人们展示的仅仅是一个概念，那么，在2001年发现的Ramen病毒，则已经开始引起很多人的担心。Ramen病毒可以自动传播，无需人工干预，所以和1988年曾使人们大受其苦的 Morris蠕虫非常相似。它只感染Red Hat 6.2和7.0版使用匿名FTP服务的服务器，它通过两个普通的漏洞RPC.statd和wu-FTP感染系统。
　　
　　表面看来，这不是一个危险的病毒。它很容易被发现，且不会对服务器做出任何有破坏性的事情。但是当它开始扫描时，将消耗大量的网络带宽。
　　
　　从1996年至今，新的Linux病毒屈指可数，这说明Linux是一个健壮的具有先天病毒免疫能力的操作系统。当然，出现这种情况，除了其自身设计优秀外，还有其它的原因。
　　
　　首先，Linux早期的使用者一般都是专业人士，就算是今天，虽然其使用者激增，但典型的使用者仍为那些有着很好的电脑背景且愿意帮助他人的人， Linux 高手更倾向于鼓励新手支持这样一种文化精神。正因为如此，Linux使用群中一种倾向就是以安全的经验尽量避免感染病毒。其次，年轻，也是Linux很少受到病毒攻击的原因之一。事实上，所有的操作系统（包括DOS和Windows）在其产生之初，也很少受到各种病毒的侵扰。
　　
　　然而， 2001年3月，美国SANS学院的全球事故分析中心(Global Incident Analysis Center——GIAC)发现，一种新的针对使用Linux系统的计算机的蠕虫病毒正通过互联网迅速蔓延，它将有可能对用户的电脑系统造成严重破坏。这种蠕虫病毒被命名为“狮子”病毒，与Ramen蠕虫病毒非常相似。但是，这种病毒的危险性更大，“狮子”病毒能通过电子邮件把一些密码和配置文件发送到一个位于china.com的域名上。Dartmouth学院安全技术研究所工程师威廉·斯蒂恩斯说：“攻击者在把这些文件发回去之后就可以通过第一次突破时的缺口再次进入整个系统。这就是它与Ramen蠕虫病毒的不同之处。事实上，Ramen病毒是一种比较友善的病毒，它在侵入系统后会自动关闭其中的漏洞，而这个病毒却让那些漏洞敞开并开辟新的漏洞。以至于如果你的系统感染了这个病毒，我们不能百分之百确信这个系统有挽救的价值，更加合理的选择很有可能是转移你的数据并且重新格式化硬盘。”
　　
　　一旦计算机被彻底感染，“狮子”病毒就会强迫电脑开始在互联网上搜寻别的受害者。不过，感染“狮子”病毒的系统少于感染Ramen病毒的系统，但是它所造成的损失却比后者大得多。
　　
　　随着Klez病毒在Linux平台上的传染，防毒软件厂商开始提醒我们微软的操作系统不再是唯一易受病毒攻击的操作系统了。即使Linux和其他一些主流 UNIX平台的用户可能不是微软捆绑应用软件的大用户，不可能通过这些软件造成病毒的泛滥，Linux和UNIX仍然有它们自身并不引人注目的脆弱点。除了Klez以外，其他Linux/UNIX平台的主要威胁有：Lion.worm、OSF.8759病毒、Slapper、Scalper、 Linux.Svat和BoxPoison病毒，这些都很少被提及。
　　
　　病毒的制造者是一些精通编写代码的黑客，他们远比那些胡乱涂改网站却对编写病毒知之甚少的黑客要危险。一个被黑掉的网站可以很快修好，而病毒却更加隐蔽，会带来潜在的安全隐患，它会一直潜伏，直到给系统带来不可挽回的损害。
　　
　　另外，越多的Linux系统连接到局域网和广域网，就会有越多受攻击的可能，这是因为很多Linux病毒正在快速地扩散着。使用WINE的 Linux/UNIX系统特别容易受到病毒的攻击。WINE是一个公开源代码的兼容软件包，能让Linux平台运行Windows应用软件。 WINE系统特别容易遭受病毒的攻击，因为它们会使无论是对Linux的还是对 Windows的病毒、蠕虫和木马都能对系统产生威胁。
　　
　　Linux平台下的病毒分类
　　
　　可执行文件型病毒：可执行文件型病毒是指能够寄生在文件中的，以文件为主要感染对象的病毒。病毒制造者们无论使用什么武器，汇编或者C，要感染ELF文件都是轻而易举的事情。这方面的病毒如Lindose，当其发现一个ELF文件时，它将检查被感染的机器类型是否为Intel 80386，如果是，则查找该文件中是否有一部分的大小大于 2,784字节（或十六进制AEO），如果满足这些条件，病毒将用自身代码覆盖它并添加宿主文件的相应部分的代码，同时将宿主文件的入口点指向病毒代码部分。一个名为Alexander Bartolich的学生发表了一篇名为《如何编写一个Linux的病毒》的文章，详细描述了如何制作一个感染在Linux/i386的ELF可执行文件的寄生文件病毒。有了这样具启发性的、在网上发布的文档，基于Linux的病毒数量只会增长的更快，特别是自Linux的应用越来越广泛之后。
　　
　　蠕虫（worm）病毒：1988年Morris蠕虫爆发后，Eugene H. Spafford 为了区分蠕虫和病毒，给出了蠕虫的技术角度的定义，“计算机蠕虫可以独立运行，并能把自身的一个包含所有功能的版本传播到另外的计算机上。” （worm is a program that can run by itself and can propagate a fully working version of itself to other machines. ）。在Linux平台下，蠕虫病毒极为猖獗，像利用系统漏洞进行传播的ramen，lion，Slapper……这些臭名远播的家伙每一个都感染了大量的 Linux系统，造成了巨大的损失。它们就是开放原代码世界的nimda，红色代码。在未来，这种蠕虫病毒仍然会愈演愈烈，Linux系统应用越广泛，蠕虫的传播程度和破坏能力也会随之增加。
　　
　　脚本病毒：目前出现比较多的是使用shell脚本语言编写的病毒。此类病毒编写较为简单，但是破坏力同样惊人。我们知道，Linux系统中有许多的以.sh结尾的脚本文件，而一个短短十数行的shell脚本就可以在短时间内遍历整个硬盘中的所有脚本文件，进行感染。因此病毒制造者不需要具有很高深的知识，就可以轻易编写出这样的病毒，对系统进行破坏，其破坏性可以是删除文件，破坏系统正常运行，甚至下载一个木马到系统中等等。
　　
　　后门程序：在广义的病毒定义概念中，后门也已经纳入了病毒的范畴。活跃在Windows系统中的后门这一入侵者的利器在Linux平台下同样极为活跃。从增加系统超级用户账号的简单后门，到利用系统服务加载，共享库文件注射，rootkit工具包，甚至可装载内核模块（LKM），Linux平台下的后门技术发展非常成熟，隐蔽性强，难以清除。是Linux系统管理员极为头疼的问题。
　　
　　病毒、蠕虫和木马基本上意味着自动化的黑客行为，也许被病毒攻击比被黑客攻击更可能发生。直接的黑客攻击目标一般是服务器，而病毒是等机会的麻烦制造者。如果你的网络包含了Linux系统，特别危险的是服务器，不要在作出反应之前等待寻找Linux病毒、蠕虫和木马是否存在。做一些调查然后选择一个适合你系统的防毒产品，它们能帮你防止病毒的传播。至于Linux平台病毒在未来的发展，一切皆有可能。Windows下的病毒发展史，也有可能在 Linux上重演，这取决于Linux的发展。
]]></description>
			<content:encoded><![CDATA[<p>不要以为只有windows下才有病毒, linux操作系统等类unix操作系统家族一样避免不了病毒, 没有任何OS可以避免病毒</p>
<p>1996年的Staog是Linux系统下的第一个病毒，它出自澳大利亚一个叫VLAD的组织（Windows 95下的第一个病毒程序Boza也系该组织所为）。Staog病毒是用汇编语言编写，专门感染二进制文件，并通过三种方式去尝试得到root权限。 Staog病毒并不会对系统有什么实质性的损坏。它应该算是一个演示版。它向世人揭示了Linux可能被病毒感染的潜在危险。Linux系统上第二个被发现的病毒是Bliss病毒，它是一个不小心被释放出来的实验性病毒。与其它病毒不同的是，Bliss本身带有免疫程序，只要在运行该程序时加上 “disinfect-files-please”选项，即可恢复系统。<br />
　　<br />
　　如果说刚开始时Linux病毒向人们展示的仅仅是一个概念，那么，在2001年发现的Ramen病毒，则已经开始引起很多人的担心。Ramen病毒可以自动传播，无需人工干预，所以和1988年曾使人们大受其苦的 Morris蠕虫非常相似。它只感染Red Hat 6.2和7.0版使用匿名FTP服务的服务器，它通过两个普通的漏洞RPC.statd和wu-FTP感染系统。<br />
　　<br />
　　表面看来，这不是一个危险的病毒。它很容易被发现，且不会对服务器做出任何有破坏性的事情。但是当它开始扫描时，将消耗大量的网络带宽。<br />
<span id="more-208"></span>　　<br />
　　从1996年至今，新的Linux病毒屈指可数，这说明Linux是一个健壮的具有先天病毒免疫能力的操作系统。当然，出现这种情况，除了其自身设计优秀外，还有其它的原因。<br />
　　<br />
　　首先，Linux早期的使用者一般都是专业人士，就算是今天，虽然其使用者激增，但典型的使用者仍为那些有着很好的电脑背景且愿意帮助他人的人， Linux 高手更倾向于鼓励新手支持这样一种文化精神。正因为如此，Linux使用群中一种倾向就是以安全的经验尽量避免感染病毒。其次，年轻，也是Linux很少受到病毒攻击的原因之一。事实上，所有的操作系统（包括DOS和Windows）在其产生之初，也很少受到各种病毒的侵扰。<br />
　　<br />
　　然而， 2001年3月，美国SANS学院的全球事故分析中心(Global Incident Analysis Center——GIAC)发现，一种新的针对使用Linux系统的计算机的蠕虫病毒正通过互联网迅速蔓延，它将有可能对用户的电脑系统造成严重破坏。这种蠕虫病毒被命名为“狮子”病毒，与Ramen蠕虫病毒非常相似。但是，这种病毒的危险性更大，“狮子”病毒能通过电子邮件把一些密码和配置文件发送到一个位于china.com的域名上。Dartmouth学院安全技术研究所工程师威廉·斯蒂恩斯说：“攻击者在把这些文件发回去之后就可以通过第一次突破时的缺口再次进入整个系统。这就是它与Ramen蠕虫病毒的不同之处。事实上，Ramen病毒是一种比较友善的病毒，它在侵入系统后会自动关闭其中的漏洞，而这个病毒却让那些漏洞敞开并开辟新的漏洞。以至于如果你的系统感染了这个病毒，我们不能百分之百确信这个系统有挽救的价值，更加合理的选择很有可能是转移你的数据并且重新格式化硬盘。”<br />
　　<br />
　　一旦计算机被彻底感染，“狮子”病毒就会强迫电脑开始在互联网上搜寻别的受害者。不过，感染“狮子”病毒的系统少于感染Ramen病毒的系统，但是它所造成的损失却比后者大得多。<br />
　　<br />
　　随着Klez病毒在Linux平台上的传染，防毒软件厂商开始提醒我们微软的操作系统不再是唯一易受病毒攻击的操作系统了。即使Linux和其他一些主流 UNIX平台的用户可能不是微软捆绑应用软件的大用户，不可能通过这些软件造成病毒的泛滥，Linux和UNIX仍然有它们自身并不引人注目的脆弱点。除了Klez以外，其他Linux/UNIX平台的主要威胁有：Lion.worm、OSF.8759病毒、Slapper、Scalper、 Linux.Svat和BoxPoison病毒，这些都很少被提及。<br />
　　<br />
　　病毒的制造者是一些精通编写代码的黑客，他们远比那些胡乱涂改网站却对编写病毒知之甚少的黑客要危险。一个被黑掉的网站可以很快修好，而病毒却更加隐蔽，会带来潜在的安全隐患，它会一直潜伏，直到给系统带来不可挽回的损害。<br />
　　<br />
　　另外，越多的Linux系统连接到局域网和广域网，就会有越多受攻击的可能，这是因为很多Linux病毒正在快速地扩散着。使用WINE的 Linux/UNIX系统特别容易受到病毒的攻击。WINE是一个公开源代码的兼容软件包，能让Linux平台运行Windows应用软件。 WINE系统特别容易遭受病毒的攻击，因为它们会使无论是对Linux的还是对 Windows的病毒、蠕虫和木马都能对系统产生威胁。<br />
　　<br />
　　Linux平台下的病毒分类<br />
　　<br />
　　可执行文件型病毒：可执行文件型病毒是指能够寄生在文件中的，以文件为主要感染对象的病毒。病毒制造者们无论使用什么武器，汇编或者C，要感染ELF文件都是轻而易举的事情。这方面的病毒如Lindose，当其发现一个ELF文件时，它将检查被感染的机器类型是否为Intel 80386，如果是，则查找该文件中是否有一部分的大小大于 2,784字节（或十六进制AEO），如果满足这些条件，病毒将用自身代码覆盖它并添加宿主文件的相应部分的代码，同时将宿主文件的入口点指向病毒代码部分。一个名为Alexander Bartolich的学生发表了一篇名为《如何编写一个Linux的病毒》的文章，详细描述了如何制作一个感染在Linux/i386的ELF可执行文件的寄生文件病毒。有了这样具启发性的、在网上发布的文档，基于Linux的病毒数量只会增长的更快，特别是自Linux的应用越来越广泛之后。<br />
　　<br />
　　蠕虫（worm）病毒：1988年Morris蠕虫爆发后，Eugene H. Spafford 为了区分蠕虫和病毒，给出了蠕虫的技术角度的定义，“计算机蠕虫可以独立运行，并能把自身的一个包含所有功能的版本传播到另外的计算机上。” （worm is a program that can run by itself and can propagate a fully working version of itself to other machines. ）。在Linux平台下，蠕虫病毒极为猖獗，像利用系统漏洞进行传播的ramen，lion，Slapper……这些臭名远播的家伙每一个都感染了大量的 Linux系统，造成了巨大的损失。它们就是开放原代码世界的nimda，红色代码。在未来，这种蠕虫病毒仍然会愈演愈烈，Linux系统应用越广泛，蠕虫的传播程度和破坏能力也会随之增加。<br />
　　<br />
　　脚本病毒：目前出现比较多的是使用shell脚本语言编写的病毒。此类病毒编写较为简单，但是破坏力同样惊人。我们知道，Linux系统中有许多的以.sh结尾的脚本文件，而一个短短十数行的shell脚本就可以在短时间内遍历整个硬盘中的所有脚本文件，进行感染。因此病毒制造者不需要具有很高深的知识，就可以轻易编写出这样的病毒，对系统进行破坏，其破坏性可以是删除文件，破坏系统正常运行，甚至下载一个木马到系统中等等。<br />
　　<br />
　　后门程序：在广义的病毒定义概念中，后门也已经纳入了病毒的范畴。活跃在Windows系统中的后门这一入侵者的利器在Linux平台下同样极为活跃。从增加系统超级用户账号的简单后门，到利用系统服务加载，共享库文件注射，rootkit工具包，甚至可装载内核模块（LKM），Linux平台下的后门技术发展非常成熟，隐蔽性强，难以清除。是Linux系统管理员极为头疼的问题。<br />
　　<br />
　　病毒、蠕虫和木马基本上意味着自动化的黑客行为，也许被病毒攻击比被黑客攻击更可能发生。直接的黑客攻击目标一般是服务器，而病毒是等机会的麻烦制造者。如果你的网络包含了Linux系统，特别危险的是服务器，不要在作出反应之前等待寻找Linux病毒、蠕虫和木马是否存在。做一些调查然后选择一个适合你系统的防毒产品，它们能帮你防止病毒的传播。至于Linux平台病毒在未来的发展，一切皆有可能。Windows下的病毒发展史，也有可能在 Linux上重演，这取决于Linux的发展。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/208.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下的高级隐藏技术</title>
		<link>http://www.linuxsense.org/archives/210.html</link>
		<comments>http://www.linuxsense.org/archives/210.html#comments</comments>
		<pubDate>Sun, 20 Jul 2008 07:33:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux安全]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=210</guid>
		<description><![CDATA[本文涉及linux系统安全方面的知识, 主讲Linux环境下的高级隐藏技术
隐藏技术在计算机系统安全中应用十分广泛，尤其是在网络攻击中，当攻击者成功侵入一个系统后，有效隐藏攻击者的文件、进程及其加载的模块变得尤为重要。本文将讨论Linux系统中文件、进程及模块的高级隐藏技术，这些技术有的已经被广泛应用到各种后门或安全检测程序之中，而有一些则刚刚起步，仍然处在讨论阶段，应用很少。
1、隐藏技术
1.1.Linux下的中断控制及系统调用
Intelx86系列微机支持256种中断，为了使处理器比较容易地识别每种中断源，把它们从0~256编号，即赋予一个中断类型码n,Intel把它称作中断向量。
Linux用一个中断向量（128或者0&#215;80）来实现系统调用，所有的系统调用都通过唯一的入口system_call来进入内核，当用户动态进程执行一条int0&#215;80汇编指令时，CPU就切换到内核态，并开始执行system_call函数，system_call函数再通过系统调用表 sys_call_table来取得相应系统调用的地址进行执行。系统调用表sys_call_table中存放所有系统调用函数的地址，每个地址可以用系统调用号来进行索引，例如sys_call_table[NR_fork]索引到的就是系统调用sys_fork（）的地址。
Linux用中断描述符（8字节）来表示每个中断的相关信息，其格式如下：
偏移量31….16一些标志、类型码及保留位
段选择符偏移量15….0
所有的中断描述符存放在一片连续的地址空间中，这个连续的地址空间称作中断描述符表（IDT），其起始地址存放在中断描述符表寄存器（IDTR）中，其格式如下：
32位基址值界限
其中各个结构的相应联系可以如下表示：
通过上面的说明可以得出通过IDTR寄存器来找到system_call函数地址的方法：根据IDTR寄存器找到中断描述符表，中断描述符表的第0&#215;80项即是system_call函数的地址，这个地址将在后面的讨论中应用到。
1.2.Linux的LKM（可装载内核模块）技术
为了使内核保持较小的体积并能够方便的进行功能扩展，Linux系统提供了模块机制。模块是内核的一部分，但并没有被编译进内核，它们被编译成目标文件，在运行过程中根据需要动态的插入内核或者从内核中移除。由于模块在插入后是作为Linux内核的一部分来运行的，所以模块编程实际上就是内核编程，因此可以在模块中使用一些由内核导出的资源，例如Linux2.4.18版以前的内核导出系统调用表（sys_call_table）的地址，这样就可以根据该地址直接修改系统调用的入口，从而改变系统调用。在模块编程中必须存在初始化函数及清除函数，一般情况下，这两个函数默认为init_module ()以及clearup_module()，从2.3.13内核版本开始，用户也可以给这两个函数重新命名，初始化函数在模块被插入系统时调用，在其中可以进行一些函数及符号的注册工作，清除函数则在模块移除系统时进行调用，一些恢复工作通常在该函数中完成。
1.3.Linux下的内存映像
/dev/kmem是一个字符设备，是计算机主存的映像，通过它可以测试甚至修改系统，当内核不导出sys_call_table地址或者不允许插入模块时可以通过该映像修改系统调用，从而实现隐藏文件、进程或者模块的目的。
1.4.proc文件系统
proc文件系统是一个虚拟的文件系统，它通过文件系统的接口实现，用于输出系统运行状态。它以文件系统的形式，为操作系统本身和应用进程之间的通信提供了一个界面，使应用程序能够安全、方便地获得系统当前的运行状况何内核的内部数据信息，并可以修改某些系统的配置信息。由于proc以文件系统的接口实现，因此可以象访问普通文件一样访问它，但它只存在于内存之中。
2、技术分析
2.1隐藏文件
Linux系统中用来查询文件信息的系统调用是sys_getdents，这一点可以通过strace来观察到，例如stracels将列出命令 ls用到的系统调用，从中可以发现ls是通过sys_getedents来执行操作的。当查询文件或者目录的相关信息时，Linux系统用 sys_getedents来执行相应的查询操作，并把得到的信息传递给用户空间运行的程序，所以如果修改该系统调用，去掉结果中与某些特定文件的相关信息，那么所有利用该系统调用的程序将看不见该文件，从而达到了隐藏的目的。首先介绍一下原来的系统调用，其原型为：
intsys_getdents(unsignedintfd,structdirent*dirp,unsignedintcount)
其中fd为指向目录文件的文件描述符，该函数根据fd所指向的目录文件读取相应dirent结构，并放入dirp中，其中count为dirp中返回的数据量，正确时该函数返回值为填充到dirp的字节数。
hacked_getdents函数实际上就是先调用原来的系统调用，然后从得到的dirent结构中去除与特定文件名相关的文件信息，从而应用程序从该系统调用返回后将看不到该文件的存在。
应该注意的是，一些较新的版本中是通过sys_getdents64来查询文件信息的，但其实现原理与sys_getdents基本相同，所以在这些版本中仍然可以用与上面类似的方法来修改该系统调用，隐藏文件。 
]]></description>
			<content:encoded><![CDATA[<p><P>本文涉及linux系统安全方面的知识, 主讲Linux环境下的高级隐藏技术</P><br />
<P>隐藏技术在计算机系统安全中应用十分广泛，尤其是在网络攻击中，当攻击者成功侵入一个系统后，有效隐藏攻击者的文件、进程及其加载的模块变得尤为重要。本文将讨论Linux系统中文件、进程及模块的高级隐藏技术，这些技术有的已经被广泛应用到各种后门或安全检测程序之中，而有一些则刚刚起步，仍然处在讨论阶段，应用很少。</P><br />
<P>1、隐藏技术</P><br />
<P>1.1.Linux下的中断控制及系统调用</P><br />
<P>Intelx86系列微机支持256种中断，为了使处理器比较容易地识别每种中断源，把它们从0~256编号，即赋予一个中断类型码n,Intel把它称作中断向量。</P><br />
<P>Linux用一个中断向量（128或者0&#215;80）来实现系统调用，所有的系统调用都通过唯一的入口system_call来进入内核，当用户动态进程执行一条int0&#215;80汇编指令时，CPU就切换到内核态，并开始执行system_call函数，system_call函数再通过系统调用表 sys_call_table来取得相应系统调用的地址进行执行。系统调用表sys_call_table中存放所有系统调用函数的地址，每个地址可以用系统调用号来进行索引，例如sys_call_table[NR_fork]索引到的就是系统调用sys_fork（）的地址。</P><br />
<P>Linux用中断描述符（8字节）来表示每个中断的相关信息，其格式如下：</P><br />
<P>偏移量31….16一些标志、类型码及保留位</P><br />
<P>段选择符偏移量15….0</P><br />
<P>所有的中断描述符存放在一片连续的地址空间中，这个连续的地址空间称作中断描述符表（IDT），其起始地址存放在中断描述符表寄存器（IDTR）中，其格式如下：</P><br />
<P>32位基址值界限</P><br />
<P>其中各个结构的相应联系可以如下表示：</P><br />
<P>通过上面的说明可以得出通过IDTR寄存器来找到system_call函数地址的方法：根据IDTR寄存器找到中断描述符表，中断描述符表的第0&#215;80项即是system_call函数的地址，这个地址将在后面的讨论中应用到。</P><br />
<P>1.2.Linux的LKM（可装载内核模块）技术</P><br />
<P>为了使内核保持较小的体积并能够方便的进行功能扩展，Linux系统提供了模块机制。模块是内核的一部分，但并没有被编译进内核，它们被编译成目标文件，在运行过程中根据需要动态的插入内核或者从内核中移除。由于模块在插入后是作为Linux内核的一部分来运行的，所以模块编程实际上就是内核编程，因此可以在模块中使用一些由内核导出的资源，例如Linux2.4.18版以前的内核导出系统调用表（sys_call_table）的地址，这样就可以根据该地址直接修改系统调用的入口，从而改变系统调用。在模块编程中必须存在初始化函数及清除函数，一般情况下，这两个函数默认为init_module ()以及clearup_module()，从2.3.13内核版本开始，用户也可以给这两个函数重新命名，初始化函数在模块被插入系统时调用，在其中可以进行一些函数及符号的注册工作，清除函数则在模块移除系统时进行调用，一些恢复工作通常在该函数中完成。</P><br />
<P>1.3.Linux下的内存映像</P><br />
<P>/dev/kmem是一个字符设备，是计算机主存的映像，通过它可以测试甚至修改系统，当内核不导出sys_call_table地址或者不允许插入模块时可以通过该映像修改系统调用，从而实现隐藏文件、进程或者模块的目的。</P><br />
<P>1.4.proc文件系统</P><br />
<P>proc文件系统是一个虚拟的文件系统，它通过文件系统的接口实现，用于输出系统运行状态。它以文件系统的形式，为操作系统本身和应用进程之间的通信提供了一个界面，使应用程序能够安全、方便地获得系统当前的运行状况何内核的内部数据信息，并可以修改某些系统的配置信息。由于proc以文件系统的接口实现，因此可以象访问普通文件一样访问它，但它只存在于内存之中。</P><br />
<P>2、技术分析</P><br />
<P>2.1隐藏文件</P><br />
<P>Linux系统中用来查询文件信息的系统调用是sys_getdents，这一点可以通过strace来观察到，例如stracels将列出命令 ls用到的系统调用，从中可以发现ls是通过sys_getedents来执行操作的。当查询文件或者目录的相关信息时，Linux系统用 sys_getedents来执行相应的查询操作，并把得到的信息传递给用户空间运行的程序，所以如果修改该系统调用，去掉结果中与某些特定文件的相关信息，那么所有利用该系统调用的程序将看不见该文件，从而达到了隐藏的目的。首先介绍一下原来的系统调用，其原型为：</P><br />
<P>intsys_getdents(unsignedintfd,structdirent*dirp,unsignedintcount)</P><br />
<P>其中fd为指向目录文件的文件描述符，该函数根据fd所指向的目录文件读取相应dirent结构，并放入dirp中，其中count为dirp中返回的数据量，正确时该函数返回值为填充到dirp的字节数。</P><br />
<P>hacked_getdents函数实际上就是先调用原来的系统调用，然后从得到的dirent结构中去除与特定文件名相关的文件信息，从而应用程序从该系统调用返回后将看不到该文件的存在。</P><br />
<P>应该注意的是，一些较新的版本中是通过sys_getdents64来查询文件信息的，但其实现原理与sys_getdents基本相同，所以在这些版本中仍然可以用与上面类似的方法来修改该系统调用，隐藏文件。 </P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/210.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>伪装linux为windows特性</title>
		<link>http://www.linuxsense.org/archives/82.html</link>
		<comments>http://www.linuxsense.org/archives/82.html#comments</comments>
		<pubDate>Sun, 11 Nov 2007 02:06:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux安全]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=82</guid>
		<description><![CDATA[是的，linux已经很安全了，linux伪装的必要性这里就不讨论了，就是为了“没有绝对的安全”。可以伪装linux为windows的系统特性，叫外界的基本判断认为系统就是windows，至少是可以增加一些系统安全性的，呵呵。&#160;网络上的计算机很容易被黑客利用工具或其它手段进行扫描，以寻找系统中的漏洞，然后再针对漏洞进行攻击。 
通过伪装Linux系统，给黑客设置系统假象，可以加大黑客对系统的分析难度，引诱他们步入歧途，从而进一步提高计算机系统的安全性。下面以Red Hat Linux为例，针对几种黑客常用的途径介绍一些常用的Linux系统伪装的方法。 
针对HTTP服务 
通过分析Web服务器的类型，大致可以推测出操作系统的类型，比如，Windows使用IIS来提供HTTP服务，而Linux中最常见的是Apache。 
默认的Apache配置里没有任何信息保护机制，并且允许目录浏览。通过目录浏览，通常可以获得类似“Apache/1.3.27 Server at apache.linuxforum.net Port 80”或“Apache/2.0.49 (Unix) PHP/4.3.8”的信息。 
通过修改配置文件中的ServerTokens参数，可以将Apache的相关信息隐藏起来。但是，Red Hat Linux运行的Apache是编译好的程序，提示信息被编译在程序里，要隐藏这些信息需要修改Apache的源代码，然后，重新编译安装程序，以实现替换里面的提示内容。 
以Apache 2.0.50为例，编辑ap_release.h文件，修改“#define AP_SERVER_BASEPRODUCT \&#8221;Apache\&#8221;”为“#define AP_SERVER_BASEPRODUCT \&#8221;Microsoft-IIS/5.0\&#8221;”。编辑os/unix/os.h文件，修改“#define PLATFORM \&#8221;Unix\&#8221;”为“#define PLATFORM \&#8221;Win32\&#8221;”。修改完毕后，重新编译、安装Apache。 
Apache安装完成后，修改httpd.conf配置文件，将“ServerTokens Full”改为“ServerTokens Prod”；将“ServerSignature On”改为“ServerSignature Off”，然后存盘退出。重新启动Apache后，用工具进行扫描，发现提示信息中已经显示操作系统为Windows。 
针对FTP服务 
通过FTP服务，也可以推测操作系统的类型，比如，Windows下的FTP服务多是Serv-U，而Linux下常用vsftpd、proftpd和pureftpd等软件。 
以proftpd为例，修改配置文件proftpd.conf，添加如下内容： 
　　　　ServerIdent on \&#8221;Serv-U FTP Server v5.0 for WinSock ready&#8230;\&#8221;&#160;
　　 存盘退出后，重新启动proftpd服务，登录到修改了提示信息的FTP服务器进行测试： 
　 
　　　C:\\&#62;ftp 192.168.0.1　　Connected to 192.168.0.1.　　220 Serv-U FTP Server v5.0 for [...]]]></description>
			<content:encoded><![CDATA[<p><P>是的，linux已经很安全了，linux伪装的必要性这里就不讨论了，就是为了“没有绝对的安全”。可以伪装linux为windows的系统特性，叫外界的基本判断认为系统就是windows，至少是可以增加一些系统安全性的，呵呵。<BR>&nbsp;<BR>网络上的计算机很容易被黑客利用工具或其它手段进行扫描，以寻找系统中的漏洞，然后再针对漏洞进行攻击。 </P><br />
<P>通过伪装Linux系统，给黑客设置系统假象，可以加大黑客对系统的分析难度，引诱他们步入歧途，从而进一步提高计算机系统的安全性。下面以Red Hat Linux为例，针对几种黑客常用的途径介绍一些常用的Linux系统伪装的方法。 </P><br />
<P>针对HTTP服务 </P><br />
<P>通过分析Web服务器的类型，大致可以推测出操作系统的类型，比如，Windows使用IIS来提供HTTP服务，而Linux中最常见的是Apache。 </P><br />
<P>默认的Apache配置里没有任何信息保护机制，并且允许目录浏览。通过目录浏览，通常可以获得类似“Apache/1.3.27 Server at apache.linuxforum.net Port 80”或“Apache/2.0.49 (Unix) PHP/4.3.8”的信息。 </P><br />
<P>通过修改配置文件中的ServerTokens参数，可以将Apache的相关信息隐藏起来。但是，Red Hat Linux运行的Apache是编译好的程序，提示信息被编译在程序里，要隐藏这些信息需要修改Apache的源代码，然后，重新编译安装程序，以实现替换里面的提示内容。 </P><br />
<P>以Apache 2.0.50为例，编辑ap_release.h文件，修改“#define AP_SERVER_BASEPRODUCT \&#8221;Apache\&#8221;”为“#define AP_SERVER_BASEPRODUCT \&#8221;Microsoft-IIS/5.0\&#8221;”。编辑os/unix/os.h文件，修改“#define PLATFORM \&#8221;Unix\&#8221;”为“#define PLATFORM \&#8221;Win32\&#8221;”。修改完毕后，重新编译、安装Apache。 </P><br />
<P>Apache安装完成后，修改httpd.conf配置文件，将“ServerTokens Full”改为“ServerTokens Prod”；将“ServerSignature On”改为“ServerSignature Off”，然后存盘退出。重新启动Apache后，用工具进行扫描，发现提示信息中已经显示操作系统为Windows。 </P><br />
<P>针对FTP服务 </P><br />
<P>通过FTP服务，也可以推测操作系统的类型，比如，Windows下的FTP服务多是Serv-U，而Linux下常用vsftpd、proftpd和pureftpd等软件。 </P><br />
<P>以proftpd为例，修改配置文件proftpd.conf，添加如下内容： </P><br />
<P><BR>　　<BR>　　ServerIdent on \&#8221;Serv-U FTP Server v5.0 for WinSock ready&#8230;\&#8221;<BR>&nbsp;</P><br />
<P>　　 <BR>存盘退出后，重新启动proftpd服务，登录到修改了提示信息的FTP服务器进行测试： </P><br />
<P>　 </P><br />
<P>　<BR>　　C:\\&gt;ftp 192.168.0.1<BR>　　Connected to 192.168.0.1.<BR>　　220 Serv-U FTP Server v5.0 for WinSock ready&#8230;<BR>　　User (192.168.0.1:(none)):<BR>　　331 Password required for (none).<BR>　　Password:<BR>　　530 Login incorrect.<BR>　　Login failed.<BR>　　ftp &gt; quit<BR>　　221 Goodbye.<BR>&nbsp;</P><br />
<P>　　 <BR>这样从表面上看，服务器就是一个运行着Serv-U的Windows了。 </P><br />
<P>针对TTL返回值 </P><br />
<P>可以用ping命令去探测一个主机，根据TTL基数可以推测操作系统的类型。对于一个没有经过任何网关和路由的网络，直接ping对方系统得到的TTL值，被叫做“TTL基数”。网络中，数据包每经过一个路由器，TTL就会减1，当TTL为0时，这个数据包就会被丢弃。 </P><br />
<P>通常情况下，Windows的TTL的基数是128，而早期的Red Hat Linux和Solaris的TTL基数是255，FreeBSD和新版本的Red Hat Linux的TTL基数是64。比如，ping一个Red Hat系统，显示如下： </P><br />
<P><BR>　　<BR>　　Pinging 192.168.0.1 with 32 bytes of data:<BR>　　Reply from 192.168.0.1: bytes=32 time &lt;10ms TTL=64<BR>　　Reply from 192.168.0.1: bytes=32 time &lt;10ms TTL=64<BR>　　Reply from 192.168.0.1: bytes=32 time &lt;10ms TTL=64<BR>　　Reply from 192.168.0.1: bytes=32 time &lt;10ms TTL=64<BR>　　Ping statistics for 192.168.0.1:<BR>　　Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),<BR>　　Approximate round trip times in milli-seconds:<BR>　　Minimum = 0ms, Maximum = 0ms, Average = 0ms<BR>&nbsp;</P><br />
<P>　　 <BR>用以下命令修改Red Hat Linux的TTL基数为128（本来为64）： </P><br />
<P>　 </P><br />
<P>　<BR>　　# echo 128 &gt; /proc/sys/net/ipv4/ip_default_ttl<BR>　<BR>&nbsp;</P><br />
<P>　 <BR>若想使设置永久生效，可以修改/etc/sysctl.conf配置文件，添加如下一行： </P><br />
<P>　 </P><br />
<P>　<BR>　　net.ipv4.ip_default_ttl = 128<BR>&nbsp;</P><br />
<P>　　 <BR>保存退出后，再ping 192.168.0.1，TTL基数就变为128了。 </P><br />
<P>针对3389端口和22端口 </P><br />
<P>有时通过扫描3389端口和22端口，也可以推测操作系统的类型。Windows下一般利用TCP协议的3389端口进行远程控制，而Linux可能会用TCP协议的22端口，提供带有加密传输的SSH服务。 </P><br />
<P>为了安全，可以利用iptables来限制22端口的SSH登录，让非授权的IP扫描不到TCP 22端口的存在： </P><br />
<P>　 </P><br />
<P>　<BR>　　#iptables -I INPUT -s ! xx.xx.xx.xx -p tcp &#8211;dport 22 -j DROP<BR>&nbsp;</P><br />
<P>　　 <BR>利用iptables，将本机的TCP 3389端口转移到其它开有3389端口的计算机上，给Linux系统伪装出一个提供服务的TCP 3389端口。命令如下： </P><br />
<P>　 </P><br />
<P>　<BR>　　#echo 1 &gt; /proc/sys/net/ipv4/ip_forward<BR>　　#iptables -t nat -I PREROUTING -p tcp &#8211;dport 3389 -j DNAT &#8211;to xx.xx.xx.xx<BR>　　#iptables -t nat -I POSTROUTING -p tcp &#8211;dport 3389 -j MASQUERADE<BR>&nbsp;</P><br />
<P>　　 <BR>第一条命令表示允许数据包转发；第二条命令表示转发TCP 3389到xx.xx.xx.xx；第三条命令表示使转发数据包实现“双向通路”，给数据包设置一个正确的返回通道。若想使转发永久生效，可以把以上命令添加到/etc/rc.local文件中。 </P><br />
<P>这样，当黑客扫描服务器所开端口的时候，就找不到22号端口，而是看到一个伪装的3389端口，从而不能正确判断出操作系统的类型。 </P><br />
<P>针对netcraft </P><br />
<P>netcraft是一个很厉害的扫描引擎，它通过简单的TCP 80，就可以知道所测服务器的操作系统、Web服务程序和服务器开机时间（Uptime）等信息。 </P><br />
<P>上面介绍的几种方法对netcraft来说，均不奏效。针对netcraft，可利用iptables进行系统伪装，使netcraft错误判断操作系统： </P><br />
<P>　 </P><br />
<P>　<BR>　　#iptables -t nat -I PREROUTING -s 195.92.95.0/24 <BR>&nbsp;&nbsp;&nbsp; -p tcp &#8211;dport 80 -j DNAT &#8211;to xx.xx.xx.xx<BR>　　#iptables -t nat -I POSTROUTING -s 195.92.95.0/24 <BR>&nbsp;&nbsp;&nbsp; -p tcp &#8211;dport 80 -j MASQUERADE<BR>&nbsp;</P><br />
<P>　　 <BR>由于通过抓包发现，netcraft的服务器不止一台，所以需要对它所在网段进行转发欺骗处理。 </P><br />
<P>小结 </P><br />
<P>以上方法只能从某种角度上防止和阻挠黑客对系统漏洞的分析，在一定程度上可减少计算机被攻击的可能性，但仍然是“防君子，不防小人”，仅是给大家提供一个活学活用的新思路。&nbsp;</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/82.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux的日志安全</title>
		<link>http://www.linuxsense.org/archives/73.html</link>
		<comments>http://www.linuxsense.org/archives/73.html#comments</comments>
		<pubDate>Mon, 05 Nov 2007 04:03:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux安全]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=73</guid>
		<description><![CDATA[linux的安全的多方面的，您可以通过本文了解linux的日志记录情况,，以便于认识更为深层次的linux安全。
登陆、连接时间日志&#8211;由多个程序执行，把纪录写入到/var/log/wtmp和/var/run/utmp，login等程序更新wtmp和utmp文件，使系统管理员能够跟踪谁在何时登录到系统。
进程统计&#8211;由系统内核执行。当一个进程终止时，为每个进程往进程统计文件（pacct或acct）中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。
错误日志&#8211;由syslogd（8）执行。各种系统守护进程、用户程序和内核通过syslog（3）向文件/var/log/messages报告值得注意的事件。
&#160;
常用的日志文件如下：
　　access-log　　　　　　　纪录HTTP/web的传输
　　acct/pacct　　　　　　　纪录用户命令
　　aculog　　　　　　　　　　纪录MODEM的活动
　　btmp　　　　　　　　　　纪录失败的纪录
　　lastlog　　　　　　　　　纪录最近几次成功登录的事件和最后一次不成功的登录
　　messages　　　　　　　从syslog中记录信息（有的链接到syslog文件）
　　sudolog　　　　　　　　纪录使用sudo发出的命令
　　sulog　　　　　　　　　 纪录使用su命令的使用
　　syslog　　　　　　　　 从syslog中记录信息（通常链接到messages文件）
　　utmp　　　　　　　　　纪录当前登录的每个用户
　　wtmp　　　　　　　　 一个用户每次登录进入和退出时间的永久纪录
　　xferlog　　　　　　　 纪录FTP会话
　　utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键&#8211;保持用户登录进入和退出的纪录。有关当前登录用户的信息记录在文 件utmp中；登录进入和退出纪录在文件wtmp中；最后一次登录文件可以用lastlog命令察看。数据交换、关机和重起也记录在wtmp文件中。所有 的纪录都包含时间戳。这些文件（lastlog通常不大）在具有大量用户的系统中增长十分迅速。例如wtmp文件可以无限增长，除非定期截取。许多系统以 一天或者一周为单位把wtmp配置成循环使用。它通常由cron运行的脚本来修改。这些脚本重新命名并循环使用wtmp文件。通常，wtmp在第一天结束 后命名为wtmp.1；第二天后wtmp.1变为wtmp.2等等，直到wtmp.7。
　　每次有一个用户登录时，login程序在文件lastlog中察看用户的UID。如果找到了，则把用户上次登录、退出时间和主机名写到标准输出中，然 后login程序在lastlog中纪录新的登录时间。在新的lastlog纪录写入后，utmp文件打开并插入用户的utmp纪录。该纪录一直用到用户 登录退出时删除。utmp文件被各种命令文件使用，包括who、w、users和finger。
　　下一步，login程序打开文件wtmp附加用户的utmp纪录。当用户登录退出时，具有更新时间戳的同一utmp纪录附加到文件中。wtmp文件被程序last和ac使用。
具体命令　　&#160;&#160;&#160; wtmp和utmp文件都是二进制文件，他们不能被诸如tail命令剪贴或合并（使用cat命令）。用户需要使用who、w、users、last和ac来使用这两个文件包含的信息。
　　who：who命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机。例如：who（回车）显示
　　chyang　　　　 pts/0 Aug　　　　 18 15:06
　　ynguo　　　　 pts/2 Aug　　　　 18 15:32
　　ynguo　　　　 pts/3 Aug　　　　 18 13:55
　　lewis　　　　 pts/4 Aug　　　　 18 13:35
　　ynguo　　　　 pts/7 Aug　　　　 18 14:12
　　ylou　　　　 pts/8 Aug　　　　 18 14:15
　　如果指明了wtmp文件名，则who命令查询所有以前的纪录。命令who /var/log/wtmp将报告自从wtmp文件创建或删改以来的每一次登录。
　　w：w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息。例如：w（回车）显示：3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27。
　　USER　　 TTY　　　　FROM　　　　 LOGIN@ IDLE JCPU PCPU　　WHAT
　　chyang pts/0 202.38.68.242　　3:06pm [...]]]></description>
			<content:encoded><![CDATA[<p><P>linux的安全的多方面的，您可以通过本文了解linux的日志记录情况,，以便于认识更为深层次的linux安全。</P><br />
<P>登陆、连接时间日志&#8211;由多个程序执行，把纪录写入到/var/log/wtmp和/var/run/utmp，login等程序更新wtmp和utmp文件，使系统管理员能够跟踪谁在何时登录到系统。</P><br />
<P>进程统计&#8211;由系统内核执行。当一个进程终止时，为每个进程往进程统计文件（pacct或acct）中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。</P><br />
<P>错误日志&#8211;由syslogd（8）执行。各种系统守护进程、用户程序和内核通过syslog（3）向文件/var/log/messages报告值得注意的事件。</P><br />
<P>&nbsp;</P><br />
<P>常用的日志文件如下：</P><br />
<P>　　access-log　　　　　　　纪录HTTP/web的传输</P><br />
<P>　　acct/pacct　　　　　　　纪录用户命令</P><br />
<P>　　aculog　　　　　　　　　　纪录MODEM的活动</P><br />
<P>　　btmp　　　　　　　　　　纪录失败的纪录</P><br />
<P>　　lastlog　　　　　　　　　纪录最近几次成功登录的事件和最后一次不成功的登录</P><br />
<P>　　messages　　　　　　　从syslog中记录信息（有的链接到syslog文件）</P><br />
<P>　　sudolog　　　　　　　　纪录使用sudo发出的命令</P><br />
<P>　　sulog　　　　　　　　　 纪录使用su命令的使用</P><br />
<P>　　syslog　　　　　　　　 从syslog中记录信息（通常链接到messages文件）</P><br />
<P>　　utmp　　　　　　　　　纪录当前登录的每个用户</P><br />
<P>　　wtmp　　　　　　　　 一个用户每次登录进入和退出时间的永久纪录</P><br />
<P>　　xferlog　　　　　　　 纪录FTP会话</P><br />
<P><BR>　　utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键&#8211;保持用户登录进入和退出的纪录。有关当前登录用户的信息记录在文 件utmp中；登录进入和退出纪录在文件wtmp中；最后一次登录文件可以用lastlog命令察看。数据交换、关机和重起也记录在wtmp文件中。所有 的纪录都包含时间戳。这些文件（lastlog通常不大）在具有大量用户的系统中增长十分迅速。例如wtmp文件可以无限增长，除非定期截取。许多系统以 一天或者一周为单位把wtmp配置成循环使用。它通常由cron运行的脚本来修改。这些脚本重新命名并循环使用wtmp文件。通常，wtmp在第一天结束 后命名为wtmp.1；第二天后wtmp.1变为wtmp.2等等，直到wtmp.7。</P><br />
<P>　　每次有一个用户登录时，login程序在文件lastlog中察看用户的UID。如果找到了，则把用户上次登录、退出时间和主机名写到标准输出中，然 后login程序在lastlog中纪录新的登录时间。在新的lastlog纪录写入后，utmp文件打开并插入用户的utmp纪录。该纪录一直用到用户 登录退出时删除。utmp文件被各种命令文件使用，包括who、w、users和finger。</P><br />
<P>　　下一步，login程序打开文件wtmp附加用户的utmp纪录。当用户登录退出时，具有更新时间戳的同一utmp纪录附加到文件中。wtmp文件被程序last和ac使用。</P><br />
<P><BR>具体命令<BR>　　<BR>&nbsp;&nbsp;&nbsp; wtmp和utmp文件都是二进制文件，他们不能被诸如tail命令剪贴或合并（使用cat命令）。用户需要使用who、w、users、last和ac来使用这两个文件包含的信息。</P><br />
<P>　　who：who命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机。例如：who（回车）显示</P><br />
<P>　　chyang　　　　 pts/0 Aug　　　　 18 15:06</P><br />
<P>　　ynguo　　　　 pts/2 Aug　　　　 18 15:32</P><br />
<P>　　ynguo　　　　 pts/3 Aug　　　　 18 13:55</P><br />
<P>　　lewis　　　　 pts/4 Aug　　　　 18 13:35</P><br />
<P>　　ynguo　　　　 pts/7 Aug　　　　 18 14:12</P><br />
<P>　　ylou　　　　 pts/8 Aug　　　　 18 14:15</P><br />
<P>　　如果指明了wtmp文件名，则who命令查询所有以前的纪录。命令who /var/log/wtmp将报告自从wtmp文件创建或删改以来的每一次登录。</P><br />
<P>　　w：w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息。例如：w（回车）显示：3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27。</P><br />
<P>　　USER　　 TTY　　　　FROM　　　　 LOGIN@ IDLE JCPU PCPU　　WHAT</P><br />
<P>　　chyang pts/0 202.38.68.242　　3:06pm 2:04 0.08s 0.04s -bash</P><br />
<P>　　ynguo pts/2 202.38.79.47　　 3:32pm 0.00s 0.14s 0.05　　 w</P><br />
<P>　　lewis pts/3 202.38.64.233　　1:55pm 30:39 0.27s 0.22s -bash</P><br />
<P>　　lewis pts/4 202.38.64.233　　1:35pm 6.00s 4.03s 0.01s sh /home/users/</P><br />
<P>　　ynguo pts/7 simba.nic.ustc.e 2:12pm 0.00s 0.47s 0.24s telnet mail</P><br />
<P>　　ylou　　pts/8 202.38.64.235　　2:15pm 1:09m 0.10s 0.04s　　-bash</P><br />
<P>　　users：users用单独的一行打印出当前登录的用户，每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话，那他的用户名将显示相同的次数。例如：users（回车）显示：chyang lewis lewis ylou ynguo ynguo</P><br />
<P>　　last：last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户。例如：</P><br />
<P>　　chyang pts/9　　202.38.68.242 Tue Aug 1 08:34 &#8211; 11:23 (02:49)</P><br />
<P>　　cfan　　pts/6　　202.38.64.224 Tue Aug 1 08:33 &#8211; 08:48 (00:14)</P><br />
<P>　　chyang pts/4　　202.38.68.242 Tue Aug 1 08:32 &#8211; 12:13 (03:40)</P><br />
<P>　　lewis pts/3　　202.38.64.233 Tue Aug 1 08:06 &#8211; 11:09 (03:03)</P><br />
<P>　　lewis pts/2　　202.38.64.233 Tue Aug 1 07:56 &#8211; 11:09 (03:12)</P><br />
<P>　　如果指明了用户，那么last只报告该用户的近期活动，例如：last ynguo（回车）显示：</P><br />
<P>　　ynguo　　pts/4 simba.nic.ustc.e Fri Aug 4 16:50 &#8211; 08:20 (15:30)</P><br />
<P>　　ynguo　　pts/4 simba.nic.ustc.e Thu Aug 3 23:55 &#8211; 04:40 (04:44)</P><br />
<P>　　ynguo　　pts/11 simba.nic.ustc.e Thu Aug 3 20:45 &#8211; 22:02 (01:16)</P><br />
<P>　　ynguo　　pts/0 simba.nic.ustc.e Thu Aug 3 03:17 &#8211; 05:42 (02:25)</P><br />
<P>　　ynguo　　pts/0 simba.nic.ustc.e Wed Aug 2 01:04 &#8211; 03:16 1+02:12)</P><br />
<P>　　ynguo　　pts/0 simba.nic.ustc.e Wed Aug 2 00:43 &#8211; 00:54 (00:11)</P><br />
<P>　　ynguo　　pts/9 simba.nic.ustc.e Thu Aug 1 20:30 &#8211; 21:26 (00:55)</P><br />
<P>　　ac：ac命令根据当前的/var/log/wtmp文件中的登录进入和退出来报告用户连结的时间（小时），如果不使用标志，则报告总的时间。例如：ac（回车）显示：total 5177.47</P><br />
<P>　　ac -d（回车）显示每天的总的连结时间</P><br />
<P>　　Aug 12 total 261.87</P><br />
<P>　　Aug 13 total 351.39</P><br />
<P>　　Aug 14 total 396.09</P><br />
<P>　　Aug 15 total 462.63</P><br />
<P>　　Aug 16 total 270.45</P><br />
<P>　　Aug 17 total 104.29</P><br />
<P>　　Today total 179.02</P><br />
<P>　　ac -p （回车）显示每个用户的总的连接时间</P><br />
<P>　　ynguo 193.23</P><br />
<P>　　yucao 3.35</P><br />
<P>　　rong 133.40</P><br />
<P>　　hdai 10.52</P><br />
<P>　　zjzhu 52.87</P><br />
<P>　　zqzhou 13.14</P><br />
<P>　　liangliu 24.34</P><br />
<P>　　total 5178.24</P><br />
<P>　　lastlog：lastlog文件在每次有用户登录时被查询。可以使用lastlog命令来检查某特定用户上次登录的时 间，并格式化输出上次登录日志/var/log/lastlog的内容。它根据UID排序显示登录名、端口号（tty）和上次登录时间。如果一个用户从未 登录过，lastlog显示&#8221;**Never logged**。注意需要以root运行该命令，例如：</P><br />
<P>　　rong　　　　　　5　　 202.38.64.187　　　　　　　　 Fri Aug 18 15:57:01 +0800 2000</P><br />
<P>　　dbb　　　　　　　　　　　　　　　　　　　　　　　　　　 **Never logged in**</P><br />
<P>　　xinchen　　　　　　　　　　　　　　　　　　　　　　　　 **Never logged in**</P><br />
<P>　　pb9511　　　　　　　　　　　　　　　　　　　　　　　　 **Never logged in**</P><br />
<P>　　xchen　　　　 0　　 202.38.64.190　　　　　　　　 Sun Aug 13 10:01:22 +0800 2000</P><br />
<P>　　另外，可一加一些参数，例如，last -u 102将报告UID为102的用户；last -t 7表示限制上一周的报告。</P><br />
<P><BR>进程统计<BR>　　UNIX可以跟踪每个用户运行的每条命令，如果想知道昨晚弄乱了哪些重要的文件，进程统计子系统可以告诉你。它对还跟踪一个侵入者有帮助。与连接时间日志不同，进程统计子系统缺省不激活，它必须启动。在linux系统中启动进程统计使用accton命令，必须用root身份来运行。Accton命令的形式accton file，file 必须先存在。先使用touch命令来创建pacct文件：touch /var/log/pacct，然后运行accton： accton /var/log/pacct。一旦accton被激活，就可以使用lastcomm命令监测系统中任何时候执行的命令。若要关闭统计，可以使用不带任何参数的accton命令。</P><br />
<P>　　lastcomm命令报告以前执行的文件。不带参数时，lastcomm命令显示当前统计文件生命周期内纪录的所有命令的有关信息。包括命令名、用户、tty、命令花费的CPU时间和一个时间戳。如果系统有许多用户，输入则可能很长。下面的例子：</P><br />
<P>　　crond　　　　 F　　 root　　 ??　　 0.00 secs Sun Aug 20 00:16</P><br />
<P>　　promisc_check.s S　　 root　　 ??　　 0.04 secs Sun Aug 20 00:16</P><br />
<P>　　promisc_check　　　　 root　　 ??　　 0.01 secs Sun Aug 20 00:16</P><br />
<P>　　grep　　　　　　　　　　root　　 ??　　 0.02 secs Sun Aug 20 00:16</P><br />
<P>　　tail　　　　　　　　　　root　　 ??　　 0.01 secs Sun Aug 20 00:16</P><br />
<P>　　sh　　　　　　　　　　 root　　 ??　　 0.01 secs Sun Aug 20 00:15</P><br />
<P>　　ping　　　　　　S　　 root　　 ??　　 0.01 secs Sun Aug 20 00:15</P><br />
<P><BR>　　进程统计的一个问题是pacct文件可能增长的十分迅速。这时需要交互式的或经过cron机制运行sa命令来保持日志数据在系统控制内。sa命令报 告、清理并维护进程统计文件。它能把/var/log/pacct中的信息压缩到摘要文件/var/log/savacct和 /var/log/usracct中。这些摘要包含按命令名和用户名分类的系统统计数据。sa缺省情况下先读它们，然后读pacct文件，使报告能包含所有的可用信息。sa的输出有下面一些标记项：</P><br />
<P>　　avio&#8211;每次执行的平均I/O操作次数</P><br />
<P>　　cp&#8211;用户和系统时间总和，以分钟计</P><br />
<P>　　cpu&#8211;和cp一样</P><br />
<P>　　k&#8211;内核使用的平均CPU时间，以1k为单位</P><br />
<P>　　k*sec&#8211;CPU存储完整性，以1k-core秒</P><br />
<P>　　re&#8211;实时时间，以分钟计</P><br />
<P>　　s&#8211;系统时间，以分钟计</P><br />
<P>　　tio&#8211;I/O操作的总数</P><br />
<P>　　u&#8211;用户时间，以分钟计</P><br />
<P>　　例如：</P><br />
<P>　　842　　 173.26re　　　　4.30cp 0avio 358k</P><br />
<P>　　2　　 10.98re　　　　 4.06cp 0avio 299k find</P><br />
<P>　　9　　 24.80re　　　　 0.05cp 0avio 291k ***other</P><br />
<P>　　105　　 30.44re　　　　 0.03cp 0avio 302k ping</P><br />
<P>　　104　　 30.55re　　　　 0.03cp 0avio 394k sh</P><br />
<P>　　162　　 0.11re　　　　 0.03cp 0avio 413k security.sh*</P><br />
<P>　　154　　 0.03re　　　　 0.02cp 0avio 273k ls</P><br />
<P>　　56　　 31.61re　　　　 0.02cp 0avio 823k ping6.pl*</P><br />
<P>　　2　　 3.23re　　　　 0.02cp 0avio 822k ping6.pl</P><br />
<P>　　35　　 0.02re　　　　 0.01cp 0avio 257k md5sum</P><br />
<P>　　97　　 0.02re　　　　 0.01cp 0avio 263k initlog</P><br />
<P>　　12 0.19re 0.01cp 0avio 399k promisc_check.s</P><br />
<P>　　15 0.09re 0.00cp 0avio 288k grep</P><br />
<P>　　11 0.08re 0.00cp 0avio 332k awk</P><br />
<P>　　用户还可以根据用户而不是命令来提供一个摘要报告。例如sa -m显示如下：</P><br />
<P>　　　　　　885　　 173.28re　　　　4.31cp 0avk</P><br />
<P>　　root　　879　　 173.23re　　　　4.31cp 0avk</P><br />
<P>　　alias 3　　 0.05re　　　　 0.00cp 0avk</P><br />
<P>　　qmailp 3　　 0.01re　　　　 0.00cp 0avk</P><br />
<P>&nbsp;</P><br />
<P>Syslog设备<BR>　　Syslog已被许多日志函数采纳，它用在许多保护措施中&#8211;任何程序都可以通过syslog 纪录事件。Syslog可以纪录系统事件，可以写到一个文件或设备中，或给用户发送一个信息。它能纪录本地事件或通过网络纪录另一个主机上的事件。</P><br />
<P>　　Syslog设备依据两个重要的文件：/etc/syslogd（守护进程）和/etc/syslog.conf配置文件，习惯上，多数syslog信息被写到/var/adm或/var/log目录下的信息文件中（messages.*）。一个典型的syslog纪录包括生成程序的名字和一个文本信息。它还包括一个设备和一个优先级范围（但不在日之中出现）。</P><br />
<P>　　每个syslog消息被赋予下面的主要设备之一：</P><br />
<P>　　LOG_AUTH&#8211;认证系统：login、su、getty等</P><br />
<P>　　LOG_AUTHPRIV&#8211;同LOG_AUTH，但只登录到所选择的单个用户可读的文件中</P><br />
<P>　　LOG_CRON&#8211;cron守护进程</P><br />
<P>　　LOG_DAEMON&#8211;其他系统守护进程，如routed</P><br />
<P>　　LOG_FTP&#8211;文件传输协议：ftpd、tftpd</P><br />
<P>　　LOG_KERN&#8211;内核产生的消息</P><br />
<P>　　LOG_LPR&#8211;系统打印机缓冲池：lpr、lpd</P><br />
<P>　　LOG_MAIL&#8211;电子邮件系统</P><br />
<P>　　LOG_NEWS&#8211;网络新闻系统</P><br />
<P>　　LOG_SYSLOG&#8211;由syslogd（8）产生的内部消息</P><br />
<P>　　LOG_USER&#8211;随机用户进程产生的消息</P><br />
<P>　　LOG_UUCP&#8211;UUCP子系统</P><br />
<P>　　LOG_LOCAL0~LOG_LOCAL7&#8211;为本地使用保留</P><br />
<P>　　Syslog为每个事件赋予几个不同的优先级：</P><br />
<P>　　LOG_EMERG&#8211;紧急情况</P><br />
<P>　　LOG_ALERT&#8211;应该被立即改正的问题，如系统数据库破坏</P><br />
<P>　　LOG_CRIT&#8211;重要情况，如硬盘错误</P><br />
<P>　　LOG_ERR&#8211;错误</P><br />
<P>　　LOG_WARNING&#8211;警告信息</P><br />
<P>　　LOG_NOTICE&#8211;不是错误情况，但是可能需要处理</P><br />
<P>　　LOG_INFO&#8211;情报信息</P><br />
<P>　　LOG_DEBUG&#8211;包含情报的信息，通常旨在调试一个程序时使用</P><br />
<P>　　syslog.conf文件指明syslogd程序纪录日志的行为，该程序在启动时查询配置文件。该文件由不同程序或消息分 类的单个条目组成，每个占一行。对每类消息提供一个选择域和一个动作域。这些域由tab隔开：选择域指明消息的类型和优先级；动作域指明syslogd接 收到一个与选择标准相匹配的消息时所执行的动作。每个选项是由设备和优先级组成。当指明一个优先级时，syslogd将纪录一个拥有相同或更高优先级的消 息。所以如果指明&#8221;crit&#8221;，那所有标为crit、alert和emerg的消息将被纪录。每行的行动域指明当选择域选择了一个给定消息后应该把他发送 到哪儿。例如，如果想把所有邮件消息纪录到一个文件中，如下：</P><br />
<P>　　#Log all the mail messages in one place</P><br />
<P>　　mail.* /var/log/maillog</P><br />
<P>　　其他设备也有自己的日志。UUCP和news设备能产生许多外部消息。它把这些消息存到自己的日志（/var/log/spooler）中并把级别限为&#8221;err&#8221;或更高。例如：</P><br />
<P>　　# Save mail and news errors of level err and higher in aspecial file.</P><br />
<P>　　uucp,news.crit /var/log/spooler</P><br />
<P>　　当一个紧急消息到来时，可能想让所有的用户都得到。也可能想让自己的日志接收并保存。</P><br />
<P>　　#Everybody gets emergency messages， plus log them on anther machine</P><br />
<P>　　*.emerg *</P><br />
<P>　　*.emerg @linuxaid.com.cn</P><br />
<P>　　alert消息应该写到root和tiger的个人账号中：</P><br />
<P>　　#Root and Tiger get alert and higher messages</P><br />
<P>　　*.alert root,tiger</P><br />
<P>　　有时syslogd将产生大量的消息。例如内核（&#8221;kern&#8221;设备）可能很冗长。用户可能想把内核消息纪录到/dev/console中。下面的例子表明内核日志纪录被注释掉了：</P><br />
<P>　　#Log all kernel messages to the console</P><br />
<P>　　#Logging much else clutters up the screen</P><br />
<P>　　#kern.* /dev/console</P><br />
<P>　　用户可以在一行中指明所有的设备。下面的例子把info或更高级别的消息送到/var/log/messages，除了mail以外。级别&#8221;none&#8221;禁止一个设备：</P><br />
<P>　　#Log anything（except mail）of level info or higher</P><br />
<P>　　#Don&#8217;t log private authentication messages!</P><br />
<P>　　*.info:mail.none;autHPriv.none /var/log/messages</P><br />
<P>　　在有些情况下，可以把日志送到打印机，这样网络入侵者怎么修改日志都没有用了。通常要广泛纪录日志。Syslog设备是一个攻击者的显著目标。一个为其他主机维护日志的系统对于防范服务器攻击特别脆弱，因此要特别注意。</P><br />
<P>　　有个小命令logger为syslog（3）系统日志文件提供一个shell命令接口，使用户能创建日志文件中的条目。用法：logger 例如：logger This is a test！</P><br />
<P>　　它将产生一个如下的syslog纪录：Aug 19 22:22:34 tiger: This is a test!</P><br />
<P>　　注意不要完全相信日志，因为攻击者很容易修改它的。</P><br />
<P>　　5. 程序日志</P><br />
<P>　　许多程序通过维护日志来反映系统的安全状态。su命令允许用户获得另一个用户的权限，所以它的安全很重要，它的文件为sulog。同样的还有sudolog。另外，想Apache有两个日志：access_log和error_log。</P><br />
<P>　　6. 其他日志工具</P><br />
<P>　　chklastlog</P><br />
<P>　　<A href="ftp://coast.cs.purdue.edu/pub/tools/unix/chklastlog/">ftp://coast.cs.purdue.edu/pub/tools/unix/chklastlog/</A></P><br />
<P>　　chkwtmp</P><br />
<P>　　<A href="ftp://coast.cs.purdue.edu/pub/tools/unix/chkwtmp/">ftp://coast.cs.purdue.edu/pub/tools/unix/chkwtmp/</A></P><br />
<P>　　dump_lastlog</P><br />
<P>　　<A href="ftp://coast.cs.purdue.edu/pub/tools/unix/dump_lastlog.Z">ftp://coast.cs.purdue.edu/pub/tools/unix/dump_lastlog.Z</A></P><br />
<P>　　spar</P><br />
<P>　　<A href="ftp://coast.cs.purdue.edu/pub/tools/unix/TAMU/">ftp://coast.cs.purdue.edu/pub/tools/unix/TAMU/</A></P><br />
<P>　　Swatch</P><br />
<P>　　<A href="http://www.lomar.org/komar/alek/pres/swatch/cover.html">http://www.lomar.org/komar/alek/pres/swatch/cover.html</A></P><br />
<P>　　Zap</P><br />
<P>　　<A href="ftp://caost.cs.purdue.edu/pub/tools/unix/zap.tar.gz">ftp://caost.cs.purdue.edu/pub/tools/unix/zap.tar.gz</A></P><br />
<P>　　日志分类方法</P><br />
<P>　　<A href="http://csrc.nist.gov/nissc/1998/proceedings/paperD1.pdf">http://csrc.nist.gov/nissc/1998/proceedings/paperD1.pdf</A><BR></P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/73.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selinux是什么?</title>
		<link>http://www.linuxsense.org/archives/72.html</link>
		<comments>http://www.linuxsense.org/archives/72.html#comments</comments>
		<pubDate>Mon, 05 Nov 2007 03:58:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux安全]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=72</guid>
		<description><![CDATA[在新的基于RHEL一般都自带了selinux，多数情况下我们把selinux禁用了，事实上既然RHEL要集成它，必然有他的优点和长处，我们通过下文来了解selinux，也许你会喜欢用上它。英文原文来自www.RedHat.comby Russell Coker翻译：胡智江主要内容介绍：SELinux概览：SELinux深入研究：Fedora中策略的实现：Fedora的缺省SELinux策略：更多关于SELinux的资料：关于作者和译者：
介绍：当今世界，无处不在高速互联网连接、如备有无线接入点的咖啡馆和在网上到处传播的各种黑客工具使得出于对计算机安全的考虑成为老生常谈。出于解决安全问题，NSA在Linux社区的帮助下开发了一种访问控制体系，在这种访问控制体系的限制下，进程只能访问那些在他的任务中所需要文件。这种体系叫做 Security-Enhanced Linux或简化为SELinux。
SELinux概览：
SELinux是一种基于 域-类型 模型（domain-type）的强制访问控制（MAC）安全系统，它由NSA编写并设计成内核模块包含到内核中，相应的某些安全相关的应用也被打了SELinux的补丁，最后还有一个相应的安全策略。
众所周知，标准的UNIX安全模型是&#8221;任意的访问控制&#8221;DAC。就是说，任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件仍到/tmp目录下，那么在DAC情况下没人能阻止他！
而MAC情况下的安全策略完全控制着对所有资源的访问。这是MAC和DAC本质的区别。
SELinux里实现的MAC允许程序在/tmp目录下建立文件，也允许这个文件按照UNIX权限字的要求对全世界可读，但是当UNIX许可检查应用后， SELinux许可检查还要进一步判断对资源的访问是否被许可。换句话说，尽管某些UNIX文件的权限被设定为0777但是你也许仍然会被禁止读，写和执行该UNIX文件。在只有DAC的情况下，用户可以查看或更改属于他的任何文件。SELinux则可以限制每一个进程对各种资源的访问，和访问的权级。就是说当一个程序在使用含有敏感数据时，这些数据会被禁止写入那些低权级进程可读的文件中。
SELinux提供了比传统的UNIX权限更好的访问控制。
例如，管理员可以只允许一个应用程序添加记录到一个日志文件但不允许其重写或者删除该日志文件的内容。虽然ext2和ext3文件系统有一个append-only标签（使用chattr设置）,但是这属性不区分某一个进程（不能在为一个访问 append-only的同时，又允许另一个进程据有完全可写的权利）；另一方面，一个应用程序可以被允许在一个文件夹中建立文件和向其写入数据，但不能删除文件：这种特性是没有SELinux的普通的Linux内核所不能做到的。还有，网络应用程序可以绑定到其需要的端口上（如BIND的53端口），但不能绑定其它端口。
域-类型模型意味着在安全域中运行着的每一个进程和每一个资源（一般文件、目录文件和套接字等）都有一个与之相联系的&#8221;类型&#8221;（type）。
在这基础之上建立了一系列规则，这些规则列出了某个域可以在每一个类型上执行的所有动作。 域-类型模型的一个优点就是我们可以对策略进行分析，从而判断出哪些信息有可能外溢。在标准的UNIX环境中，用户一般可以使用ps命令来互相查看彼此的进程列表，然而这也会为攻击者提供有价值的信息。甚至就算完全阻止用户使用ps命令，信息还是会意外的或故意的泄露，其实在一个给定的UNIX环境中，哪些信息会发生泄露是无法判断的。
而在SELinux情况下，我们会有很多工具用来分析SELinux策略并判断哪些信息泄露是可能的。举个例子，假如有两个应用程序被允许向一个日志文件添加数据，且他们互相不能直接通信。那么如果一个其中进程又获得了对该日志的读权限的话，那么一个单方通信就有可能形成。
对访问/etc/shadow文件做访问限制是个很好的例子，通过该例子我们可以看出策略分析的好处。如果你装了Fedora Core 3,并且选择了严格的SElinux策略配置，那么将会有17个域被允许访问shadow_t(/etc/shadow的type)，其中有9个域据有写权利。这17个域中有2个可以从用户域（user domain）进入，他们是/usr/bin/passwd和 /sbin/unix_chkpwd(一个为无特权应用程序提供密码检查的辅助程序，比如向锁屏程序就需要使用到unix_chkpwd)。这17个域中的某些域是为一些不常见的应用程序准备的（如radius_t域就是为RADIUS服务器准备的），所以，也就是说，就算除去这个不常用的域，一般的系统中还有16个可访问的域能够访问/etc/shadow呢！
值得注意的是，Fedora发型版的SELinux策略已经变得越来越灵活；未来版本的策略也许会使何以访问/etc/shadow的域超过17个，这取决于可调节选项的实际配置。还要注意的是，17这个数字是基于严格的策略设定之后而得出的，实际上一个默认的安装会大于这个数字。
在一个没有SE的机器上，任何以root身份运行的进程都可以访问/etc/shadow文件。这意味着任何被&#8221;SETUID root&#8221;的二进制代码或以root身份运行的网络服务守护进程，它们所产生的任何安全问题都将会是灾难性的。
SELinux允许我们限制这些守护进程只访问其所需：BIND只能在53端口提供服务、DHCP服务器可以使用原始套接字（raw network access）、DHCP客户端也可以使用原始套接字并可以改变网络接口，但是它们谁都别想访问/etc/shadow,/home,/root等等这些重要的资源。所以，在SElinux的情况下，如果BIND受到了危害，它最多也就是发送一些伪造的报文罢了。如果DHCPD受到了危害，最坏的可能就是你的ip地址分配被搞乱。这比root权力被远程滥用好多了！
大家很清楚，一个进程可以援引另一个进程。
在这种情况下，拿DHCPD为例，DHCPD也许会尝试援引 /sbin/unix_chkpwd对密码进行强力攻击。（But even that potential vulnerability is closed）:SELinux能够提供&#8221;过渡&#8221;规则，这种规则可以用来判断各种域间过渡是否合法。有了&#8221;过渡&#8221;规则以后，由用户执行的屏幕保护程序可以顺利过渡到/sbin/unix_chkpwd这样一个特权域，然而DHCPD就别想了。
上述这些限制功能可以使你对系统的状态了如指掌。如果你发现你的DHCP服务器有BUG，那你只要简单的升级DHCP服务器到新版本并且确定每一个客户端都能正常获得IP地址就可以了。可是如果没有SE的话，你还要考虑你的新服务器是否已被黑客入侵并擦除了痕迹。
&#160;&#160;&#160;&#160;&#160; SElinux 对不同的域做了严格的隔离。我以前运行一个Debian系统有两年时间，在这期间我开放了他的root密码。最近两个月我在一个Fedora系统上做同样的事情。但这两个系统已经抵抗住了很多次以root身份的攻击（见httphttp://www.coker.com.au/selinux/play.html）。（译者注：这里有一些作者对其playmachine的介绍被忽略了）
为了给RHEL4做代码测试，Fedora core 2已经尝试集成了SELinux，但是默认是关闭的。而且将来RHEL和Fedora Core的SE还会有非常大的差别的。我们计划在RHEL中，将把SELinux的策略设置的比Fedora Core要严格，我们相信这样做也符合用户的要求。未来的Fedora版本的SELinux策略将会越来越严格，但再严格也不会超过RHEL。
SELinux深入研究：
SELinux的策略数据库控制着SELinux的方方面面。它可以判断一个程序可能会运行在哪个域中，还可以说明某个域可以访问哪些资源。这种规定被叫做规则，一个典型的策略往往拥有100,000条规则。别被这数字吓坏，我们根本不必去关心它，因为当我们撰写策略时，我们可以使用高级宏，这些高级宏的一行就能生成10,000条规则。除了宏以外，还有一些工具，使用他们可以分析这些生成的规则是否能达到你对安全的要求。其实再和设置每个文件的UNIX 权限位这样的工作比起来，这100,000个规则也是相当小的工作量了。
Fedora Core 2安全策略的目标是满足大多数用户无需改动就可以工作的要求，但也有一些普通的简单的选项可以调节策略，一般都是简简单单的一行选项。比如是否允许用户通过dmesg阅读内核的日志，是否允许管理员（sysadm_r）直接通过SSH登陆或登陆图形会话，还有是否允许用户绑定TCP套接字。那100,000个左右的规则存储在一个大约2.6MB的文件中，当系统启动时随内核一起装入内存并占用同样大小（大约2.6MB）的内核空间。 Fedora Core 3默认的strict策略有着多余290,000条规则，占用7MB的内核空间。Fedora Core 3默认的target策略有大约5,000条规则，占用150K的内核空间。
目前，SELinux并没有在内存使用方面进行优化；但现在对这些优化工作已经有了计划和一些降低内存使用的方法。如果你不打算使用某些守护进程，你可以简单的将其对应的策略文件删除以便获得占用空间更少的策略。2003年，在Ottawa举办的一次Linux讨论会上，我提交过一篇文章，那是关于我在把 SELinux移植到HP iPAQ PDA上所做的工作的文章(在http //archive.linuxsymposium.org/ols2003/Proceedings/可以获得)。
证明我可以使SELinux（且选择 strict策略）很好的工作在一台只有 64 MBs的RAM 和32 MBs 存储空间的小平台上，并且我相信我还可以使它运行在更小的平台上。针对Fedora Core2系统，我们只把目光定位在目前最常见的硬件平台，从而得出了默认的策略配置。但那些使用老机器的用户们也许会希望配置出最小限度的策略以便减少内存使用和提高性能。
在使用了SELinux的系统中，每一个进程的上下文都包含三个组成部分：一个ID（identity），一个角色（role）和一个域（domain）
ID是指这个进程的所有者，就是UNIX账户，但前提是这个账户必须被预先编译到SELinux策略中去使SELinux认识这个账户，不然的话SELinux默认地将那些未知的系统进程ID记为 system_u ，将那些未知的用户进程ID记为 user_u；角色用来判断某个处于此角色的ID可以进入哪些域，还用来防止某个处于此角色的ID进入其它不该进入的域。比如， user_r角色就不允许进入 sysadm_t （重要的系统管理域）。
换句话说就是，那些只有 [...]]]></description>
			<content:encoded><![CDATA[<p><P>在新的基于RHEL一般都自带了selinux，多数情况下我们把selinux禁用了，事实上既然RHEL要集成它，必然有他的优点和长处，我们通过下文来了解selinux，也许你会喜欢用上它。<BR><BR>英文原文来自<A href="http://www.RedHat.com">www.RedHat.com</A><BR>by Russell Coker<BR>翻译：胡智江<BR>主要内容<BR>介绍：<BR>SELinux概览：<BR>SELinux深入研究：<BR>Fedora中策略的实现：<BR>Fedora的缺省SELinux策略：<BR>更多关于SELinux的资料：<BR>关于作者和译者：</P><br />
<P>介绍：<BR>当今世界，无处不在高速互联网连接、如备有无线接入点的咖啡馆和在网上到处传播的各种黑客工具使得出于对计算机安全的考虑成为老生常谈。出于解决安全问题，NSA在Linux社区的帮助下开发了一种访问控制体系，在这种访问控制体系的限制下，进程只能访问那些在他的任务中所需要文件。这种体系叫做 Security-Enhanced Linux或简化为SELinux。</P><br />
<P>SELinux概览：</P><br />
<P>SELinux是一种基于 域-类型 模型（domain-type）的强制访问控制（MAC）安全系统，它由NSA编写并设计成内核模块包含到内核中，相应的某些安全相关的应用也被打了SELinux的补丁，最后还有一个相应的安全策略。</P><br />
<P>众所周知，标准的UNIX安全模型是&#8221;任意的访问控制&#8221;DAC。就是说，任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件仍到/tmp目录下，那么在DAC情况下没人能阻止他！</P><br />
<P>而MAC情况下的安全策略完全控制着对所有资源的访问。这是MAC和DAC本质的区别。</P><br />
<P>SELinux里实现的MAC允许程序在/tmp目录下建立文件，也允许这个文件按照UNIX权限字的要求对全世界可读，但是当UNIX许可检查应用后， SELinux许可检查还要进一步判断对资源的访问是否被许可。<BR>换句话说，尽管某些UNIX文件的权限被设定为0777但是你也许仍然会被禁止读，写和执行该UNIX文件。在只有DAC的情况下，用户可以查看或更改属于他的任何文件。SELinux则可以限制每一个进程对各种资源的访问，和访问的权级。就是说当一个程序在使用含有敏感数据时，这些数据会被禁止写入那些低权级进程可读的文件中。</P><br />
<P>SELinux提供了比传统的UNIX权限更好的访问控制。</P><br />
<P>例如，管理员可以只允许一个应用程序添加记录到一个日志文件但不允许其重写或者删除该日志文件的内容。虽然ext2和ext3文件系统有一个append-only标签（使用chattr设置）,但是这属性不区分某一个进程（不能在为一个访问 append-only的同时，又允许另一个进程据有完全可写的权利）；另一方面，一个应用程序可以被允许在一个文件夹中建立文件和向其写入数据，但不能删除文件：这种特性是没有SELinux的普通的Linux内核所不能做到的。还有，网络应用程序可以绑定到其需要的端口上（如BIND的53端口），但不能绑定其它端口。</P><br />
<P>域-类型模型意味着在安全域中运行着的每一个进程和每一个资源（一般文件、目录文件和套接字等）都有一个与之相联系的&#8221;类型&#8221;（type）。</P><br />
<P>在这基础之上建立了一系列规则，这些规则列出了某个域可以在每一个类型上执行的所有动作。 域-类型模型的一个优点就是我们可以对策略进行分析，从而判断出哪些信息有可能外溢。在标准的UNIX环境中，用户一般可以使用ps命令来互相查看彼此的进程列表，然而这也会为攻击者提供有价值的信息。甚至就算完全阻止用户使用ps命令，信息还是会意外的或故意的泄露，其实在一个给定的UNIX环境中，哪些信息会发生泄露是无法判断的。</P><br />
<P>而在SELinux情况下，我们会有很多工具用来分析SELinux策略并判断哪些信息泄露是可能的。举个例子，假如有两个应用程序被允许向一个日志文件添加数据，且他们互相不能直接通信。那么如果一个其中进程又获得了对该日志的读权限的话，那么一个单方通信就有可能形成。</P><br />
<P>对访问/etc/shadow文件做访问限制是个很好的例子，通过该例子我们可以看出策略分析的好处。<BR>如果你装了Fedora Core 3,并且选择了严格的SElinux策略配置，那么将会有17个域被允许访问shadow_t(/etc/shadow的type)，其中有9个域据有写权利。这17个域中有2个可以从用户域（user domain）进入，他们是/usr/bin/passwd和 /sbin/unix_chkpwd(一个为无特权应用程序提供密码检查的辅助程序，比如向锁屏程序就需要使用到unix_chkpwd)。这17个域中的某些域是为一些不常见的应用程序准备的（如radius_t域就是为RADIUS服务器准备的），所以，也就是说，就算除去这个不常用的域，一般的系统中还有16个可访问的域能够访问/etc/shadow呢！</P><br />
<P>值得注意的是，Fedora发型版的SELinux策略已经变得越来越灵活；未来版本的策略也许会使何以访问/etc/shadow的域超过17个，这取决于可调节选项的实际配置。还要注意的是，17这个数字是基于严格的策略设定之后而得出的，实际上一个默认的安装会大于这个数字。</P><br />
<P>在一个没有SE的机器上，任何以root身份运行的进程都可以访问/etc/shadow文件。这意味着任何被&#8221;SETUID root&#8221;的二进制代码或以root身份运行的网络服务守护进程，它们所产生的任何安全问题都将会是灾难性的。</P><br />
<P>SELinux允许我们限制这些守护进程只访问其所需：<BR>BIND只能在53端口提供服务、DHCP服务器可以使用原始套接字（raw network access）、DHCP客户端也可以使用原始套接字并可以改变网络接口，但是它们谁都别想访问/etc/shadow,/home,/root等等这些重要的资源。<BR>所以，在SElinux的情况下，如果BIND受到了危害，它最多也就是发送一些伪造的报文罢了。如果DHCPD受到了危害，最坏的可能就是你的ip地址分配被搞乱。这比root权力被远程滥用好多了！</P><br />
<P>大家很清楚，一个进程可以援引另一个进程。</P><br />
<P>在这种情况下，拿DHCPD为例，DHCPD也许会尝试援引 /sbin/unix_chkpwd对密码进行强力攻击。（But even that potential vulnerability is closed）:SELinux能够提供&#8221;过渡&#8221;规则，这种规则可以用来判断各种域间过渡是否合法。有了&#8221;过渡&#8221;规则以后，由用户执行的屏幕保护程序可以顺利过渡到/sbin/unix_chkpwd这样一个特权域，然而DHCPD就别想了。</P><br />
<P>上述这些限制功能可以使你对系统的状态了如指掌。如果你发现你的DHCP服务器有BUG，那你只要简单的升级DHCP服务器到新版本并且确定每一个客户端都能正常获得IP地址就可以了。可是如果没有SE的话，你还要考虑你的新服务器是否已被黑客入侵并擦除了痕迹。</P><br />
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SElinux 对不同的域做了严格的隔离。我以前运行一个Debian系统有两年时间，在这期间我开放了他的root密码。最近两个月我在一个Fedora系统上做同样的事情。但这两个系统已经抵抗住了很多次以root身份的攻击（见httphttp://www.coker.com.au/selinux/play.html）。（译者注：这里有一些作者对其playmachine的介绍被忽略了）</P><br />
<P>为了给RHEL4做代码测试，Fedora core 2已经尝试集成了SELinux，但是默认是关闭的。而且将来RHEL和Fedora Core的SE还会有非常大的差别的。我们计划在RHEL中，将把SELinux的策略设置的比Fedora Core要严格，我们相信这样做也符合用户的要求。未来的Fedora版本的SELinux策略将会越来越严格，但再严格也不会超过RHEL。</P><br />
<P>SELinux深入研究：</P><br />
<P>SELinux的策略数据库控制着SELinux的方方面面。它可以判断一个程序可能会运行在哪个域中，还可以说明某个域可以访问哪些资源。这种规定被叫做规则，一个典型的策略往往拥有100,000条规则。别被这数字吓坏，我们根本不必去关心它，因为当我们撰写策略时，我们可以使用高级宏，这些高级宏的一行就能生成10,000条规则。除了宏以外，还有一些工具，使用他们可以分析这些生成的规则是否能达到你对安全的要求。其实再和设置每个文件的UNIX 权限位这样的工作比起来，这100,000个规则也是相当小的工作量了。</P><br />
<P>Fedora Core 2安全策略的目标是满足大多数用户无需改动就可以工作的要求，但也有一些普通的简单的选项可以调节策略，一般都是简简单单的一行选项。比如是否允许用户通过dmesg阅读内核的日志，是否允许管理员（sysadm_r）直接通过SSH登陆或登陆图形会话，还有是否允许用户绑定TCP套接字。<BR>那100,000个左右的规则存储在一个大约2.6MB的文件中，当系统启动时随内核一起装入内存并占用同样大小（大约2.6MB）的内核空间。 Fedora Core 3默认的strict策略有着多余290,000条规则，占用7MB的内核空间。Fedora Core 3默认的target策略有大约5,000条规则，占用150K的内核空间。</P><br />
<P>目前，SELinux并没有在内存使用方面进行优化；但现在对这些优化工作已经有了计划和一些降低内存使用的方法。如果你不打算使用某些守护进程，你可以简单的将其对应的策略文件删除以便获得占用空间更少的策略。2003年，在Ottawa举办的一次Linux讨论会上，我提交过一篇文章，那是关于我在把 SELinux移植到HP iPAQ PDA上所做的工作的文章(在http //archive.linuxsymposium.org/ols2003/Proceedings/可以获得)。</P><br />
<P>证明我可以使SELinux（且选择 strict策略）很好的工作在一台只有 64 MBs的RAM 和32 MBs 存储空间的小平台上，并且我相信我还可以使它运行在更小的平台上。针对Fedora Core2系统，我们只把目光定位在目前最常见的硬件平台，从而得出了默认的策略配置。但那些使用老机器的用户们也许会希望配置出最小限度的策略以便减少内存使用和提高性能。</P><br />
<P>在使用了SELinux的系统中，每一个进程的上下文都包含三个组成部分：一个ID（identity），一个角色（role）和一个域（domain）</P><br />
<P>ID是指这个进程的所有者，就是UNIX账户，但前提是这个账户必须被预先编译到SELinux策略中去使SELinux认识这个账户，不然的话SELinux默认地将那些未知的系统进程ID记为 system_u ，将那些未知的用户进程ID记为 user_u；角色用来判断某个处于此角色的ID可以进入哪些域，还用来防止某个处于此角色的ID进入其它不该进入的域。比如， user_r角色就不允许进入 sysadm_t （重要的系统管理域）。</P><br />
<P>换句话说就是，那些只有 user_u ID的进程只能扮演 user_r 这个角色，而 user_r 这个角色 永远不能被许可进入 sysadm_t 域。从而，那些只有 user_u 这个ID的人是别想进入 sysadm_t 域的。这些特色在缺省的Fedora Core2策略中并没有完全使用，当前我们只是把努力花在制定守护进程上，而对用户域的策略限制的很少（targeted策略没有对用户登陆做任何限制）。</P><br />
<P>一个安全上下文可以像 identity:role:domain 这样一种描述符的方式简明的表现出来。</P><br />
<P>比如，典型的系统管理上下文可以表示成 root:sysadm_r:sysadm_t 。任何可以被访问的对象都可以这样来表示。值得注意的是，&#8221;域&#8221;其实也是和一个进程相对应的一个&#8221;类型&#8221;。所以当检查某个进程是否有权向另一个进程发送信号（比如为ps命令检阅/proc文件系统）时，接受信号的进程的&#8221;域&#8221;就会充当&#8221;域-类型&#8221;模型中的&#8221;类型&#8221;的角色，从而完成&#8221;域-类型&#8221;的规则检查。即完成了进程间通信权限的检查。由于对于文件还没有使用角色这个机制，所以目前每个文件都被规定为object_r 角色（这个角色只是占个位置罢了，对策略没有任何影响）。</P><br />
<P>文件的ID就是文件创建者的ID。constraints 策略源文件中使用这个方式来判断一个访问是否有权改变某个文件的上下文描述符。除非被访问的文件的描述符中的ID字段和访问该文件的进程的所有者ID字段相同，无论是改变前还是改变后，否则进程无权改变一个文件的上下文描述符。</P><br />
<P>例如，一个拥有 rjc:user_r:user_t 描述符的进程可以将一个拥有 rjc:object_r:user_games_rw_t 描述符的文件的描述符改为rjc:object_r:user_games_ro_t ，但是它无权改变一个拥有 john:object_r:user_games_rw_t 描述符的文件的任何属性。</P><br />
<P>要想查看当前运行的进程的上下文描述符，可以使用ps命令并加入 &#8220;-Z&#8221;选项，如例一：&#8221;ps ax -Z的输出&#8221;：<BR>&nbsp; PID CONTEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COMMAND<BR>1634 root:user_r:user_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -bash<BR>1662 root:user_r:user_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ps ax -Z</P><br />
<P>Example 1. Example Output of ps ax -Z</P><br />
<P>要想查看目录下的文件的上下文描述符，可以使用ls命令并加入 &#8220;-Z&#8221;选项，如例一：&#8221;ls -Z的输出&#8221;：<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:bin_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bin<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:boot_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boot<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:device_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dev<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:etc_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; etc<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:home_root_t&nbsp;&nbsp;&nbsp; home<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:root_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; initrd<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:lib_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lib<BR>drwx&#8212;&#8212;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:lost_found_t&nbsp;&nbsp; lost+found<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:default_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; misc<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:mnt_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mnt<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:usr_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opt<BR>?&#8212;&#8212;&#8212;&nbsp; ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oracle<BR>dr-xr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proc<BR>drwxr-x&#8212;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:user_home_dir_t root<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:sbin_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbin<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; selinux<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:default_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srv<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sys<BR>drwxrwxrwt&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:tmp_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:usr_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; usr<BR>drwxr-xr-x&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; system_u:object_r:var_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var</P><br />
<P>Example 2. Example Output of ls -Z</P><br />
<P>值得注意的是：对于那些没有指定上下文的文件（一般是指那些不支持rwx标签的文件系统，如/sys、/proc、/selinux），ls命令就不会显示其上下文。对于不能用stat命令查看当前状态的那些文件系统。ls命令返回&#8221;?&#8212;&#8212;&#8212;&#8221;,其所有者和所有组也被标记为&#8221;？&#8221;，同样的，他的上下文也不会显示。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如例三所示，id命令将返回当前shell的上下文<BR>uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:user_r:user_t<BR>Example 3. Example Output of the id Command</P><br />
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果你的SELinux系统使用了strict 策略，你会发现应用程序做一些不正常的事情是很容易发生的。你经常会发现某些程序中会有些bug，这些bug使程序做那些你的SELinux策略不允许其做的其它事情。<BR>SELinux要求进程的上下文只有在被执行的&#8221;那一刻&#8221;才允许改变。新进程的域和角色信息可以从exec系统函数的上下文和文件类型中自动获得。进程也可以在执行exec之前被指明上下文。这些过程自然受SELinux策略的控制，因为ID，角色和域都受SELinux策略的控制。</P><br />
<P>Fedora中策略的实现：</P><br />
<P>从 Fedora Core 3 开始，SELinux的策略数据存储于/etc/security/selinux/X/src/policy/目录下（X指你选则的策略，可以是 &#8220;strict&#8221; 或者 &#8220;targeted&#8221;）。在这个目录中，你可以使用&#8221;make load&#8221;来编译并装在策略。也就是用那个命令将策略编译成二进制格式并装在到内核中，并立即生效。除了装如内核，该命令还将策略的二进制格式存储到 /etc/selinux/X/policy/policy.YY文件中，这里X指你选则的策略，可以是&#8221;strict&#8221; 或者 &#8220;targeted&#8221;，YY是策略的版本号（Fedora Core 3支持最新的版本是18）。这是为了在系统开机的第一时间，init可以迅速装载策略到内核。/etc/selinux/config这个配置文件用来告诉init那些策略需要装载。</P><br />
<P>当你启动一个SELinux时，init所做的第一件事就是挂载/proc文件系统，并判断SELinux是否被激活。init通过selinuxfs文件系统类型来判断内核中是否有SELinux，如果内核中没有SELinux或者内核参数中 selinux=0 这一项，那么系统就会以一种叫做 non-SE的状态被继续引导启动。如果发现了SELinux，那么/selinux虚拟文件系统将被创建，然后，init通过 /selinux/policyvers来检查内核所支持的SELinux版本。最后，相应的策略数据 /etc/selinux/X/policy/policy.YY就会被装在到内核中去了。</P><br />
<P>当策略被装载完之后，所有正在运行着的进程（指的就是init和内核的所有线程）都将被指定 system_u:system_r:kernel_t 这样一种上下文（内核线程其实无论在什么时间被创建，其上下文都是system_u:system_r:kernel_t ）。当init装载完策略之后，它还要重新执行自己。策略中有一个规则叫domain_auto_trans(kernel_t, init_exec_t, init_t)。他的意思就是当 kernel_t 域执行了一个据有 init_exec_t 类型的可执行文件（如/sbin/init）,那么该执行文件对应的进程的域就会自动过渡到 init_t 域（这是/sbin/init正确的所在域）。当这些都完成之后，init就继续完成那些通常的任务来完成机器的启动。内核线程自始至终都以 kernel_t 这个类型运行。</P><br />
<P>文件和目录的上下文存储于扩展属性当中 (XATTRs)。更多关于XATTRs的信息请参考attr(5), getfattr(1) 和 setfattr(1)的manpage。</P><br />
<P>简单的说，一个XATTR就是硬盘上某个文件的所有权，它由文件名和其它一些信息组成。对于每个 persistent 文件系统来说，它的每个文件或目录的SELinux上下文就存储在 security.selinux属性当中。虽然/proc文件系统不是persistent 文件系统，但SELinux还是在幕后为其文件和目录做了上下文标记，只是不能用getxattr获得罢了。和它对比，devpts文件系统（应用于/dev/pts Unix98伪终端）中各个文件（各个伪终端）的上下文是可以通过getxattr来获得的，并可以通过 setxattr 来更改每个设备的上下文（以便sshd等类似程序可以更改tty设备的上下文）。对于那些拥有固定存储的文件系统(ext2, ext3, Reiserfs, XFS, vfat, 等等) 有两种选择用于设定文件上下文：<BR>第一种：文件系统的类型就规定了其内部每一个文件英据有统一的上下文；<BR>第二种：使用 XATTRs 为每个文件标记不同上下文。例如，在iso9660（CD-ROM）文件系统中的每一个文件的上下文都是system_u:object_r:iso9660_t ，这被称做 genfs标记。</P><br />
<P>Ext2, ext3 和XFS支持 XATTRs 而且 Fedora 系统也支持安全标记名字空间，所以Fedora默认使用 XATTRs 来标记文件的上下文，但这也是可选方法之一。因为 直到 Reiser4发布之前 ，Hans Reiser对 支持XATTR没多大兴趣，所以Fedora的 ReiserFS 文件系统不能很好的支持SELinux标记操作。也就是说，使用 ReiserFS 文件系统作为SELinux的根文件系统是不可能的事情。</P><br />
<P>XFS有一个与XATTRs相关的重要的问题：如果XATTRs不能被装入超级块（inode），那么它们就会被装入数据块，每一个超级块就要使用一个数据块用来装 SELinux XATTR 。建立XFS时，mkfs.xfs在默认情况下创建的数据块大小为4096,超级块大小为256（要是用于安装 SELinux XATTR ，大约缺少30字节）。这就是说，默认的XFS文件系统中，每一个超级块要占用4096字节用来装载 SELinux XATTR ，这对于磁盘空间来说是严重的浪费！当你使用&#8221;-i size=512&#8243;选项创建一个XFS文件系统时，超级块的大小就变成了512字节，这样就可以将SELinux XATTR 装入超级块，即节省了空间，又提高的性能。512字节的超级块也有可能给其它操作带来好处。所以，如果你使用XFS并且打算将来使用 SELinux 的话，将超级块的大小规定为512字节肯定是个好主意。</P><br />
<P>如果你使用的是较新的内核（如最新的Fedora内核或标准2.6.8.1内核）并且使用最新的mount工具，那么当你挂载一个文件系统时，有一个选项可以用来为整个文件系统指定上下文标签。比如你要挂载的文件系统是一个邮件池（mail spool），你可以使用&#8221;-o context=system_u:object_r:mail_spool_t&#8221;选项来挂载他，这样会将其内部的全部文件的上下文标记为 system_u:object_r:mail_spool_t。如果你的这个邮件池很大，而且还是XFS文件系统，这个方法还可以避免上一段所讨论的 inode大小的问题。甚至对于ext3那样的对XATTRs 开销较小的文件系统来说，使用context=选项挂载文件系统也会进一步减少开销，也可以避免为已经建立的文件系统重新设置 SElinux上下文（如果文件系统中文件较多的话，会浪费很长的时间）。</P><br />
<P>Fedora的缺省SELinux策略：</P><br />
<P>在Fedora Core 3系统中，缺省的策略是&#8221;targeted &#8220;策略。对于此种选择人们议论纷纷，问题在于我们希望能使尽可能多得人使用SELinux。如果人们觉得这玩意太可怕并且妨碍了人们做他们想做的事，那么人们会把它关掉。所以我们在这个时候宁愿为大多数人提供适量的保护策略，也不会为了少部分人而提供严格的保护策略。缺省的Fedora Core 3安装会激活 SELinux 并使用&#8221;targeted &#8220;策略，你也可以通过运行 system-config-securitylevel 这个程序将策略改为更加严格的 &#8220;strict &#8220;策略。</P><br />
<P>如果你安装了策略的源文件包，那么策略的源文件就在/etc/selinux/X/src/policy/目录里面（X指你选则的策略，可以是 &#8220;strict&#8221; 或者 &#8220;targeted&#8221;）在这个目录下有一个叫作domains/program/的子目录，里面为每一个守护进程对应了一个.te文件。你可以删去那些你不使用也不打算使用的守护进程所对应的.te文件，从而减少内核内存空间的使用，并提高性能。比如，你的系统没有BIND服务，你完全可以删掉 named.te 文件。然后如果你使用&#8221;make load&#8221;命令重新装载策略到内核的话，内核对内存的使用量就会减少。然而也要小心，如果你误删了其它文件，那么你的系统将不能正常启动进入 enforcing模式。所以目前，这种调节最好还是由内行来做。</P><br />
<P>刚开始接触SElinux的你，要注意一个内核参数，它用来决定你系统的内核运行于 强制（enforcing ）模式还是自由（permissive）模式，那就是&#8221;enforcing&#8221;参数。在自由模式下SELinux只是记录他该做什么，而事实上并不做任何动作。在强制模式下SElinux会来真格的。如果你的策略有错误，在强制模式下系统可能会阻止你登陆！所以正常情况下你应改在启动时传 enforcing=1 给内核，当你的SELinux策略有问题时，你可以临时传enforcing=0给内核来查错。在/etc/selinux/config这个init的配置文件中相应的有一个选项，通过设置它，也可以使系统进入自由模式。</P><br />
<P>如果你打算中止使用SELinux，你可以使用 selinux=0 这个内核参数。这会关闭SELinux的全部功能，就好像你的内核并没有把SElinux机制编译进去一样。所以当系统出了问题时，比如系统崩溃，有些人就用此方法进行理事的恢复工作，但是我并不赞成这种做法。当你临时使用 selinux=0 进入系统后，你所建立的任何文件将不会拥有SELinux上下文标记。这就意味着，如果你替换了诸如/etc/passwd 或/etc/shadow等重要文件，那么下一次进入SELinux时，系统就不会正常的工作。这不是严重的问题，当你从CD引导时，做系统恢复时，或使用一个不支持 XATTRs备份软件恢复系统时，同样的问题也会发生。这个问题虽然可以通过为受到影响的文件系统重新标记上下文来解决，但是使用 enforcing=0 来代替 selinux=0 不是更好吗？<BR>你可以编辑/etc/selinux/config来临时关闭SELinux。</P><br />
<P>Fedora Core 2的释放是SELinux一次重要的发展。他是第一套提供对SELinux完整支持的主流Linux发行版本。Fedora Core 3 也是一个重要的里程碑，因为他是第一套将SELinux作为默认安装选项的Linux发行版本。<BR>Red Hat Enterprise Linux 4 见会跟随 Fedora Core 的开发步伐，其对SELinux的支持也会得到进一步的发展。当 RHEL 4 发布时，她将会从 Fedora Core 系统和在Fedora 上学习SELinux的用户那里获得非常大的益处。</P><br />
<P>你可以在 irc.freenode.net的 IRC服务器上的#fedora-selinux频道找到对SELinux的支持。还有 Fedora SELinux邮件列表&nbsp; <A href="http://www.redhat.com/mailman/listinfo/fedora-selinux-list">http://www.redhat.com/mailman/listinfo/fedora-selinux-list</A> 。我经常挂在#fedora-selinux上面，并也订阅了邮件列表，我期望着在那里回答您提出的任何问题。</P><br />
<P>更多关于SELinux的资料：</P><br />
<P>NSA site for Security-Enhanced Linux: <A href="http://www.nsa.gov/selinux/">http://www.nsa.gov/selinux/</A><BR>Fedora Core SELinux FAQ: <A href="http://people.redhat.com/kwade/fedora-docs/selinux-faq/">http://people.redhat.com/kwade/fedora-docs/selinux-faq/</A><BR>IRC channel for SELinux in Fedora Core: irc.freenode.net, #fedora-selinux<BR>Mailing list for SELinux in Fedora Core: <A href="http://www.redhat.com/mailman/listinfo/fedora-selinux-list">http://www.redhat.com/mailman/listinfo/fedora-selinux-list</A><BR>SELinux play machine: <A href="http://www.coker.com.au/selinux/play.html">http://www.coker.com.au/selinux/play.html</A></P><br />
<P>关于作者和译者：</P><br />
<P>Russell Coker 从2003年就为RedHat的 SELinux 工程工作。在那之前他是一个独立的顾问并在闲暇时间研究SELinux。他第一次了解SELinux 是在 2001 年Ottawa Linux 讨论会上，当时 NSA 的Pete Loscocco 针对SELinux做了一个演讲。在2002 的OLS 上他介绍了他如何将SELinux移植到Debian Linux上. 作为移植工作的一部分, 他还撰写了用于支持所有他使用的程序的策略, 这些策略后来成为了SELinux策略的主要来源. 在OLS2003 和 Linux Kongress 2002上他也发表了文章。</P><br />
<P>译者：胡智江，就读于江苏大学通信工程系。从1999年开始使用Linux，2003年通过了RHCT认证。对Linux系统和嵌入式系统都很感兴趣。翻译这篇文章主要是为了学习SELinux，然后和大家分享成果。希望大家对译文的错误作出批评和指正。</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/72.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下防范arp之欺骗攻击</title>
		<link>http://www.linuxsense.org/archives/71.html</link>
		<comments>http://www.linuxsense.org/archives/71.html#comments</comments>
		<pubDate>Mon, 05 Nov 2007 10:43:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux安全]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=71</guid>
		<description><![CDATA[arp攻击已经泛滥成灾，各大机房也正为此而感到头痛，要彻底防范arp欺骗，还要细分网段，这样的工作量是很大的，linux下防范arp欺骗攻击有有一些基本的防范方法，可以防止一些简单的arp欺骗。下面就是转载一篇rurutia朋友的文章,供大家参考。前两天家里的网断断续续，发现有人在用arp欺骗，其实真正碰到有人在攻击的几率不大，大部分原因都是有人在用win下的诸如“P2P终结者”这样的软件导致的。再怎么bs那人也是没有用的，问题还是要解决，win下倒是好办，现成的软件多的是 ，linux下面就要自己动手了^^。
arp欺骗的原理不多述，基本就是利用发 送假的arp数据包，冒充网关。一般在网上通讯的时候网关的IP和MAC的绑定是放在arp 缓存里面的，假的arp包就会刷新这个缓存，导致本该发送到网关的数据包发到了欺骗 者那里。解决的办法就是静态arp。
假设网关的IP是192.168.0.1，我们要 先得到网关的正确MAC，先ping一下网关：
ping 192.168.0.1然后运行arp查看arp缓存中的网关MAC：
localhost~$ arpAddress&#160;&#160;&#160;&#160;&#160;&#160; HWtype&#160; HWaddress&#160;&#160;&#160;&#160;&#160;&#160;&#160; Flags Mask&#160;&#160;&#160; Interface192.168.0.1&#160;&#160; ether&#160; 00:12:34:56:78:9A&#160;&#160;&#160; C&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; eth0这里得到的网关MAC假定 为00:12:34:56:78:9A，C代表这个绑定是保存在缓冲里的，我们要做的就是把这个IP和 MAC静态的绑定在一起，首先建立/etc/ethers文件，输入以下内容：
192.168.0.1 00:12:34:56:78:9A保存退出，之后便是应 用这个静态绑定：
localhost~$ arp -f再运行arp查看：
localhost~$ arpAddress&#160;&#160;&#160;&#160;&#160;&#160; HWtype&#160; HWaddress&#160;&#160;&#160;&#160;&#160;&#160;&#160; Flags Mask&#160;&#160;&#160; Interface192.168.0.1&#160;&#160; ether&#160; 00:12:34:56:78:9A&#160;&#160;&#160; CM&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; eth0多了个M，表示静态网关 ，OK收工～
另外，如果你不会和局域网内的用户通讯的话，那么可以干脆 把arp解析关掉，假定你的网卡是eth0，那么可以运行：
localhost~$ ifconfig eth0 -arp这样对付那些终结者软件就可以了，但是真的有人 向攻击的话，这样还是不够的，因为攻击者还可以欺骗网关，解决的办法就是在网关和 局域网内机器上做双向绑定，原理方法同上，一般网吧里面也是这样做的。
]]></description>
			<content:encoded><![CDATA[<p><P>arp攻击已经泛滥成灾，各大机房也正为此而感到头痛，要彻底防范arp欺骗，还要细分网段，这样的工作量是很大的，linux下防范arp欺骗攻击有有一些基本的防范方法，可以防止一些简单的arp欺骗。下面就是转载一篇rurutia朋友的文章,供大家参考。<BR><BR>前两天家里的网断断续续，发现有人在用arp欺骗，其实真正碰到有人在攻击的几率不大，大部分原因都是有人在用win下的诸如“P2P终结者”这样的软件导致的。再怎么bs那人也是没有用的，问题还是要解决，win下倒是好办，现成的软件多的是 ，linux下面就要自己动手了^^。</P><br />
<P>arp欺骗的原理不多述，基本就是利用发 送假的arp数据包，冒充网关。一般在网上通讯的时候网关的IP和MAC的绑定是放在arp 缓存里面的，假的arp包就会刷新这个缓存，导致本该发送到网关的数据包发到了欺骗 者那里。解决的办法就是静态arp。</P><br />
<P>假设网关的IP是192.168.0.1，我们要 先得到网关的正确MAC，先ping一下网关：</P><br />
<P>ping 192.168.0.1<BR>然后运行arp查看arp缓存中的网关MAC：</P><br />
<P>localhost~$ arpAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HWtype&nbsp; HWaddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flags Mask&nbsp;&nbsp;&nbsp; Interface192.168.0.1&nbsp;&nbsp; ether&nbsp; 00:12:34:56:78:9A&nbsp;&nbsp;&nbsp; C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eth0<BR>这里得到的网关MAC假定 为00:12:34:56:78:9A，C代表这个绑定是保存在缓冲里的，我们要做的就是把这个IP和 MAC静态的绑定在一起，首先建立/etc/ethers文件，输入以下内容：</P><br />
<P>192.168.0.1 00:12:34:56:78:9A<BR>保存退出，之后便是应 用这个静态绑定：</P><br />
<P>localhost~$ arp -f<BR>再运行arp查看：</P><br />
<P>localhost~$ arpAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HWtype&nbsp; HWaddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flags Mask&nbsp;&nbsp;&nbsp; Interface192.168.0.1&nbsp;&nbsp; ether&nbsp; 00:12:34:56:78:9A&nbsp;&nbsp;&nbsp; CM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eth0<BR>多了个M，表示静态网关 ，OK收工～</P><br />
<P>另外，如果你不会和局域网内的用户通讯的话，那么可以干脆 把arp解析关掉，假定你的网卡是eth0，那么可以运行：</P><br />
<P>localhost~$ ifconfig eth0 -arp<BR>这样对付那些终结者软件就可以了，但是真的有人 向攻击的话，这样还是不够的，因为攻击者还可以欺骗网关，解决的办法就是在网关和 局域网内机器上做双向绑定，原理方法同上，一般网吧里面也是这样做的。</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/71.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux/UNIX平台的病毒</title>
		<link>http://www.linuxsense.org/archives/56.html</link>
		<comments>http://www.linuxsense.org/archives/56.html#comments</comments>
		<pubDate>Fri, 26 Oct 2007 07:37:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux安全]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=56</guid>
		<description><![CDATA[相比Windows平台，Linux/UNIX平台以更安全而被系统管理员们认可，即使有众多的Linux/UNIX平台的爱好者们在不断的给系统打着补丁，不断的改进着这一开源平台的代码，但是始终没有绝对的安全，作为系统管理员，只要要了解Linux/UNIX平台的安全部署工作，下面转载一篇关于Linux/UNIX平台的病毒的文章，以供参考。&#160;&#160;&#160; 不久以前，很多系统管理员还信誓旦旦的表示，Linux和其他基于UNIX的平台对于病毒和蠕虫事实上是无懈可击的。我不知道为什么他们对自己的威胁分析这么自信，特别是从第一个大型蠕虫在1988年被Robert Morris发明，在使用Sendmail程序的UNIX系统中被释放出来以后。我猜测每个人都变得热衷于批评微软的操作系统和软件，这已经成为越来越多病毒制造者的攻击目标，然而他们却遗忘了UNIX上的脆弱点。 
Linux/UNIX威胁 随着Klez病毒在Linux平台上传染的通告，防毒软件厂商开始提醒我们微软的操作系统不再是唯一易受病毒攻击的操作系统了。即使Linux和其他一些主流UNIX平台的用户可能不是微软捆绑应用软件的大用户，不可能通过这些软件造成病毒的泛滥，Linux和UNIX仍然有它们自身并不引人注目的脆弱点。 
除了Klez以外，其他Linux/UNIX平台的主要威胁有：Lion.worm、OSF.8759病毒、Slapper、Scalper、Linux.Svat和BoxPoison病毒，这些很少被提及。 
我记得曾经在两年前参加了一个由欧洲最大的财政机构完成的安全审计项目，当时我听见一个知名的安全专家告诉审计师，UNIX是不易受病毒攻击的。审计师只是简单的说了一句&#8221;okay&#8221;，然后纪录下&#8221;UNIX系统对于病毒是安全的&#8221;。那个时代已经过去了，你现在可以预料到，安全审计师和IT安全团队已经开始强烈的需要UNIX平台上的病毒策略了。 
一个叫Alexander Bartolich的奥地利学生甚至已经完成了如何一个编写Linux平台上ELF 病毒的指南。Bartolich 没有要求做一个Linux病毒先锋，他表示，他只是更有效的说明了和反映了病毒、蠕虫和木马威胁Linux 更好的途径，那些很早就已经在别处被说明了。有了这样具启发性的、在网上发布的文档，基于UNIX的病毒数量只会增长的更快，特别是自Linux 在服务器领域的应用越来越广泛之后。系统管理员也许希望，在亲自读过那本指南以后，对Linux 病毒的理解发生飞跃，从而能够更好的掌握Linux 的脆弱点。 
病毒的制造者是一些精通编写代码的黑客，他们远比那些胡乱涂改网站却对编写病毒知之甚少的黑客要危险。尽管一个被黑掉的网站可以很快的修好，病毒却加更隐蔽，会带来潜在的安全隐患。你也许不能相信，但是病毒会一直潜伏，直到它给系统带来不可挽回的损害。 
受影响的Linux/UNIX平台 不是所有版本的Linux/UNIX平台都已经被影响，但是下面这些是在从前已经被病毒侵害过的系统： 
# SuSE Linux # Mandrake Linux # Red Hat Linux # Debian GNU Linux # Slackware Linux # FreeBSD # HP/UX # IBM AIX # SCO Unixware # SCO OpenServer # Sun Solaris # SunOS 
越多的Linux/UNIX系统连接到局域网和广域网，你的单位就有越多受攻击的可能，这是因为很多UNIX 病毒正在快速的扩散着。使用WINE的 [...]]]></description>
			<content:encoded><![CDATA[<p><P>相比Windows平台，Linux/UNIX平台以更安全而被系统管理员们认可，即使有众多的Linux/UNIX平台的爱好者们在不断的给系统打着补丁，不断的改进着这一开源平台的代码，但是始终没有绝对的安全，作为系统管理员，只要要了解Linux/UNIX平台的安全部署工作，下面转载一篇关于Linux/UNIX平台的病毒的文章，以供参考。<BR>&nbsp;&nbsp;&nbsp; 不久以前，很多系统管理员还信誓旦旦的表示，Linux和其他基于UNIX的平台对于病毒和蠕虫事实上是无懈可击的。我不知道为什么他们对自己的威胁分析这么自信，特别是从第一个大型蠕虫在1988年被Robert Morris发明，在使用Sendmail程序的UNIX系统中被释放出来以后。我猜测每个人都变得热衷于批评微软的操作系统和软件，这已经成为越来越多病毒制造者的攻击目标，然而他们却遗忘了UNIX上的脆弱点。 </P><br />
<P>Linux/UNIX威胁 <BR>随着Klez病毒在Linux平台上传染的通告，防毒软件厂商开始提醒我们微软的操作系统不再是唯一易受病毒攻击的操作系统了。即使Linux和其他一些主流UNIX平台的用户可能不是微软捆绑应用软件的大用户，不可能通过这些软件造成病毒的泛滥，Linux和UNIX仍然有它们自身并不引人注目的脆弱点。 </P><br />
<P>除了Klez以外，其他Linux/UNIX平台的主要威胁有：Lion.worm、OSF.8759病毒、Slapper、Scalper、Linux.Svat和BoxPoison病毒，这些很少被提及。 </P><br />
<P>我记得曾经在两年前参加了一个由欧洲最大的财政机构完成的安全审计项目，当时我听见一个知名的安全专家告诉审计师，UNIX是不易受病毒攻击的。审计师只是简单的说了一句&#8221;okay&#8221;，然后纪录下&#8221;UNIX系统对于病毒是安全的&#8221;。那个时代已经过去了，你现在可以预料到，安全审计师和IT安全团队已经开始强烈的需要UNIX平台上的病毒策略了。 </P><br />
<P>一个叫Alexander Bartolich的奥地利学生甚至已经完成了如何一个编写Linux平台上ELF 病毒的指南。Bartolich 没有要求做一个Linux病毒先锋，他表示，他只是更有效的说明了和反映了病毒、蠕虫和木马威胁Linux 更好的途径，那些很早就已经在别处被说明了。有了这样具启发性的、在网上发布的文档，基于UNIX的病毒数量只会增长的更快，特别是自Linux 在服务器领域的应用越来越广泛之后。系统管理员也许希望，在亲自读过那本指南以后，对Linux 病毒的理解发生飞跃，从而能够更好的掌握Linux 的脆弱点。 </P><br />
<P>病毒的制造者是一些精通编写代码的黑客，他们远比那些胡乱涂改网站却对编写病毒知之甚少的黑客要危险。尽管一个被黑掉的网站可以很快的修好，病毒却加更隐蔽，会带来潜在的安全隐患。你也许不能相信，但是病毒会一直潜伏，直到它给系统带来不可挽回的损害。 </P><br />
<P>受影响的Linux/UNIX平台 <BR>不是所有版本的Linux/UNIX平台都已经被影响，但是下面这些是在从前已经被病毒侵害过的系统： </P><br />
<P># SuSE Linux <BR># Mandrake Linux <BR># Red Hat Linux <BR># Debian GNU Linux <BR># Slackware Linux <BR># FreeBSD <BR># HP/UX <BR># IBM AIX <BR># SCO Unixware <BR># SCO OpenServer <BR># Sun Solaris <BR># SunOS </P><br />
<P>越多的Linux/UNIX系统连接到局域网和广域网，你的单位就有越多受攻击的可能，这是因为很多UNIX 病毒正在快速的扩散着。使用WINE的 Linux/UNIX系统特别容易受到病毒的攻击。WINE是一个公开源代码的兼容软件包，能让UNIX平台运行Windows应用软件。 WINE系统特别容易遭受病毒的攻击，因为它们会使无论是对UNIX的还是对 Windows的病毒、蠕虫和木马都能对系统产生威胁。 </P><br />
<P>威胁的本质 <BR>你不应该为Linux/UNIX平台上的病毒和Windows操作系统上的病毒工作方式不同而感到奇怪。不过，UNIX中病毒、蠕虫和木马工作的原理和Windows中的还是大同小异的。 </P><br />
<P>病毒只不过是一个能不经过你的同意而感染和摧毁其他程序的程序。蠕虫是一个不经过你的同意而自我复制的代码块。尽管计算机程序中的bug也可能在未经你允许的情况下进行自我复制，它们还是有很大区别的。区别就在于bug的自我复制是无意识的，而病毒的自我复制却是有意识的。木马程序隐藏了它们进行数字破坏的企图。在一个UNIX环境下，木马可能被命名为一个合法的程序（例如tar或者df），可是它却能移除整个文件系统。 </P><br />
<P>这些病毒和蠕虫如何工作 <BR>为了给你一个由UNIX病毒、蠕虫和木马产生的重大破坏过程的认识，我带你走进两个假想的环境来揭示它们是如何工作的。每个病毒、蠕虫和木马都有它们自己的特性和行为，当然，这些例子只能给你一个对它们怎样在Linux/UNIX里发作的认识。 </P><br />
<P>让我们从Linux.Slapper worm. Slapper怎样侵袭一个Apache服务器开始。它通过HTTP的80端口连接到服务器，然后发送有效的GET请求，以发现正在使用的Apache服务器的版本，从而为详细的目标系统做一个自我定义。当找到了一个合适的易攻击的系统之后，它又连接到443端口，利用一个缓冲区溢出漏洞来采用合适的蠕虫包替换目标系统。 </P><br />
<P>接着，蠕虫会利用一个本地编译器，例如gcc来编译自己。二进制结果跟着从/tmp目录开始扩散，监听UDP端口，以接受更长远的分布式拒绝服务（DDoS ）攻击的指示。最后，DDoS攻击制造TCP洪流令系统瘫痪。某些Slapper病毒的变异体还会扫描整个B类网络寻找易攻击的Apache服务器。 </P><br />
<P>另一种蠕虫，Linux Lion worm，扫描任意的B类网络里的53端口，从而找出易受攻击版本的BIND——最流行的Linux/UNIX DNS服务器。当Linux Lion worm找到一个易受攻击版本的BIND之后，它清除日志文件，接着种植各种木马文件以隐藏它的企图。Linux Lion worm可能安装的木马文件有： <BR>/bin/in.telnetd <BR>/bin/mjy <BR>/bin/ps <BR>/bin/netstat <BR>/bin/ls <BR>/etc/inetd.conf <BR>/sbin/ifconfig <BR>/usr/bin/find <BR>/usr/sbin/nscd <BR>/usr/sbin/in.fingerd <BR>/usr/bin/top <BR>/usr/bin/du </P><br />
<P>你可以看到，这些文件看起来是合法的UNIX文件，因此你可能怀疑你的第一眼所见，但这就是木马的关键所在。 </P><br />
<P>要掩盖它的足迹， Linux Lion可能会删除以下文件： <BR>/.bash_history <BR>/etc/hosts.deny <BR>/root/.bash_history <BR>/var/log/messages <BR>/var/log/maillog </P><br />
<P>一旦已经对系统构成威胁，Lion会把密码文件发送给远程的计算机，其他Lion 的变种可以通过嗅探器来嗅探活动连接中的密码信息。通过获得系统访问权限，病毒黑客们能利用远程系统进行DDoS攻击，窃取信用卡号，或者窃取和破坏机密文件、纪录。 </P><br />
<P>Linux/UNIX的防毒产品 <BR>自从Linux成为最流行的UNIX平台之一以后，大多数为UNIX系统所编写的病毒瞄准了Linux平台。然而，一些厂商同样有一些非主流UNIX平台的软件包。如果你的单位正在使用Solaris、FreeBSD，或者其他版本的UNIX，不要期待找到很多防毒的选择。明显的，Linux/UNIX平台上的防毒软件正在蔓延，在教育，只有一部分厂商提供了Linux/UNIX 平台的软件产品。这些厂商包括： <BR>Computer Associates <BR>F-Secure <BR>Kaspersky <BR>Sophos <BR>Symantec <BR>Trend Micro </P><br />
<P>一些UNIX防毒产品被特别的设计安装在防火墙之上，因此你可以在UNIX病毒侵害其他系统之前将其拦截在防火墙上。另外的一些UNIX防毒产品被特别的设计在消息和群件服务器上。 </P><br />
<P>保护你的系统不受自动化的黑客行为所侵害 <BR>病毒、蠕虫和木马基本上意味着自动化的黑客行为，也许被病毒攻击比被黑客攻击更可能发生。直接的黑客攻击目标一般是服务器，而病毒是等机会的麻烦制造者。如果你的网络包含了Linux或UNIX系统，特别危险的是服务器，不要在作出反应之前等待寻找UNIX病毒、蠕虫和木马是否存在。做一些调查然后选择一个适合你系统的防毒产品，它们能帮你防止病毒的传播。</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/56.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux安全设置手册</title>
		<link>http://www.linuxsense.org/archives/8.html</link>
		<comments>http://www.linuxsense.org/archives/8.html#comments</comments>
		<pubDate>Fri, 28 Sep 2007 04:19:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux安全]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=8</guid>
		<description><![CDATA[本文是一篇比较早期的经典linux安全设置介绍，但是其关于linux安全的论述和观点还是值得参考，它讲述了如何通过基本的安全措施，使你的Linux系统变得更为安全可靠。 
1、Bios　Security 一定要给Bios设置密码，以防通过在Bios中改变启动顺序，而可以从软盘启动。这样可以阻止别人试图用特殊的启动盘启动你的系统，还可以阻止别人进入Bios改动其中的设置（比如允许通过软盘启动等）。 
2、LILO　Security 在&#8221;/etc/lilo.conf&#8221;文件中加入下面三个参数：time-out,restricted,password。这三个参数可以使你的系统在启动lilo时就要求密码验证。 
第一步： 编辑lilo.conf文件（vi　/etc/lilo.comf）,假如或改变这三个参数： boot=/dev/hda　 map=/boot/map　 install=/boot/boot.b　 time-out=00　　　#把这行该为00 prompt　 Default=linux　 restricted　　　#加入这行 password=　　　#加入这行并设置自己的密码 image=/boot/vmlinuz-2.2.14-12　 label=linux　 initrd=/boot/initrd-2.2.14-12.img　 root=/dev/hda6　 read-only　 
第二步： 因为&#8221;/etc/lilo.conf&#8221;文件中包含明文密码，所以要把它设置为root权限读取。 [root@kapil　/]#　chmod　600　/etc/lilo.conf　 
第三步： 更新系统，以便对&#8221;/etc/lilo.conf&#8221;文件做的修改起作用。 [Root@kapil　/]#　/sbin/lilo　-v 
第四步： 使用&#8221;chattr&#8221;命令使&#8221;/etc/lilo.conf&#8221;文件变为不可改变。 [root@kapil　/]#　chattr　+i　/etc/lilo.conf　 这样可以防止对&#8221;/etc/lilo.conf&#8221;任何改变（以外或其他原因） 
3、删除所有的特殊账户 你应该删除所有不用的缺省用户和组账户（比如lp,　sync,　shutdown,　halt,　news,　uucp,　operator,　games,　gopher等）。 删除用户： [root@kapil　/]#　userdel　LP　 删除组： [root@kapil　/]#　groupdel　LP　 
4、选择正确的密码 在选择正确密码之前还应作以下修改： 修改密码长度：在你安装linux时默认的密码长度是5个字节。但这并不够，要把它设为8。修改最短密码长度需要编辑login.defs文件（vi　/etc/login.defs），把下面这行 PASS_MIN_LEN　　　　5　 改为 PASS_MIN_LEN　　　　8 login.defs文件是login程序的配置文件。 
5、打开密码的shadow支持功能： 你应该打开密码的shadow功能，来对password加密。使用&#8221;/usr/sbin/authconfig&#8221;工具打开shadow功能。如果你想把已有的密码和组转变为shadow格式，可以分别使用&#8221;pwcov,grpconv&#8221;命令。 
6、root账户 在unix系统中root账户是具有最高特权的。如果系统管理员在离开系统之前忘记注销root账户，系统会自动注销。通过修改账户中&#8221;TMOUT&#8221;参数，可以实现此功能。TMOUT按秒计算。编辑你的profile文件（vi　/etc/profile）,在&#8221;HISTFILESIZE=&#8221;后面加入下面这行： TMOUT=3600 3600，表示60*60=3600秒，也就是1小时。这样，如果系统中登陆的用户在一个小时内都没有动作，那么系统会自动注销这个账户。你可以在个别用户的&#8221;.bashrc&#8221;文件中添加该值，以便系统对该用户实行特殊的自动注销时间。 改变这项设置后，必须先注销用户，再用该用户登陆才能激活这个功能。 
7、取消普通用户的控制台访问权限 你应该取消普通用户的控制台访问权限，比如shutdown、reboot、halt等命令。 [root@kapil　/]#　rm　-f　/etc/security/console.apps/　 是你要注销的程序名。 
8、取消并反安装所有不用的服务 [...]]]></description>
			<content:encoded><![CDATA[<p><P>本文是一篇比较早期的经典linux安全设置介绍，但是其关于linux安全的论述和观点还是值得参考，它讲述了如何通过基本的安全措施，使你的Linux系统变得更为安全可靠。 </P><br />
<P>1、Bios　Security <BR>一定要给Bios设置密码，以防通过在Bios中改变启动顺序，而可以从软盘启动。这样可以阻止别人试图用特殊的启动盘启动你的系统，还可以阻止别人进入Bios改动其中的设置（比如允许通过软盘启动等）。 </P><br />
<P>2、LILO　Security <BR>在&#8221;/etc/lilo.conf&#8221;文件中加入下面三个参数：time-out,restricted,password。这三个参数可以使你的系统在启动lilo时就要求密码验证。 </P><br />
<P>第一步： <BR>编辑lilo.conf文件（vi　/etc/lilo.comf）,假如或改变这三个参数： <BR>boot=/dev/hda　 <BR>map=/boot/map　 <BR>install=/boot/boot.b　 <BR>time-out=00　　　#把这行该为00 <BR>prompt　 <BR>Default=linux　 <BR>restricted　　　#加入这行 <BR>password=　　　#加入这行并设置自己的密码 <BR>image=/boot/vmlinuz-2.2.14-12　 <BR>label=linux　 <BR>initrd=/boot/initrd-2.2.14-12.img　 <BR>root=/dev/hda6　 <BR>read-only　 </P><br />
<P>第二步： <BR>因为&#8221;/etc/lilo.conf&#8221;文件中包含明文密码，所以要把它设置为root权限读取。 <BR>[root@kapil　/]#　chmod　600　/etc/lilo.conf　 </P><br />
<P>第三步： <BR>更新系统，以便对&#8221;/etc/lilo.conf&#8221;文件做的修改起作用。 <BR>[Root@kapil　/]#　/sbin/lilo　-v </P><br />
<P>第四步： <BR>使用&#8221;chattr&#8221;命令使&#8221;/etc/lilo.conf&#8221;文件变为不可改变。 <BR>[root@kapil　/]#　chattr　+i　/etc/lilo.conf　 <BR>这样可以防止对&#8221;/etc/lilo.conf&#8221;任何改变（以外或其他原因） </P><br />
<P>3、删除所有的特殊账户 <BR>你应该删除所有不用的缺省用户和组账户（比如lp,　sync,　shutdown,　halt,　news,　uucp,　operator,　games,　gopher等）。 <BR>删除用户： <BR>[root@kapil　/]#　userdel　LP　 <BR>删除组： <BR>[root@kapil　/]#　groupdel　LP　 </P><br />
<P>4、选择正确的密码 <BR>在选择正确密码之前还应作以下修改： <BR>修改密码长度：在你安装linux时默认的密码长度是5个字节。但这并不够，要把它设为8。修改最短密码长度需要编辑login.defs文件（vi　/etc/login.defs），把下面这行 <BR>PASS_MIN_LEN　　　　5　 <BR>改为 <BR>PASS_MIN_LEN　　　　8 <BR>login.defs文件是login程序的配置文件。 </P><br />
<P>5、打开密码的shadow支持功能： <BR>你应该打开密码的shadow功能，来对password加密。使用&#8221;/usr/sbin/authconfig&#8221;工具打开shadow功能。如果你想把已有的密码和组转变为shadow格式，可以分别使用&#8221;pwcov,grpconv&#8221;命令。 </P><br />
<P>6、root账户 <BR>在unix系统中root账户是具有最高特权的。如果系统管理员在离开系统之前忘记注销root账户，系统会自动注销。通过修改账户中&#8221;TMOUT&#8221;参数，可以实现此功能。TMOUT按秒计算。编辑你的profile文件（vi　/etc/profile）,在&#8221;HISTFILESIZE=&#8221;后面加入下面这行： <BR>TMOUT=3600 <BR>3600，表示60*60=3600秒，也就是1小时。这样，如果系统中登陆的用户在一个小时内都没有动作，那么系统会自动注销这个账户。你可以在个别用户的&#8221;.bashrc&#8221;文件中添加该值，以便系统对该用户实行特殊的自动注销时间。 <BR>改变这项设置后，必须先注销用户，再用该用户登陆才能激活这个功能。 </P><br />
<P>7、取消普通用户的控制台访问权限 <BR>你应该取消普通用户的控制台访问权限，比如shutdown、reboot、halt等命令。 <BR>[root@kapil　/]#　rm　-f　/etc/security/console.apps/　 <BR>是你要注销的程序名。 </P><br />
<P>8、取消并反安装所有不用的服务 <BR>取消并反安装所有不用的服务，这样你的担心就会少很多。察看&#8221;/etc/inetd.conf&#8221;文件，通过注释取消所有你不需要的服务（在该服务项目之前加一个&#8221;#&#8221;）。然后用&#8221;sighup&#8221;命令升级&#8221;inetd.conf&#8221;文件。 <BR>第一步： <BR>更改&#8221;/etc/inetd.conf&#8221;权限为600，只允许root来读写该文件。 <BR>[Root@kapil　/]#　chmod　600　/etc/inetd.conf <BR>第二步： <BR>确定&#8221;/etc/inetd.conf&#8221;文件所有者为root。 <BR>第三步： <BR>编辑　/etc/inetd.conf文件（vi　/etc/inetd.conf），取消下列服务（你不需要的）：ftp,　telnet,　shell,　login,　exec,　talk,　ntalk,　imap,　pop-2,　pop-3,　finger,　auth等等。把不需要的服务关闭可以使系统的危险性降低很多。 <BR>第四步： <BR>给inetd进程发送一个HUP信号： <BR>[root@kapil　/]#　killall　-HUP　inetd　 <BR>第五步： <BR>用chattr命令把/ec/inetd.conf文件设为不可修改，这样就没人可以修改它： <BR>[root@kapil　/]#　chattr　+i　/etc/inetd.conf　 <BR>这样可以防止对inetd.conf的任何修改（以外或其他原因）。唯一可以取消这个属性的人只有root。如果要修改inetd.conf文件，首先要是取消不可修改性质： <BR>[root@kapil　/]#　chattr　-i　/etc/inetd.conf <BR>别忘了该后再把它的性质改为不可修改的。 </P><br />
<P>9、TCP_WRAPPERS <BR>使用TCP_WRAPPERS可以使你的系统安全面对外部入侵。最好的策略就是阻止所有的主机（在&#8221;/etc/hosts.deny&#8221;　文件中加入&#8221;ALL:　<A href="mailto:ALL@ALL">ALL@ALL</A>,　PARANOID&#8221;　），然后再在&#8221;/etc/hosts.allow&#8221;　文件中加入所有允许访问的主机列表。 <BR>第一步： <BR>编辑hosts.deny文件（vi　/etc/hosts.deny），加入下面这行 <BR>#　Deny　access　to　everyone.　 <BR>ALL:　<A href="mailto:ALL@ALL">ALL@ALL</A>,　PARANOID <BR>这表明除非该地址包好在允许访问的主机列表中，否则阻塞所有的服务和地址。 <BR>第二步： <BR>编辑hosts.allow文件（vi　/etc/hosts.allow），加入允许访问的主机列表，比如： <BR>ftp:　202.54.15.99　foo.com <BR>202.54.15.99和　foo.com是允许访问ftp服务的ip地址和主机名称。 <BR>第三步： <BR>tcpdchk程序是tepd　wrapper设置检查程序。它用来检查你的tcp　　wrapper设置，并报告发现的潜在的和真实的问题。设置完后，运行下面这个命令： <BR>[Root@kapil　/]#　tcpdchk　 </P><br />
<P>10、禁止系统信息暴露 <BR>当有人远程登陆时，禁止显示系统欢迎信息。你可以通过修改&#8221;/etc/inetd.conf&#8221;文件来达到这个目的。 <BR>把/etc/inetd.conf文件下面这行： <BR>telnet　　stream　　tcp　　　　　nowait　root　　　　/usr/sbin/tcpd　　in.telnetd <BR>修改为: <BR>telnet　　stream　　tcp　　　　　nowait　　root　　　　/usr/sbin/tcpd　　in.telnetd　-h <BR>在最后加&#8221;-h&#8221;可以使当有人登陆时只显示一个login:提示，而不显示系统欢迎信息。 </P><br />
<P>11、修改&#8221;/etc/host.conf&#8221;文件 <BR>&#8220;/etc/host.conf&#8221;说明了如何解析地址。编辑&#8221;/etc/host.conf&#8221;文件（vi　/etc/host.conf），加入下面这行： <BR>#　Lookup　names　via　DNS　first　then　fall　back　to　/etc/hosts.　 <BR>order　bind,hosts　 <BR>#　We　have　machines　with　multiple　IP　addresses.　 <BR>multi　on　 <BR>#　Check　for　IP　address　spoofing.　 <BR>nospoof　on　 <BR>第一项设置首先通过DNS解析IP地址，然后通过hosts文件解析。第二项设置检测是否&#8221;/etc/hosts&#8221;文件中的主机是否拥有多个IP地址（比如有多个以太口网卡）。第三项设置说明要注意对本机未经许可的电子欺骗。 </P><br />
<P>12、使&#8221;/etc/services&#8221;文件免疫 <BR>使&#8221;/etc/services&#8221;文件免疫，防止未经许可的删除或添加服务： <BR>[root@kapil　/]#　chattr　+i　/etc/services </P><br />
<P>13、不允许从不同的控制台进行root登陆 <BR>&#8220;/etc/securetty&#8221;文件允许你定义root用户可以从那个TTY设备登陆。你可以编辑&#8221;/etc/securetty&#8221;文件，再不需要登陆的TTY设备前添加&#8221;#&#8221;标志，来禁止从该TTY设备进行root登陆。 </P><br />
<P>14、禁止任何人通过su命令改变为root用户 <BR>su(Substitute　User替代用户)命令允许你成为系统中其他已存在的用户。如果你不希望任何人通过su命令改变为root用户或对某些用户限制使用su命令，你可以在su配置文件（在&#8221;/etc/pam.d/&#8221;目录下）的开头添加下面两行： <BR>编辑su文件(vi　/etc/pam.d/su)，在开头添加下面两行： <BR>auth　sufficient　/lib/security/pam_rootok.so　debug　 <BR>auth　required　/lib/security/Pam_wheel.so　group=wheel　 <BR>这表明只有&#8221;wheel&#8221;组的成员可以使用su命令成为root用户。你可以把用户添加到&#8221;wheel&#8221;组，以使它可以使用su命令成为root用户。 </P><br />
<P>15、Shell　logging <BR>Bash　shell在&#8221;~/.bash_history&#8221;（&#8221;~/&#8221;表示用户目录）文件中保存了500条使用过的命令，这样可以使你输入使用过的长命令变得容易。每个在系统中拥有账号的用户在他的目录下都有一个&#8221;.bash_history&#8221;文件。bash　shell应该保存少量的命令，并且在每次用户注销时都把这些历史命令删除。 <BR>第一步： <BR>&#8220;/etc/profile&#8221;文件中的&#8221;HISTFILESIZE&#8221;和&#8221;HISTSIZE&#8221;行确定所有用户的&#8221;.bash_history&#8221;文件中可以保存的旧命令条数。强烈建议把把&#8221;/etc/profile&#8221;文件中的&#8221;HISTFILESIZE&#8221;和&#8221;HISTSIZE&#8221;行的值设为一个较小的数，比如30。编辑profile文件（vi　/etc/profile），把下面这行改为： <BR>HISTFILESIZE=30　 <BR>HISTSIZE=30　 <BR>这表示每个用户的&#8221;.bash_history&#8221;文件只可以保存30条旧命令。 <BR>第二步： <BR>网管还应该在&#8221;/etc/skel/.bash_logout&#8221;　文件中添加下面这行&#8221;rm　-f　　$HOME/.bash_history&#8221;　。这样，当用户每次注销时，&#8221;.bash_history&#8221;文件都会被删除。 <BR>编辑.bash_logout文件(vi　/etc/skel/.bash_logout)　，添加下面这行： <BR>rm　-f　$HOME/.bash_history </P><br />
<P>16、禁止Control-Alt-Delete　键盘关闭命令 <BR>在&#8221;/etc/inittab&#8221;　文件中注释掉下面这行（使用#）： <BR>ca::ctrlaltdel:/sbin/shutdown　-t3　-r　now　 <BR>改为： <BR>#ca::ctrlaltdel:/sbin/shutdown　-t3　-r　now　 <BR>为了使这项改动起作用，输入下面这个命令： <BR>[root@kapil　/]#　/sbin/init　q </P><br />
<P>17、给&#8221;/etc/rc.d/init.d&#8221;　下script文件设置权限 <BR>给执行或关闭启动时执行的程序的script文件设置权限。 <BR>[root@kapil/]#　chmod　-R　700　/etc/rc.d/init.d/*　 <BR>这表示只有root才允许读、写、执行该目录下的script文件。 </P><br />
<P>18、隐藏系统信息 <BR>在缺省情况下，当你登陆到linux系统，它会告诉你该linux发行版的名称、版本、内核版本、服务器的名称。对于黑客来说这些信息足够它入侵你的系统了。你应该只给它显示一个&#8221;login:&#8221;提示符。 <BR>第一步： <BR>编辑&#8221;/etc/rc.d/rc.local&#8221;　文件，在下面显示的这些行前加一个&#8221;#&#8221;，把输出信息的命令注释掉。 <BR>#　This　will　overwrite　/etc/issue　at　every　boot.　　So,　make　any　changes　you　 <BR>#　want　to　make　to　/etc/issue　here　or　you　will　lose　them　when　you　reboot.　 <BR>#echo　&#8221;"　&gt;　/etc/issue　 <BR>#echo　&#8221;$R&#8221;　&gt;&gt;　/etc/issue　 <BR>#echo　&#8221;Kernel　$(uname　-r)　on　$a　$(uname　-m)&#8221;　&gt;&gt;　/etc/issue　 <BR>#　 <BR>#cp　-f　/etc/issue　/etc/issue.net　 <BR>#echo　&gt;&gt;　/etc/issue <BR>第二步： <BR>删除&#8221;/etc&#8221;目录下的&#8221;isue.net&#8221;和&#8221;issue&#8221;文件： <BR>[root@kapil　/]#　rm　-f　/etc/issue　 <BR>[root@kapil　/]#　rm　-f　/etc/issue.net　 </P><br />
<P>19、禁止不使用的SUID/SGID程序 <BR>如果一个程序被设置成了SUID　root，那么普通用户就可以以root身份来运行这个程序。网管应尽可能的少使用SUID/SGID　程序，禁止所有不必要的SUID/SGID程序。 <BR>查找root-owned程序中使用&#8217;s&#8217;位的程序： <BR>[root@kapil]#　find　/　-type　f　\(　-perm　-04000　-o　-perm　-02000　\)　\-exec　ls　-lg　{}　\;　 <BR>用下面命令禁止选中的带有&#8217;s&#8217;位的程序： <BR>[root@kapil　/]#　chmod　a-s　[program] </P><br />
<P><BR>根据上面这些安全指导方针设置后，系统管理员就会拥有一个基本安全的系统。上面这些工作有些是个持续的过程，网管要不断进行这些工作，以保持系统的安全性。</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/8.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一些不错的国外linux安全站点</title>
		<link>http://www.linuxsense.org/archives/28.html</link>
		<comments>http://www.linuxsense.org/archives/28.html#comments</comments>
		<pubDate>Sat, 29 Sep 2007 10:48:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux安全]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=28</guid>
		<description><![CDATA[linux安全专家经常光顾的地方，大家可以根据喜好则优选择
http://www.megasecurity.orghttp://www.k-otik.com/ http://www.derkeiler.com/ http://www.backtrace.de/ http://sourceforge.net/ http://lists.netsys.com/ http://www.blackhat.com/ http://www.phenoelit.de/ http://www.hbgary.com/ http://www.immunitysec.com/ http://www.foundstone.com/ http://www.nextgenss.com/ http://www.securiteam.com/ http://packetstormsecurity.org/ http://www.securityportal.com/ http://www.securityfocus.com/ http://www.atstake.com/ http://www.self-evident.com/ http://www.eeye.com/ http://www.insecure.org/ http://www.sans.org/ http://teso.scene.at/ http://www.sqlsecurity.com/ http://www.ussrback.com/ http://www.technotronic.com/ http://www.ntbugtraq.com/ http://defaced.alldas.de/ http://www.incident-response.org/ http://secinf.net/ http://whitehats.com/ http://www.securityflaw.com/bible/ http://lsd-pl.net/ http://mixter.void.ru/ http://www.thehackerschoice.com/ http://www.bugnet.com/ http://www.hackbbs.com/ http://phrack.org/ http://sysinternals.com/ http://project.honeynet.org/ http://www.s0ftpj.org/ http://www.wiretrip.net/ http://www.ietf.org/ http://www.whitecell.org/ http://www.vulnwatch.org/netcat/&#160; Netcathttp://www.insecure.org&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Nmaphttp://winpcap.polito.it/&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; WinPcaphttp://www.sysinternals.com/&#160;&#160;&#160;&#160;&#160; PsToolshttp://www.tamos.com/cv.htm&#160;&#160;&#160;&#160;&#160;&#160; CommView 5.0 Build 452http://www.oxid.it/&#160;&#160; Cain &#38; Abel
]]></description>
			<content:encoded><![CDATA[<p><P>linux安全专家经常光顾的地方，大家可以根据喜好则优选择</P><br />
<P><A href="http://www.megasecurity.org">http://www.megasecurity.org</A><BR><A href="http://www.k-otik.com/">http://www.k-otik.com/</A> <BR><A href="http://www.derkeiler.com/">http://www.derkeiler.com/</A> <BR><A href="http://www.backtrace.de/">http://www.backtrace.de/</A> <BR><A href="http://sourceforge.net/">http://sourceforge.net/</A> <BR><A href="http://lists.netsys.com/">http://lists.netsys.com/</A> <BR><A href="http://www.blackhat.com/">http://www.blackhat.com/</A> <BR><A href="http://www.phenoelit.de/">http://www.phenoelit.de/</A> <BR><A href="http://www.hbgary.com/">http://www.hbgary.com/</A> <BR><A href="http://www.immunitysec.com/">http://www.immunitysec.com/</A> <BR><A href="http://www.foundstone.com/">http://www.foundstone.com/</A> <BR><A href="http://www.nextgenss.com/">http://www.nextgenss.com/</A> <BR><A href="http://www.securiteam.com/">http://www.securiteam.com/</A> <BR><A href="http://packetstormsecurity.org/">http://packetstormsecurity.org/</A> <BR><A href="http://www.securityportal.com/">http://www.securityportal.com/</A> <BR><A href="http://www.securityfocus.com/">http://www.securityfocus.com/</A> <BR><A href="http://www.atstake.com/">http://www.atstake.com/</A> <BR><A href="http://www.self-evident.com/">http://www.self-evident.com/</A> <BR><A href="http://www.eeye.com/">http://www.eeye.com/</A> <BR><A href="http://www.insecure.org/">http://www.insecure.org/</A> <BR><A href="http://www.sans.org/">http://www.sans.org/</A> <BR><A href="http://teso.scene.at/">http://teso.scene.at/</A> <BR><A href="http://www.sqlsecurity.com/">http://www.sqlsecurity.com/</A> <BR><A href="http://www.ussrback.com/">http://www.ussrback.com/</A> <BR><A href="http://www.technotronic.com/">http://www.technotronic.com/</A> <BR><A href="http://www.ntbugtraq.com/">http://www.ntbugtraq.com/</A> <BR><A href="http://defaced.alldas.de/">http://defaced.alldas.de/</A> <BR><A href="http://www.incident-response.org/">http://www.incident-response.org/</A> <BR><A href="http://secinf.net/">http://secinf.net/</A> <BR><A href="http://whitehats.com/">http://whitehats.com/</A> <BR><A href="http://www.securityflaw.com/bible/">http://www.securityflaw.com/bible/</A> <BR><A href="http://lsd-pl.net/">http://lsd-pl.net/</A> <BR><A href="http://mixter.void.ru/">http://mixter.void.ru/</A> <BR><A href="http://www.thehackerschoice.com/">http://www.thehackerschoice.com/</A> <BR><A href="http://www.bugnet.com/">http://www.bugnet.com/</A> <BR><A href="http://www.hackbbs.com/">http://www.hackbbs.com/</A> <BR><A href="http://phrack.org/">http://phrack.org/</A> <BR><A href="http://sysinternals.com/">http://sysinternals.com/</A> <BR><A href="http://project.honeynet.org/">http://project.honeynet.org/</A> <BR><A href="http://www.s0ftpj.org/">http://www.s0ftpj.org/</A> <BR><A href="http://www.wiretrip.net/">http://www.wiretrip.net/</A> <BR><A href="http://www.ietf.org/">http://www.ietf.org/</A> <BR><A href="http://www.whitecell.org/">http://www.whitecell.org/</A> <BR><A href="http://www.vulnwatch.org/netcat/">http://www.vulnwatch.org/netcat/</A>&nbsp; Netcat<BR><A href="http://www.insecure.org">http://www.insecure.org</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nmap<BR><A href="http://winpcap.polito.it/">http://winpcap.polito.it/</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WinPcap<BR><A href="http://www.sysinternals.com/">http://www.sysinternals.com/</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PsTools<BR><A href="http://www.tamos.com/cv.htm">http://www.tamos.com/cv.htm</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CommView 5.0 Build 452<BR><A href="http://www.oxid.it/">http://www.oxid.it/</A>&nbsp;&nbsp; Cain &amp; Abel</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/28.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
