Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104641320
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-03-22 14:11:36



一、背景
1、为什么选ubuntu因为简单好用,一装好,基本什么都配置的差不多了,我们只需要装个字体什么的,配置一下就可以用了,我在这之前用过 gentoo,无可否认,gentoo是十分优秀的发行版,但我个人觉得不适合我这种爱好升级的懒人,因为我在升级的时候总是出现很多RPWT,虽然大部分问题都可以在 forums.gentoo.org找到答案,这个是gentoo十分优秀的地方,他有一个论坛,只要在那里搜索,基本可以找到问题的答案,如果找不到,要么当了小白鼠,要么就是RPWT,gentoo还有一个很好的地方就是我觉得她们比较关心安全,明显的有一个hardened-gentoo,很不错,还有他的genkernel,只需要这个命令,他就会自己给你配置内核了,我们需要的就是make install,编译内核十分方便。而且我很害怕配置X,可能是因为大学的时候刚开始接触linux的时候被搞怕了吧,设置那什么fonts.conf文件,人都快搞晕了,搞了N久还是没搞好,不过这个事情也把我导向了学习linux的正途,我个人认为抛弃图形界面学习linux是最好的,那样逼着你用 cli,尽可能掌握更多的命令,尽可能更熟悉vi。

2、环境
IBM R50E 1.4G CPU 512M内存 集成的intel显卡
ubuntu 6.10

3、要求
读者必须会使用linux下的编辑器
读者必须会自己编译内核
读者必须知道怎么去掉代码里的注释

4、适合人群
关心自己系统安全的linux桌面用户
注意:近期有RPWT的朋友请慎用,并备份旧内核,本人对下面过程中出现的RPWT和非RPWT而导致的任何意外和非意外都不负有任何连带责任。

二、基本安全
1、口令安全:不要使用简单的密码
2、关闭ssh服务:如果你不需要远程控制你的系统的话,关闭ssh服务,ubuntu默认是没有安装这个服务的。
sudo update-rc.d -f ssh remove
Removing any system startup links for /etc/init.d/ssh ...

3、BIOS密码:不要让别人用livecd进入你的系统
4、sulogin:ubuntu在这个方面做的很好,单用户进入系统还是需要密码的,因为使用的是sulogin,这个已经设置好了的,我们不需要去动,我就是介绍一下 、)
5、用普通用户登录:这个ubuntu做的很好,强迫使用普通用户,装好系统的时候先给root设置密码,sudo passwd root 就可以修改root密码了。
6、防止社会工程攻击:说白了,社会工程就是欺骗,忽悠,骗人,呵呵,当然这个骗人可能是骗了一个人,或者骗了N个人。
A、骗一个人:比如某人发给你一个elf程序,说这个程序是怎么怎么怎么的,让你试试,这个时候,你可千万不要随便执行,特别是执行这个文件需要 root权限的时候,更加不 要执行,我们可以先用strings命令查看这个程序里面的一些字符,看看有没明显的backdoor password或者bot这样的字眼。
strings unknown.elf | more
b/ld-linux.so.2
__gmon_start__
libc.so.6
stdout
strerror
snprintf
__strtol_internal
qsort
fgets
memcpy
feof
malloc
optarg
readdir
__stack_chk_fail


如果你很想知道这个程序到底做了什么并且你比较自信的话,你可以使用strace -o aa ./unknown.elf,用strace跟一下,然后用more aa命令看看这个程序到底对你的系统进行了一些什么操作
strace -o aa ./unknown.elf
more aa
execve("./unknown.elf", ["./unknown.elf"], [/* 41 vars */]) = 0
brk(0) = 0x8066260
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4f336000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=90086, ...}) = 0
mmap2(NULL, 90086, PROT_READ, MAP_PRIVATE, 3, 0) = 0x4f320000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)


不过我还是建议在使用strace的时候先用aide之类的程序对我们的HOME目录进行一个校验,或者我们大概看看我们的HOME目录下的bashrc profile之类的程序,因为我们可以防止未知程序修改我们的用户登录脚本。如果你不是十分自信,请在断网的情况下使用strace跟踪程序,并且在跟踪完毕之后重新启动系统并检查启动脚本是否被更改。还是要提醒一下,千万别用root用户来跟踪程序,因为所谓的用strace跟踪,是要执行未知程序一次的。。。。。。还有一个事情要提醒大家的是,如果我们使用file命令查看这个unknown.elf,发现他不是一般的elf文件,就是他加密了或者压缩了,那么我们要考虑是否要放弃跟踪了。

B、骗一票人:社会工程的更高境界,需要一定水平和层次,如何骗一票人呢?大致有几个办法:
a、制作一个貌似很好用,很受欢迎的程序,发布其源代码,或者代码根本无法正常编译,同时发布其二进制文件,并在其中植入后门。不是我崇洋媚外,我们要特别小心我们中国人玩这一手,为什么要特别小心中国人,因为不少中国人好这一口,并且没有什么事情中国人做不出来的。说白了,就是当你遇到一个程序,他无法提供代码或者代码无法编译的时候,我们不要用他的elf文件,无论这个程序写的多好,想想,我们都可以从windows迁移到linux了,可以放弃那么多好用的软件不用了,难道我不用你这个软件我就活不下去?呵呵
b、自己制作系统升级镜像网站,包括CentOS/RHEL的apt/yum和debian/ubuntu的source还有gentoo的 MIRROR我们都要小心,在这些很优秀的包管理程序给我们带来了极大的方便,同时国内很多热心的朋友充分利用自己的资源给大家提供了国内的升级镜像,但是我们在升级的过程中必须注意,你升级的软件很可能由于两个原因被修改了(镜像服务器主人故意放置后门和镜像服务器被入侵,比如openssh程序被加入后门或者apache的默认启动的模块被替换),但是在升级的过程中,apt或许只是会给你一个简单的警告,如果你顺手的按了一下Y,你的系统就很可能被植入了后门。下面我们详细的说说:
CentOS的apt其实还是RPM,我们可以自己打包程序成RPM文件并发布,安装的时候系统不会提出特别的警告,所以这个是十分危险的。。。如果你很关心系统安全,建议大家都从官方网站更新程序。
debian/ubuntu系列,纯正的apt,安装的时候有签名校验检查,在安装和签名不符合的deb的时候会报警,说到这个我很奇怪,我记得我安装 ubuntu610之后,我apt-get upgrade,系统竟然报glftp没通过认证:( 所以当我们apt-get install 或者upgrade的时候,千万记得小心看,不要随便按Y。警告大致是这样“【警告】:下列的软件包不能通过验证!”
gentoo系列,通过SYNC下载软件数据,通过MIRROR下载软件包,这两个东西可以在不同的站点下载,也可以在同一个站点下载。建议大家把 SYNC和MIRROR设置成不同的服务器,这样在被修改了的软件包下载回来安装的时候,校验就会出错并拒绝安装,我印象中至少有MD5和SHA1校验。这样使用的话,基本上就很安全了。
c、官方网站被入侵,相关软件被替换,这个没什么好说的了,认了吧,呵呵。

三、防止溢出攻击
1、什么是溢出攻击
略去N行。。。。。。。。有兴趣知道什么是溢出攻击的朋友可以去google搜索一下。

2、基于linux先天相对比较安全并在我们做了上述的操作之后,我们的ubuntu系统基本上可以对抗物理接触的攻击(除非拆你的硬盘。。。。),但是面对远程的威胁,我们还是需要做一些防范的,我们一起来想想,作为一个桌面机,什么东西给了别人一个远程进入的口子:
在线交流程序:QQ、MSN、Skype、IRC等
网站浏览和下载程序:Firefox、Mail、BT和Emule client等,需要特别注意的是firefox的extention其实也很危险的
本地打开的一些文件:比如pdf、ppt、doc等等
虽然linux很安全,但是我们不排除eva lumaqq gaim 或者xchat这样的程序有安全方面的问题,其实答案很明显,我们想想,连apache这种代码被N个人审核了N次的东西都有安全方面的漏洞,何况是那种或许基本没有做过专业安全审核的代码,我没有任何鄙视或者诋毁eva和lumaqq作者劳动成果的意思,而且我是他们辛勤劳动的受益者,感谢都来不及,可是这些软件做的是那么的出色,我们又必须要使用他们,怎么办呢?有没一个通用的防溢出攻击的办法呢?

3、PAX
pax是一个linux下的的防溢出程序,他主要有不可执行(non-exec)和随机地址(ASLR,Address Space Layout Randomization),就这两招,基本就可以把大部分溢出攻击给干掉了,还有一些攻击方式干不掉,具体内容很多了,有兴趣详细了解pax的朋友可以去pax.grsecurity.org/doc/下面阅读文档,说的很详细的:)现在跟的上内核发展的防溢出程序也就exec-shield和pax了,exec-shield是redhat搞的,也是以内核补丁的形式出现,功能不如pax多,随机地址功能貌似是没有的,其他的几个都停滞了。

A、准备工作
下载最新的pax for linux kernel patch和paxtest
http://www.grsecurity.net/~paxguy1
现在最新的是http://www.grsecurity.net/~paxguy1/pax-linux-2.6.19.2-test7.patchhttp://www.grsecurity.net/~paxguy1/paxtest-0.9.7-pre5.tar.gz

B、给内核打上pax补丁,并选择pax相关部分
nux# patch -p1 < ../pax-linux-2.6.19.2-test7.patch
nux# make menuconfig

Linux Kernel Configuration-->Security options(这里下面的两个enable全部去掉)-->PaX里,除了Pax Control里的soft mode和MAC system,我们全部都设置为y,就是编译进内核。
选择好了的结果大致如下
nux# grep PAX .config
CONFIG_PAX=y
# CONFIG_PAX_SOFTMODE is not set
CONFIG_PAX_EI_PAX=y
CONFIG_PAX_PT_PAX_FLAGS=y
CONFIG_PAX_NO_ACL_FLAGS=y
# CONFIG_PAX_HAVE_ACL_FLAGS is not set
# CONFIG_PAX_HOOK_ACL_FLAGS is not set
CONFIG_PAX_NOEXEC=y
CONFIG_PAX_PAGEEXEC=y
CONFIG_PAX_SEGMEXEC=y
# CONFIG_PAX_DEFAULT_PAGEEXEC is not set
CONFIG_PAX_DEFAULT_SEGMEXEC=y
CONFIG_PAX_EMUTRAMP=y
CONFIG_PAX_MPROTECT=y
CONFIG_PAX_NOELFRELOCS=y
CONFIG_PAX_ASLR=y
CONFIG_PAX_RANDKSTACK=y
CONFIG_PAX_RANDUSTACK=y
CONFIG_PAX_RANDMMAP=y
CONFIG_PAX_MEMORY_SANITIZE=y
CONFIG_PAX_MEMORY_UDEREF=y


C、编译并安装新内核
nux# make; make modules; make modules_install; make install

之后修改一下grub配置文件
nux# vi /boot/grub/menu.lst

reboot 祝你好运……

D、使用和设置pax
a、安装好pax之后,我们利用官方提供的paxtest程序来检测pax的效果。
先编译一下paxtest程序,根据不同的操作系统,选择不同的make参数。
make
Choose one of the following make targets:

adamantix Adamantix
gentoo Gentoo
openbsd OpenBSD
generic For other Linux distributions
clean Clean up


我们是ubuntu,使用generic参数编译就好。
make generic

我们可以在编辑过程中注意到chpax执行了下面的操作,chpax是和pactl一类东西,都是修改文件的pax属性的,为了测试这些程序,给他们加上了一些特殊的属性。
-P enforce paging based non-executable pages
-X randomize ET_EXEC base [ELF only]
-S enforce segmentation based non-executable pages
./chpax -X rettofunc1x
./chpax -X rettofunc2x
./chpax -X getmain1
./chpax -S getstack1
./chpax -P getstack2


我们有两种检测方式kiddie和blackhat模式,顾名思义,就是针对不同的入侵者的检测模式,好像结果都一样,就用黑帽子模式吧 :)
下面是没有PaX的输出,等会我们可以对比一下。
./paxtest blackhat
PaXtest - Copyright(c) 2003,2004 by Peter Busser <>
Released under the GNU Public Licence version 2 or later

Writing output to paxtest.log
It may take a while for the tests to complete
Test results:
PaXtest - Copyright(c) 2003,2004 by Peter Busser <>
Released under

阅读(264) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~