Linux下防范缓冲区溢出攻击的系统安全策略
作者:毛辰妈妈 | 来源:互联网 | 2017-11-06 23:10
文章标题:Linux下防范缓冲区溢出攻击的系统安全策略。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类
作者 :薛静锋 缓冲区溢出攻击是目前黑客最常用的攻击手段之一,为了应对不断涌现的缓冲区溢出攻击,我们研究了在Linux系统下防范缓冲区溢出的方法,通过研究,总结了在Linux平台下防范缓冲区溢出攻击的安全策略,这些安全策略可以应用于一般企业内部服务器,包括web服务器、mail服务器、samba服务器、ftp服务器以及proxy服务器等。在实际使用中,我们发现通过这些安全策略的配置能够对缓冲区溢出攻击起到很好的防范措施。 在对计算机系统安全的研究中,有一种系统安全漏洞引起了我们的关注。一方面是由于这种安全漏洞的广泛性--几乎使所有的操作系统平台都受到影响。另一方面,我们为黑客基于此类安全漏洞所编写的攻击程序的隐蔽性和强大威力所吸引。这就是缓冲区溢出技术。它可以使看似安全的,正在运行常规服务(如 DNS、ftpd等)的主机在几秒钟内失去控制权。缓冲区溢出攻击是目前黑客最常用的攻击手段。在当前CERT和CIAC等发布的Internet安全事件报告中, 缓冲区溢出已成为常见的用语。缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能。这样可以让攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。 为了应对不断涌现的缓冲区溢出攻击,我们研究了在Linux系统下防范缓冲区溢出的方法,之所以选择Linux平台,主要有两方面的原因:(1)Linux是一个开放源码的平台,有利于我们在研究的过程中深入技术细节,由于Linux及其上面的大量应用都是基于开放源码,有很多黑客在其上进行了大量的工作,可以说Linux上的网络攻击水平代表了整个网络攻击的最高水平。(2)Linux是一个类Unix系统,同时也是在Internet中大量使用的操作系统平台,选择Linux作为研究缓冲区溢出技术的平台是非常具有代表性的,在Linux平台上取得的经验可以非常容易地移植到其他Unix或者类Unix平台上。 通过研究,我们总结了在Linux平台下防范缓冲区溢出的安全策略,这些安全策略可以应用于一般企业内部服务器,包括web服务器、mail服务器、samba服务器、ftp服务器以及proxy服务器等。我们所总结的这些安全策略如下所示: 1. 不显示系统提示信息 如果不想让远程登录的用户看到系统的提示信息,可以改变"/etc/inetd.conf"文件中的telnet设置: telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h 在末尾加上"-h"参数可以让daemon不显示任何系统信息,只显示登录提示。当然,只有在服务器上装了telnet服务器才有这样做的必要。 2. 处理"rc.local"文件 在默认情况下,当登录装有Linux系统的计算机时,系统会告诉你Linux发行版的名字、版本号、内核版本和服务器名称。这泄露了太多的系统信息。出于安全的考虑,最好只显示一个"Login:"的提示信息。处理方法如下: (1)编辑"/etc/rc.d/rc.local"文件,在下面这些行的前面加上"#": …… # This will overwrite /etc/issue at every boot. So, make any changes you # want to make to /etc/issue here or you will lose them when you reboot. #echo "" > /etc/issue #echo "$R" >> /etc/issue #echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue # #cp -f /etc/issue /etc/issue.net #echo >> /etc/issue …… (2)删除"/etc"目录下的"issue.net"和"issue"文件: [root@snow]# rm -f /etc/issue [root@snow]# rm -f /etc/issue.net "/etc/issue.net"文件是用户从网络登录计算机时(例如:telnet、SSH)看到的登录提示。同样在"/etc"目录下还有一个"issue"文件,是用户从本地登录时看到的提示。这两个文件都是文本文件,可以根据需要改变。但是,如果想删掉这两个文件,必须向上面介绍的那样把"/etc/rc.d/rc.local"脚本中的那些行注释掉,否则每次重新启动的时候,系统又会重新创建这两个文件。 3. 禁止提供finger 服务 在Linux系统下,使用finger命令可以显示本地或远程系统中目前已登录用户的详细信息,黑客可以利用这些信息,增大侵入系统的机会。为了系统的安全,最好禁止提供finger服务,即从/usr/bin下删除finger 命令。如果要保留 finger服务,应将finger文件换名,或修改其权限,使得只允许root用户执行finger命令。 4. 处理"inetd.conf"文件 inetd也叫作"超级服务器",其作用是根据网络请求装入网络程序。"/etc/inetd.conf"文件告诉inetd监听哪些网络端口,为每个端口启动哪个服务。把Linux系统放在任何网络环境中,第一件要做的事就是了解一下服务器到底要提供哪些服务。不需要的那些服务应该被禁止掉,最好卸载掉,这样黑客就少了一些攻击系统的机会。查看"/etc/inetd.conf"文件,了解一下inetd提供哪些服务。用加上注释的方法(在一行的开头加上#号)禁止任何不需要的服务,再给inetd进程发一个SIGHUP信号。具体操作步骤如下: (1)把文件"/etc/inetd.conf"的许可权限改成600,只允许root来读写该文件。 [root@snow]# chmod 600 /etc/inetd.conf (2)确定"/etc/inetd.conf"文件所有者为root。 [root@snow]# stat /etc/inetd.conf 这个命令显示出来的信息应该是: File: "/etc/inetd.conf" Size: 2869 Filetype: Regular File Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Device: 8,6 Inode: 18219 Links: 1 Access: Fri Apr 12 14:28:11 2002(00000.00:10:44) Modify: Wed Apr 10 11:20:22 2002(00002.06:12:16) Change: Wed Apr 10 11:20:22 2002(00002.06:12:16) (3)编辑 /etc/inetd.conf文件(vi /etc/inetd.conf),禁止所有不需要的服务,如:ftp、telnet、 shell、login、exec、talk、ntalk、imap、pop-2、pop-3、finger、auth等。把不需要的服务关闭可以使系统的危险性降低很多。 (4)改变了"inetd.conf"文件之后,要给inetd进程发送一个SIGHUP信号(killall -HUP inetd)。 [root@snow /root]# killall -HUP inetd (5)为了保证"inetd.conf"文件的安全,可以用chattr命令把它设成不可改变的。如下: [root@snow]# chattr +i /etc/inetd.conf 这样可以防止对"inetd.conf"文件的任何修改。一个有"i"属性的文件是不能被改动的(不能删除或重命名,不能创建这个文件的链接,不能向这个文件里写数据)。唯一可以取消这个属性的人只有root。如果要修改"inetd.conf"文件,首先要取消不可修改的属性,如下: [root@snow]# chattr -i /etc/inetd.conf 再改变了"inetd.conf"文件后,需要再把它的属性改为不可改变的。 5. 启动系统的"rc"脚本 /etc/rc.d目录下"rc"开头的文件是用来启动系统的初始化文件的。rc系列文件与Ms- Dos系统下的autoexec.bat很类似。rc的意思是"runtime commands"。它们决定了init进程要启动哪些服务。redhat系统下,这些脚本在/etc/rc.d/rc3.d(如果系统以x为默认启动的话,就是/etc/rc.d/rc5.d)。要在启动时禁止某个服务,只需要把大写的S替换为小写的s,同时,redhat也提供一个工具来帮助你关闭服务,输入/usr/sbin/setup,然后选择"system services",就可以定制系统启动时运行哪些服务。另外一个选择是chkconfig命令,很多linux版本的系统都自带这个工具。脚本名字中的数字是启动的顺序,以大写的K开头的是用来杀死进程的。 如将S50snmpd(SNMP简单网络管理协议,远程用户能从中获得许多系统信息)改为s50snmpd,则系统启动时将不会启动这项服务。 用下列命令察看在关闭启动脚本之前有多少服务在运行:suneagle# ps -eaf|wc -l 有两个非常有用的工具:ps -xau(输出大量的有关系统运行的信息)和netstat -vat(列出所有和网络相关的信息)。运行他们就可以知道系统在提供、运行哪些服务。 6. 处理"services"文件 端口号和标准服务之间的对应关系在RFC1700"Assigned Numbers"中有详细的定义。"/etc/services"文件使得服务器和客户端的程序能够把服务的名字转成端口号,这张表在每一台主机上都存在,其文件名是"/etc/services"。只有"root"用户才有权限修改这个文件,而且在通常情况下这个文件是没有必要修改的,因为这个文件中已经包含了常用的服务所对应的端口号。为了提高安全性,我们可以给这个文件加上保护以避免没有经过授权的删除和改变。为了保护这个文件可以用下面的命令: [root@snow]# chattr +i /etc/services 7. 改变"/etc/rc.d/init.d/"目录下脚本文件的访问许可 通过以下方式改变启动和停止daemon的脚本文件的权限。 [root@snow]# chmod -R 700 /etc/rc.d/init.d/* 这样只有root可以读、写和执行这一脚本,因为一般用户不需要知道脚本文件的内容。 8. 使系统对ping没有反应 防止系统对ping请求做出反应,对于网络安全是很有好处的,因为没人能够ping你的服务器并得到任何反应。TCP/IP协议本身有很多的弱点,黑客可以利用一些技术,把传输正常数据包的通道用来偷偷地传送数据。使你的系统对ping请求没有反应,可以把这个危险减到最小。使用下面的命令: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 运行完这个命令后,系统对ping就没有反应了。可以把这一行加到"/etc/rc.d/rc.local"文件中去,这样当系统重新启动时,该命令就会自动运行。对ping命令没有反应,
推荐阅读
本文详细介绍了SSH(Secure Shell)的基础知识、应用场景以及如何在不同平台上使用SSH进行安全的远程操作。文章还探讨了SSH的高级用法,如免密登录和其他安全增强措施。 ...
[详细]
蜡笔小新 2024-12-09 19:39:05
本文介绍了通过动态端口技术增强Windows远程管理(WinRM)及OpenSSH服务的安全性方案。此方案旨在提高服务器抵御DDoS攻击的能力,并减少因固定端口暴露而带来的安全风险。 ...
[详细]
蜡笔小新 2024-12-08 03:57:53
本文详细介绍如何在Linux操作系统中配置Subclipse,以便通过SSH协议安全访问SVN仓库。不同于常见的Windows配置指南,本文提供了针对Linux用户的详细步骤。 ...
[详细]
蜡笔小新 2024-12-07 20:20:13
本文介绍了如何在Linode服务器上以root用户身份安装Xubuntu,并解决尝试启动图形界面时遇到的'无屏幕找到'错误。 ...
[详细]
蜡笔小新 2024-12-12 13:35:42
本文将详细介绍如何在Linux操作系统中使用Bitnami Redmine安装包快速搭建Redmine项目管理平台,帮助读者轻松完成环境配置。 ...
[详细]
蜡笔小新 2024-12-12 10:58:24
在尝试将SpringBoot与MyBatis框架进行集成时,遇到了一个常见的问题:org.apache.ibatis.builder.BuilderException。此错误通常指示XML配置文件中存在语法或结构上的问题。本文将探讨具体原因及解决方案。 ...
[详细]
蜡笔小新 2024-12-11 11:27:11
本文介绍了在Linux系统(特别是Ubuntu)中遇到 'bash: tailf: command not found' 错误时的正确处理方法,推荐使用 `tail -f` 命令替代 `tailf`。 ...
[详细]
蜡笔小新 2024-12-11 10:21:15
本文详细探讨了虚拟化的基本概念,包括服务器虚拟化、网络虚拟化及其在云计算环境中的应用。特别强调了SDN技术在网络虚拟化和云计算中的关键作用,以及网络虚拟化技术如何提升资源利用效率和管理灵活性。 ...
[详细]
蜡笔小新 2024-12-09 20:01:17
本文将指导您如何利用亚马逊AWS提供的12个月免费试用服务来部署Discuz!论坛。仅需一张信用卡即可轻松注册并开始使用。文章将详细介绍从账号注册到实例创建的具体步骤。 ...
[详细]
蜡笔小新 2024-12-08 08:54:49
本文深入探讨了服务器的主要作用,包括加速访问、增强安全性和绕过访问限制等,并详细介绍了如何正确配置代理服务器。 ...
[详细]
蜡笔小新 2024-12-12 10:17:56
一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景 ...
[详细]
蜡笔小新 2024-12-12 09:34:47
本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ...
[详细]
蜡笔小新 2024-12-11 19:31:21
本文汇总了一系列适合Java和PHP毕业设计的题目,涵盖多个领域,旨在帮助即将完成学业的学生们找到合适的项目方向。 ...
[详细]
蜡笔小新 2024-12-08 15:27:01
本文介绍如何配置三台名为node01、node02和node03的虚拟机,以实现它们之间通过SSH进行无密码登录的过程。包括密钥对的生成、公钥的分发以及最终的登录测试。 ...
[详细]
蜡笔小新 2024-12-06 17:44:53
探索Windows 10平台上一系列免费且对硬件要求不高的单机游戏。尽管Windows 10以其先进的DX12技术著称,但游戏的兼容性和稳定性同样重要。本文将详细介绍几款适合低配置电脑的优秀游戏。 ...
[详细]
蜡笔小新 2024-12-06 13:47:03