Linux系统加固.docx
《Linux系统加固.docx》由会员分享,可在线阅读,更多相关《Linux系统加固.docx(21页珍藏版)》请在冰点文库上搜索。
Linux系统加固
Longjilongjilongjilongjilongjilongji机恐惧感开
通过Linux系统伪装方法加固系统安全
网络上的计算机很容易被黑客利用工具或其它手段进行扫描,以寻找系统中的漏洞,然后再针对漏洞进行攻击。
通过伪装Linux系统,给黑客设置系统假象,可以加大黑客对系统的分析难度,引诱他们步入歧途,从而进一步提高计算机系统的安全性。
下面以RedHatLinux为例,针对几种黑客常用的途径介绍一些常用的Linux系统伪装的方法。
针对HTTP服务
通过分析Web服务器的类型,大致可以推测出操作系统的类型,比如,Windows使用IIS来提供HTTP服务,而Linux中最常见的是Apache。
默认的Apache配置里没有任何信息保护机制,并且允许目录浏览。
通过目录浏览,通常可以获得类似“Apache/1.3.27ServeratPort80”或“Apache/2.0.49(Unix)PHP/4.3.8”的信息。
通过修改配置文件中的ServerTokens参数,可以将Apache的相关信息隐藏起来。
但是,RedHatLinux运行的Apache是编译好的程序,提示信息被编译在程序里,要隐藏这些信息需要修改Apache的源代码,然后,重新编译安装程序,以实现替换里面的提示内容。
以Apache2.0.50为例,编辑ap_release.h文件,修改“#defineAP_SERVER_BASEPRODUCT\"Apache\"”为“#defineAP_SERVER_BASEPRODUCT\"Microsoft-IIS/5.0\"”。
编辑os/unix/os.h文件,修改“#definePLATFORM\"Unix\"”为“#definePLATFORM\"Win32\"”。
修改完毕后,重新编译、安装Apache。
Apache安装完成后,修改httpd.conf配置文件,将“ServerTokensFull”改为“ServerTokensProd”;将“ServerSignatureOn”改为“ServerSignatureOff”,然后存盘退出。
重新启动Apache后,用工具进行扫描,发现提示信息中已经显示操作系统为Windows。
针对FTP服务
通过FTP服务,也可以推测操作系统的类型,比如,Windows下的FTP服务多是Serv-U,而Linux下常用vsftpd、proftpd和pureftpd等软件。
以proftpd为例,修改配置文件proftpd.conf,添加如下内容:
ServerIdenton\"Serv-UFTPServerv5.0forWinSockready...\"
存盘退出后,重新启动proftpd服务,登录到修改了提示信息的FTP服务器进行测试:
C:
\\>ftp192.168.0.1
Connectedto192.168.0.1.
220Serv-UFTPServerv5.0forWinSockready...
User(192.168.0.1:
(none)):
331Passwordrequiredfor(none).
Password:
530Loginincorrect.
Loginfailed.
ftp>quit
221Goodbye.
这样从表面上看,服务器就是一个运行着Serv-U的Windows了。
针对TTL返回值
可以用ping命令去探测一个主机,根据TTL基数可以推测操作系统的类型。
对于一个没有经过任何网关和路由的网络,直接ping对方系统得到的TTL值,被叫做“TTL基数”。
网络中,数据包每经过一个路由器,TTL就会减1,当TTL为0时,这个数据包就会被丢弃。
通常情况下,Windows的TTL的基数是128,而早期的RedHatLinux和Solaris的TTL基数是255,FreeBSD和新版本的RedHatLinux的TTL基数是64。
比如,ping一个RedHat系统,显示如下:
Pinging192.168.0.1with32bytesofdata:
Replyfrom192.168.0.1:
bytes=32time<10msTTL=64
Replyfrom192.168.0.1:
bytes=32time<10msTTL=64
Replyfrom192.168.0.1:
bytes=32time<10msTTL=64
Replyfrom192.168.0.1:
bytes=32time<10msTTL=64
Pingstatisticsfor192.168.0.1:
Packets:
Sent=4,Received=4,Lost=0(0%loss),
Approximateroundtriptimesinmilli-seconds:
Minimum=0ms,Maximum=0ms,Average=0ms
用以下命令修改RedHatLinux的TTL基数为128(本来为64):
#echo128>/proc/sys/net/ipv4/ip_default_ttl
若想使设置永久生效,可以修改/etc/sysctl.conf配置文件,添加如下一行:
net.ipv4.ip_default_ttl=128
保存退出后,再ping192.168.0.1,TTL基数就变为128了。
针对3389端口和22端口
有时通过扫描3389端口和22端口,也可以推测操作系统的类型。
Windows下一般利用TCP协议的3389端口进行远程控制,而Linux可能会用TCP协议的22端口,提供带有加密传输的SSH服务。
为了安全,可以利用iptables来限制22端口的SSH登录,让非授权的IP扫描不到TCP22端口的存在:
#iptables-IINPUT-s!
xx.xx.xx.xx-ptcp--dport22-jDROP
利用iptables,将本机的TCP3389端口转移到其它开有3389端口的计算机上,给Linux系统伪装出一个提供服务的TCP3389端口。
命令如下:
#echo1>/proc/sys/net/ipv4/ip_forward
#iptables-tnat-IPREROUTING-ptcp--dport3389-jDNAT--toxx.xx.xx.xx
#iptables-tnat-IPOSTROUTING-ptcp--dport3389-jMASQUERADE
第一条命令表示允许数据包转发;第二条命令表示转发TCP3389到xx.xx.xx.xx;第三条命令表示使转发数据包实现“双向通路”,给数据包设置一个正确的返回通道。
若想使转发永久生效,可以把以上命令添加到/etc/rc.local文件中。
这样,当黑客扫描服务器所开端口的时候,就找不到22号端口,而是看到一个伪装的3389端口,从而不能正确判断出操作系统的类型。
针对netcraft
netcraft是一个很厉害的扫描引擎,它通过简单的TCP80,就可以知道所测服务器的操作系统、Web服务程序和服务器开机时间(Uptime)等信息。
上面介绍的几种方法对netcraft来说,均不奏效。
针对netcraft,可利用iptables进行系统伪装,使netcraft错误判断操作系统:
#iptables-tnat-IPREROUTING-s195.92.95.0/24-p
tcp--dport80-jDNAT--toxx.xx.xx.xx
#iptables-tnat-IPOSTROUTING-s195.92.95.0/24-p
tcp--dport80-jMASQUERADE
由于通过抓包发现,netcraft的服务器不止一台,所以需要对它所在网段进行转发欺骗处理。
小结
以上方法只能从某种角度上防止和阻挠黑客对系统漏洞的分析,在一定程度上可减少计算机被攻击的可能性,但仍然是“防君子,不防小人”,仅是给大家提供一个活学活用的新思路。
深入分析Linux系统深度安全加固
Linux的系统安全不容忽视.然而系统加固又不是一件很容易的事.本文作者简单介绍了一下Linux系统深度安全加固.
★Linux系统深度安全加固
author:
ayazerodrdos@
Personalweb--
Team'ssite--
注:
以下内容可能不适用于某些场合,请对号入座
1.安装和升级
尽量选用最新的Linux发行版本,安装前拔掉网线,断开物理连接,安装时建议用custom自定义方式安装软件包,数量以少为好,一般来说服务器没有必要安装X-windows,在lilo/grub引导器中加入口令限制,防止能够物理接触的恶意用户因为Linux安装光盘的rescue模式可以跳过这个限制,所以还要给bios加上密码或服务器机箱上锁/var,/home,/usr,/root等目录用独立的物理分区,防止垃圾数据和日志填满硬盘而导致D.o.S攻击.
root账号给予强壮的口令.
安装完毕立即用up2date或apt升级系统软件,有时升级内核也是必要的,因为内核出现问题同样会给攻击者提供机会Apt是DebianGNULinux下的一个强大的包管理工具,也可用于其他版本的Linux.
2.账号
如果系统中的用户比较多,可以编辑/etc/login.defs,更改密码策略
删除系统中不必要帐户和组,
[root@ayazero/]#userdel-rusername
如果不开匿名ftp则可以把ftp账号也删了
最安全的方式是本地维护,可惜不太现实,但还是需要限制root的远程访问,管理员可以用普通账户远程登录,然后su到root,我们可以把使用su的用户加到wheel组来提高安全性
在/etc/pam.d/su文件的头部加入下面两行:
authsufficient/lib/security/pam_rootok.sodebug
authrequired/lib/security/pam_wheel.sogroup=wheel
然后把可以执行su的用户放入wheel组
[root@ayazero/]#usermod-G10admin
编辑/etc/securetty,注释掉所有允许root远程登录的控制台,然后禁止使用所有的控制台程序,[root@ayazero/]#rm-f/etc/security/console.apps/servicename
登录采用加密的ssh,如果管理员只从固定的终端登陆,还应限制合法ssh客户端的范围防止嗅探及中间人攻击
将命令历史纪录归为零,尽可能的隐藏你做过的事情
[root@ayazero/]#unsetHISTFILESIZE
3.服务
最少服务原则,凡是不需要的服务一律注释掉
在/etc/inetd.conf中不需要的服务前加"#",较高版本中已经没有inetd而换成了Xinetd;取消开机自动运行服务,把/etc/rc.d/rc3.d下不需要运行的服务第一个字母大写改称小写,或者由setup命令启动的GUI界面中的service更改
如果你希望简单一点,可以使用/etc/host.allow,/etc/host.deny这两个文件,但是本文计划用iptables防火墙,所以不在此详述.
4.文件系统权限
找出系统中所有含"s"位的程序,把不必要得"s"位去掉,或者把根本不用的直接删除
[root@ayazero/]#find/-typef(-perm-04000-o-perm-02000)-execls-lg{}
[root@ayazero/]#chmoda-sfilename
防止用户滥用及提升权限的可能性
把重要文件加上不可改变属性
[root@ayazero/]#chattr+i/etc/passwd
[root@ayazero/]#chattr+i/etc/shadow
[root@ayazero/]#chattr+i/etc/gshadow
[root@ayazero/]#chattr+i/etc/group
[root@ayazero/]#chattr+i/etc/inetd.conf
[root@ayazero/]#chattr+i/etc/httpd.conf
...............................
具体视需要而定,我怀疑现在的入侵者都知道这个命令,有些exploit溢出后往inetd.conf写一条语句绑定shell在一个端口监听,此时这条命令就起了作用,浅薄的入侵者会以为溢出不成功.
找出系统中没有属主的文件:
[root@ayazero/]#find/-nouser-o-nogroup
找出任何人都有写权限的文件和目录:
[root@ayazero/]#find/-typef(-perm-2-o-perm-20)-execls-lg{}
[root@ayazero/]#find/-typed(-perm-2-o-perm-20)-execls-ldg{}
防止入侵者向其中写入木马语句(诸如一个shell的拷贝)或继承属主权限而非法访问
找出并加固那些历来被入侵者利用的文件,比如.rhosts
编辑/etc/security/limits.conf,加入或改变如下行:
*hardcore0
*hardrss5000
*hardnproc20
5.Banner伪装
入侵者通常通过操作系统,服务及应用程序版本来攻击,漏洞列表和攻击程序也是按此来分类,所以我们有必要作点手脚来加大入侵的难度
更改/etc/issue,因为reboot后重新加载,所以编辑/ect/rc.d/rc.local
#Thiswilloverwrite/etc/issueateveryboot.So,makeanychangesyou
#wanttomaketo/etc/issuehereoryouwilllosethemwhenyoureboot.
#echo"">/etc/issue
#echo"$R">>/etc/issue
#echo"Kernel$(uname-r)on$a$(uname-m)">>/etc/issue
#
#cp-f/etc/issue/etc/
#echo>>/etc/issue
把以上行前的"#"去掉
Apache不回显版本:
apache的配置文件,找到ServerTokens和ServerSignature两个directive,修改默认属性:
#ServerTokensFull
ServerTokensProd<----------
#ServerSignatureOn
ServerSignatureOff<----------
修改uname
拿出uname.c的源码,找到如下行
print_element(PRINT_SYSNAME,name.sysname);//操作系统名如linux
print_element(PRINT_NODENAME,name.nodename);//主机名
print_element(PRINT_RELEASE,name.release);//发行版本,如:
2.4.20-18
print_element(PRINT_VERSION,name.version);//
print_element(PRINT_MACHINE,name.machine);//机器类型,如i686
print_element(PRINT_PROCESSOR,processor);//处理器类型
可以修改为
print_element(PRINT_SYSNAME,"HP-UX");
.......
编译后替换/bin/uname
其他服务及程序的修改可以查看其配置文件或者源码不要改太多,否则会给系统管理带来大麻烦。
6.Iptales防火墙规则
假设我们的服务器server1运行apache,sshd(sshd可以不运行在标准端口,配置文件中能修改)eth0网卡接Internet,eth1连接LAN,管理员在家中拨号登陆到server2(其私用网络IP为192.168.0.12),再登陆server1[roor@ayazeroroot]#iptables-AINPUT-ieth1-s192.168.0.12-ptcp--dport22-jACCEPT为防止IPspoofing的可能,还可以绑定server2的网卡地址:
sh-2.05b#iptables-AINPUT-ieth1-s192.168.0.12--mac-source01:
68:
4B:
91:
CC:
B7-ptcp--dport22-jACCEPT不过好像也很少有入侵者能够做到这种地步,而且没什么利用的价值
[root@ayazeroroot]#iptables-AINPUT-ieth0-ptcp--dport80-jACCEPT
[root@ayazeroroot]#iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT
[root@ayazeroroot]#iptables-AINPUT-jDROP
对攻击有所了解的人都知道“端口重定向+反向管道”的美妙结合来穿越防火墙的例子吧这种技巧已经运用太广,而危害很大为了对抗这种难以防御的攻击,我们必须以牺牲一定的易用性为代价[root@ayazeroroot]#iptables-AOUTPUT-oeth0-ptcp--syn-jDROP以上规则将阻止由内而外的TCP主动连接另外,用tftp或其他客户端反向攫取文件的攻击行为也很普遍,由于tftp以及其他一些工具依赖UDP,所以现在要把它彻底抹煞掉[root@ayazeroroot]#iptables-AOUTPUT-oeth0-pudp-jDROPPS:
在更新系统和调试网络时需要把这两条规则临时去掉因为入侵的本质就是通过文本或图形界面在标准或非标准端口得到目标操作系统的shell,所以,这不仅能阻止反向管道本身,还能免疫很多入侵技巧不过对一般的系统管理员而言,这太苛刻了!
iptables的一些攻击对策
Syn-floodprotection:
[root@ayazerofoo]#iptables-AFORWARD-ptcp--syn-mlimit--limit1/s-jACCEPT
Furtiveportscanner:
[root@ayazerofoo]#iptables-AFORWARD-ptcp--tcp-flagsSYN,ACK,FIN,RSTRST-mlimit--limit1/s-jACCEPT
Pingofdeath:
[root@ayazerofoo]#iptables-AFORWARD-picmp--icmp-typeecho-request-mlimit--limit1/s-jACCEPT
此外,iptables还能配置出让一些扫描行为比如nmap失效的规则,应当注意:
防火墙不是万能的,当一个攻击者足够疯狂时,不要指望你的防火墙能抵挡得住DDoS的洪水。
关于iptables得更多细节,请参阅RustyRussell的PacketFilteringHOWTO
7.完整性校验
tripwire是一个比较有名的工具,它能帮你判断
关于加固
要让加固行动更为成功,您应该:
∙在系统连接到网络之前进行加固,以避免攻击。
∙基于最小权限原则(least-privilegemodel)进行配置:
系统应该为特定的功能只赋予其所需要的权限。
类似地,用户应该只拥有他们所需要的最小限度的权限。
在完成初步计划并准备和执行了最小化安装后(见第2部