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人士请教, 他告诉我,即使是杀毒软件,也十分可能遭到溢出攻击,特别是一些自动脱壳脚本,处理的不好就有可能出现问题的,就是说杀毒软件有可能在查杀病毒的时候就被 溢出攻击了,不过貌似这样的漏洞还没有发布出来的,但我们无法肯定这个东西是否存在,还是那句话,技术永远是一个无底洞,只有更安全,没有最安全。
- 最新评论