?? 讓你的linux桌面更安全.txt
字號:
關鍵字:Linux Ubuntu 桌面安全 PAX 溢出
好不容易把桌面都移植到ubuntu里來了,雖然有點不適應,但是還是可以接受了。(牢騷、1.4G cpu +512內存跑vista我都可以接受,還有什么是不能接受的。。。)
本文介紹了包子在Linux桌面應用安全方面的一些經驗和心得,主要以ubuntu為主題,并涉及到CentOS和Gentoo等發(fā)行版,相對還是比較通用的,本人學藝不精,無法對pax進行代碼級別的詮釋,不足之處還請各位看官不吝斧正。請關注http://baoz.net 和 http://xsec.org 獲得最新版本。
還有這個文章我只打算做一個HOWTO,告訴我們如何保護自己linux桌面的安全,我并不打算把里面涉及的所有術語和程序都解釋的十分清楚,如果看官您對本文的某些地方有不懂的,可以先google一下。
一、背景
1、為什么選ubuntu因為簡單好用,一裝好,基本什么都配置的差不多了,我們只需要裝個字體什么的,配置一下就可以用了,我在這之前用過 gentoo,無可否認,gentoo是十分優(yōu)秀的發(fā)行版,但我個人覺得不適合我這種愛好升級的懶人,因為我在升級的時候總是出現(xiàn)很多RPWT,雖然大部分問題都可以在 forums.gentoo.org找到答案,這個是gentoo十分優(yōu)秀的地方,他有一個論壇,只要在那里搜索,基本可以找到問題的答案,如果找不到,要么當了小白鼠,要么就是RPWT,gentoo還有一個很好的地方就是我覺得她們比較關心安全,明顯的有一個hardened-gentoo,很不錯,還有他的genkernel,只需要這個命令,他就會自己給你配置內核了,我們需要的就是make install,編譯內核十分方便。而且我很害怕配置X,可能是因為大學的時候剛開始接觸linux的時候被搞怕了吧,設置那什么fonts.conf文件,人都快搞暈了,搞了N久還是沒搞好,不過這個事情也把我導向了學習linux的正途,我個人認為拋棄圖形界面學習linux是最好的,那樣逼著你用 cli,盡可能掌握更多的命令,盡可能更熟悉vi。
2、環(huán)境
IBM R50E 1.4G CPU 512M內存 集成的intel顯卡
ubuntu 6.10
3、要求
讀者必須會使用linux下的編輯器
讀者必須會自己編譯內核
讀者必須知道怎么去掉代碼里的注釋
4、適合人群
關心自己系統(tǒng)安全的linux桌面用戶
注意:近期有RPWT的朋友請慎用,并備份舊內核,本人對下面過程中出現(xiàn)的RPWT和非RPWT而導致的任何意外和非意外都不負有任何連帶責任。
二、基本安全
1、口令安全:不要使用簡單的密碼
2、關閉ssh服務:如果你不需要遠程控制你的系統(tǒng)的話,關閉ssh服務,ubuntu默認是沒有安裝這個服務的。
baoz@laptop:~$ sudo update-rc.d -f ssh remove
Removing any system startup links for /etc/init.d/ssh ...
3、BIOS密碼:不要讓別人用livecd進入你的系統(tǒng)
4、sulogin:ubuntu在這個方面做的很好,單用戶進入系統(tǒng)還是需要密碼的,因為使用的是sulogin,這個已經設置好了的,我們不需要去動,我就是介紹一下 、)
5、用普通用戶登錄:這個ubuntu做的很好,強迫使用普通用戶,裝好系統(tǒng)的時候先給root設置密碼,sudo passwd root 就可以修改root密碼了。
6、防止社會工程攻擊:說白了,社會工程就是欺騙,忽悠,騙人,呵呵,當然這個騙人可能是騙了一個人,或者騙了N個人。
A、騙一個人:比如某人發(fā)給你一個elf程序,說這個程序是怎么怎么怎么的,讓你試試,這個時候,你可千萬不要隨便執(zhí)行,特別是執(zhí)行這個文件需要 root權限的時候,更加不 要執(zhí)行,我們可以先用strings命令查看這個程序里面的一些字符,看看有沒明顯的backdoor password或者bot這樣的字眼。
baoz@laptop:/tmp$ strings unknown.elf | more
/lib/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命令看看這個程序到底對你的系統(tǒng)進行了一些什么操作
baoz@laptop:/tmp$ strace -o aa ./unknown.elf
baoz@laptop:/tmp$ 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跟蹤程序,并且在跟蹤完畢之后重新啟動系統(tǒng)并檢查啟動腳本是否被更改。還是要提醒一下,千萬別用root用戶來跟蹤程序,因為所謂的用strace跟蹤,是要執(zhí)行未知程序一次的。。。。。。還有一個事情要提醒大家的是,如果我們使用file命令查看這個unknown.elf,發(fā)現(xiàn)他不是一般的elf文件,就是他加密了或者壓縮了,那么我們要考慮是否要放棄跟蹤了。
B、騙一票人:社會工程的更高境界,需要一定水平和層次,如何騙一票人呢?大致有幾個辦法:
a、制作一個貌似很好用,很受歡迎的程序,發(fā)布其源代碼,或者代碼根本無法正常編譯,同時發(fā)布其二進制文件,并在其中植入后門。不是我崇洋媚外,我們要特別小心我們中國人玩這一手,為什么要特別小心中國人,因為不少中國人好這一口,并且沒有什么事情中國人做不出來的。說白了,就是當你遇到一個程序,他無法提供代碼或者代碼無法編譯的時候,我們不要用他的elf文件,無論這個程序寫的多好,想想,我們都可以從windows遷移到linux了,可以放棄那么多好用的軟件不用了,難道我不用你這個軟件我就活不下去?呵呵
b、自己制作系統(tǒng)升級鏡像網站,包括CentOS/RHEL的apt/yum和debian/ubuntu的source還有gentoo的 MIRROR我們都要小心,在這些很優(yōu)秀的包管理程序給我們帶來了極大的方便,同時國內很多熱心的朋友充分利用自己的資源給大家提供了國內的升級鏡像,但是我們在升級的過程中必須注意,你升級的軟件很可能由于兩個原因被修改了(鏡像服務器主人故意放置后門和鏡像服務器被入侵,比如openssh程序被加入后門或者apache的默認啟動的模塊被替換),但是在升級的過程中,apt或許只是會給你一個簡單的警告,如果你順手的按了一下Y,你的系統(tǒng)就很可能被植入了后門。下面我們詳細的說說:
CentOS的apt其實還是RPM,我們可以自己打包程序成RPM文件并發(fā)布,安裝的時候系統(tǒng)不會提出特別的警告,所以這個是十分危險的。。。如果你很關心系統(tǒng)安全,建議大家都從官方網站更新程序。
debian/ubuntu系列,純正的apt,安裝的時候有簽名校驗檢查,在安裝和簽名不符合的deb的時候會報警,說到這個我很奇怪,我記得我安裝 ubuntu610之后,我apt-get upgrade,系統(tǒng)竟然報glftp沒通過認證:( 所以當我們apt-get install 或者upgrade的時候,千萬記得小心看,不要隨便按Y。警告大致是這樣“【警告】:下列的軟件包不能通過驗證!”
gentoo系列,通過SYNC下載軟件數(shù)據(jù),通過MIRROR下載軟件包,這兩個東西可以在不同的站點下載,也可以在同一個站點下載。建議大家把 SYNC和MIRROR設置成不同的服務器,這樣在被修改了的軟件包下載回來安裝的時候,校驗就會出錯并拒絕安裝,我印象中至少有MD5和SHA1校驗。這樣使用的話,基本上就很安全了。
c、官方網站被入侵,相關軟件被替換,這個沒什么好說的了,認了吧,呵呵。
三、防止溢出攻擊
1、什么是溢出攻擊
略去N行。。。。。。。。有興趣知道什么是溢出攻擊的朋友可以去google搜索一下。
2、基于linux先天相對比較安全并在我們做了上述的操作之后,我們的ubuntu系統(tǒng)基本上可以對抗物理接觸的攻擊(除非拆你的硬盤。。。。),但是面對遠程的威脅,我們還是需要做一些防范的,我們一起來想想,作為一個桌面機,什么東西給了別人一個遠程進入的口子:
在線交流程序:QQ、MSN、Skype、IRC等
網站瀏覽和下載程序:Firefox、Mail、BT和Emule client等,需要特別注意的是firefox的extention其實也很危險的
本地打開的一些文件:比如pdf、ppt、doc等等
雖然linux很安全,但是我們不排除eva lumaqq gaim 或者xchat這樣的程序有安全方面的問題,其實答案很明顯,我們想想,連apache這種代碼被N個人審核了N次的東西都有安全方面的漏洞,何況是那種或許基本沒有做過專業(yè)安全審核的代碼,我沒有任何鄙視或者詆毀eva和lumaqq作者勞動成果的意思,而且我是他們辛勤勞動的受益者,感謝都來不及,可是這些軟件做的是那么的出色,我們又必須要使用他們,怎么辦呢?有沒一個通用的防溢出攻擊的辦法呢?
3、PAX
pax是一個linux下的的防溢出程序,他主要有不可執(zhí)行(non-exec)和隨機地址(ASLR,Address Space Layout Randomization),就這兩招,基本就可以把大部分溢出攻擊給干掉了,還有一些攻擊方式干不掉,具體內容很多了,有興趣詳細了解pax的朋友可以去pax.grsecurity.org/doc/下面閱讀文檔,說的很詳細的:)現(xiàn)在跟的上內核發(fā)展的防溢出程序也就exec-shield和pax了,exec-shield是redhat搞的,也是以內核補丁的形式出現(xiàn),功能不如pax多,隨機地址功能貌似是沒有的,其他的幾個都停滯了。
A、準備工作
下載最新的pax for linux kernel patch和paxtest
http://www.grsecurity.net/~paxguy1
現(xiàn)在最新的是http://www.grsecurity.net/~paxguy1/pax-linux-2.6.19.2-test7.patch和http://www.grsecurity.net/~paxguy1/paxtest-0.9.7-pre5.tar.gz
B、給內核打上pax補丁,并選擇pax相關部分
root@laptop:/usr/src/linux# patch -p1 < ../pax-linux-2.6.19.2-test7.patch
root@laptop:/usr/src/linux# make menuconfig
Linux Kernel Configuration-->Security options(這里下面的兩個enable全部去掉)-->PaX里,除了Pax Control里的soft mode和MAC system,我們全部都設置為y,就是編譯進內核。
選擇好了的結果大致如下
root@laptop:/usr/src/linux# 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、編譯并安裝新內核
root@laptop:/usr/src/linux# make; make modules; make modules_install; make install
之后修改一下grub配置文件
root@laptop:/usr/src/linux# vi /boot/grub/menu.lst
reboot 祝你好運……
D、使用和設置pax
a、安裝好pax之后,我們利用官方提供的paxtest程序來檢測pax的效果。
先編譯一下paxtest程序,根據(jù)不同的操作系統(tǒng),選擇不同的make參數(shù)。
baoz@laptop:~/kernel/paxtest-0.9.7-pre5$ make
Choose one of the following make targets:
adamantix Adamantix
gentoo Gentoo
openbsd OpenBSD
generic For other Linux distributions
clean Clean up
我們是ubuntu,使用generic參數(shù)編譯就好。
baoz@laptop:~/kernel/paxtest-0.9.7-pre5$ make generic
我們可以在編輯過程中注意到chpax執(zhí)行了下面的操作,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的輸出,等會我們可以對比一下。
baoz@laptop:~/kernel/paxtest-0.9.7-pre5$ ./paxtest blackhat
PaXtest - Copyright(c) 2003,2004 by Peter Busser <peter@adamantix.org>
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 <peter@adamantix.org>
Released under the GNU Public Licence version 2 or later
Mode: blackhat
Linux laptop 2.6.19.2 #11 Fri Jan 26 07:24:00 CST 2007 i686 GNU/Linux
Executable anonymous mapping : Vulnerable
Executable bss : Vulnerable
Executable data : Vulnerable
Executable heap : Vulnerable
Executable stack : Vulnerable
Executable anonymous mapping (mprotect) : Vulnerable
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -