快捷搜索:   nginx

Linux 桌面更安全(2)


Executable anonymous mapping             : Killed
Executable bss                           : Killed
Executable data                          : Killed
Executable heap                          : Killed
Executable stack                         : Killed
Executable anonymous mapping (mprotect) : Killed
Executable bss (mprotect)                : Killed
Executable data (mprotect)               : Killed
Executable heap (mprotect)               : Killed
Executable shared library bss (mprotect) : Killed
Executable shared library data (mprotect): Killed
Executable stack (mprotect)              : Killed
Anonymous mapping randomisation test     : 17 bits (guessed)
Heap randomisation test (ET_EXEC)        : 13 bits (guessed)
Heap randomisation test (ET_DYN)         : 23 bits (guessed)
Main executable randomisation (ET_EXEC) : No randomisation
Main executable randomisation (ET_DYN)   : 15 bits (guessed)
Shared library randomisation test        : 17 bits (guessed)
Stack randomisation test (SEGMEXEC)      : 23 bits (guessed)
Stack randomisation test (PAGEEXEC)      : 23 bits (guessed)
Return to function (strcpy)              : Vulnerable
Return to function (strcpy, RANDEXEC)    : Vulnerable
Return to function (memcpy)              : Vulnerable
Return to function (memcpy, RANDEXEC)    : Vulnerable
Executable shared library bss            : Killed
Executable shared library data           : Killed
Writable text segments                   : Killed

从上面的信息我们可以看到,什么东西是被保护的(killed),什么东西是不被保护的(vulnerable)

b、首先我们要安装打了补丁的binutils
下载bintutils和补丁:
打补丁:
tar xfj binutils-2.17.tar.bz2
cd binutils-2.17/
patch -p1 < ../binutils-2.17-pt-pax-flags-200607012130.patch

安装:
./configure --prefix=/usr; make;sudo make install

c、调试信息
当我们发现以前工作正常的程序现在无法运行的时候,可能就是因为pax拦截了,主要包括java和xine
which java
/usr/lib/jvm/java-1.5.0-sun/bin/java
java
杀死

我们dmesg看看
dmesg
[ 704.026090] PAX: execution attempt in: <anonymous mapping>, 44803000-4482b000 44803000
[ 704.026100] PAX: terminating task: /usr/lib/jvm/java-1.5.0-sun-1.5.0.08/jre/bin/java(java):3431, uid/euid: 1000/1000, PC: 44803040, SP: 58cea3ac
[ 704.026106] PAX: bytes at PC: 55 8b 6c 24 08 53 56 9c 58 50 8b c8 81 f0 00 00 04 00 50 9d
[ 704.026118] PAX: bytes at SP-4: 00000006 49b56d60 49bad3c0 0000000c 58cea3d0 4985ca24 00000006 ffffffff 000000c9 49baeaec 000000f4 58cea4b0 58cea408 4985c6f2 58cea3f8 58cea4b0 000000f4 08069ca0 49b91c4a 49baeaec 58cea418

这样我们基本上可以确认是PaX拦截了。

d、安装paxctl特殊设置
出现上面的问题,给我们的使用带来一些不方便,比如我们要运行lumaqq或者要用xine引擎看电影就出问题了。我们可以使用paxctl程序针对这些 出问题的程序稍微设置一下,给他们点特权。
安装paxctl
sudo apt-get install paxctl
sudo paxctl
PaX control v0.4
Copyright 2004,2005,2006 PaX Team <>

usage: paxctl <options> <files>

options:
       -p: disable PAGEEXEC            -P: enable PAGEEXEC
       -e: disable EMUTRMAP            -E: enable EMUTRMAP
       -m: disable MPROTECT            -M: enable MPROTECT
       -r: disable RANDMMAP            -R: enable RANDMMAP
       -x: disable RANDEXEC            -X: enable RANDEXEC
       -s: disable SEGMEXEC            -S: enable SEGMEXEC

       -v: view flags                  -z: restore default flags
       -q: suppress error messages     -Q: report flags in short format
       -c: convert PT_GNU_STACK into PT_PAX_FLAGS (see manpage!)
       -C: create PT_PAX_FLAGS (see manpage!)

看完之后有点郁闷,paxctl提到了manpage,但他貌似没给我们man page。。。。。没关系,当回小白鼠吧,呵呵。
一般情况下我们把PT_GNU_STACK转换成PT_PAX_FLAGS就可以用paxctl来控制了,但貌似java要Create PT_PAX_FLAGS,没关系了,呵呵
sudo paxctl -c `which java`
file /usr/lib/jvm/java-1.5.0-sun/bin/java does not have a PT_GNU_STACK program header, conversion failed

sudo paxctl -C `which java`
file /usr/lib/jvm/java-1.5.0-sun/bin/java got a new PT_PAX_FLAGS program header

这个时候我们看看java程序的flags
paxctl -v `which java`
PaX control v0.4
Copyright 2004,2005,2006 PaX Team <>

- PaX flags: -------x-e-- [/usr/lib/jvm/java-1.5.0-sun/bin/java]
       RANDEXEC is disabled
       EMUTRAMP is disabled

我们现在修改一下pax flag,去掉mprotect标志
sudo paxctl -m `which java`
paxctl -v `which java`
PaX control v0.4
Copyright 2004,2005,2006 PaX Team <>

- PaX flags: -----m-x-e-- [/usr/lib/jvm/java-1.5.0-sun/bin/java]
       MPROTECT is disabled
       RANDEXEC is disabled
       EMUTRAMP is disabled

现在我们就可以运行java程序了,也可以用lumaqq了,xine我们如法炮制,只要程序运行不到了,我们就可以这样操作,一个一个标志去掉, 如果嫌烦的话,我们直接加 -pemrxs好了。

下面我们针对xchat设置一下,让他达到比较高的级别
sudo paxctl -C `which xchat`
sudo paxctl -v `which xchat`
PaX control v0.4
Copyright 2004,2005,2006 PaX Team <>

- PaX flags: -------x-e-- [/usr/bin/xchat]
       RANDEXEC is disabled
       EMUTRAMP is disabled

设置到最大保护级别:
sudo paxctl -REMRXS `which xchat`
sudo paxctl -v `which xchat`
PaX control v0.4
Copyright 2004,2005,2006 PaX Team <>

- PaX flags: --S-M-X-E-R- [/usr/bin/xchat]
       SEGMEXEC is enabled
       MPROTECT is enabled
       RANDEXEC is enabled
       EMUTRAMP is enabled
       RANDMMAP is enabled

然后我们在konsole里运行xchat,这样我们可以看到错误信息,结果是xchat可以正常运行了,如果出现错误,我们就一个一个标志的去掉,直到 可以运行为止。
还有我们可以查看dmesg来找到错误的信息的 :)

为了给我自己和大家更多的DIY空间,本文就写到这里了,下面的事情大家继续去做 :)

说在最后的话:技术是一个无底洞,我无法保证我上面的方法一定可以让我们的系统百毒不侵,其实要绕过pax的方法肯定是有的(ret2lib攻 击),不过要找到可以利用的远程漏洞并且绕过pax进而本地提权获得root权限,再安装一个2.6内核下的rootkit+backdoor呢?对 linux安全有一定了解的的朋友可以知道,要实现刚才我说的“找到远程可利用漏洞并绕过pax”、“2.6内核本地提权”和“2.6下的 rootkit+ backdoor”这三大难关的难度是十分之高的了,其实在公开这个文章之前,我考虑过一下,如果我发布了,对我有兴趣的朋友是否可以做出有针对性的攻击 呢,后来想想,我多虑了,如果真的有这样的超级牛人对我的系统感兴趣,被黑了也就认了,呵呵。linux不象windows,我们在windows里鬼鬼 祟祟的,自己安装了什么杀毒软件,安装了什么防火墙,安装了什么入侵检测系统,安装了什么完整性检查程序,基本上是不能让别人知道的,因为这样别人就可以 对你进行有针对性的攻击,要知道,在windows下过一个防火墙或者杀毒软件,并不是什么难事,门槛根本不高的,我曾经向一个安全界著名AV人士请教, 他告诉我,即使是杀毒软件,也十分可能遭到溢出攻击,特别是一些自动脱壳脚本,处理的不好就有可能出现问题的,就是说杀毒软件有可能在查杀病毒的时候就被 溢出攻击了,不过貌似这样的漏洞还没有发布出来的,但我们无法肯定这个东西是否存在,还是那句话,技术永远是一个无底洞,只有更安全,没有最安全。

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论