歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 用LIDS增強Linux系統安全

用LIDS增強Linux系統安全

日期:2017/2/27 14:20:46   编辑:更多Linux
  LIDS( Linux入侵偵察系統)是Linux內核補丁和系統管理員工具(lidsadm),它加強了Linus內核。 它在內核中實現了一種安全模式 -- 參考模式以及內核中的Mandatory Access Contro l(命令進入控制)模式。本文將闡述LIDS的功能和如何使用它來建立一個安全的Linux系統。 1. 為什麼選擇LIDS   隨著互連網上Linux越來越受歡迎 ,越來越多現有GNU/LINUX系統上的應用軟件中的安全漏洞被發現。很多程序利用了程序員的粗心,例如緩存溢出、格式化代碼攻擊。當系統安全受到程序的危及,黑客獲得ROOT權限以後,整個系統將被入侵者控制。   由於代碼的開放性,我們可以獲得很多所希望Linux應用程序的原代碼,並且根據我們的需要來修改。所以bug能很容易地被找到,並很快修補。但是當漏洞被揭示後,而系統管理員疏於給漏洞打補丁,從而造成很容易地就被入侵,更糟的是黑客能獲得ROOT SHELL。利用現有的GNU/Linux系統,他為所欲為。這正是LIDS想要解決的問題。   首先看看現有的GNU/Linux系統存在哪些問題。   文件系統未受到保護   系統中的很多重要的文件,例如 /bin/login,一旦黑客入侵後,他可以上傳修改過的l ogin文件來代替/bin/login ,然後他就可以不需要任何登陸名和密碼就登陸系統。這常被稱 為Trojan house。   進程未受到保護   系統上運行的進程是為某些系統功能所服務的,例如HTTPD是一個web服務器來滿足遠程客戶端對於web的需求。作為web服務器系統,保護其進程不被非法終止是很重要的。但是當入侵者獲得了ROOT權限後,我們卻無能為力。   系統管理未受保護   很多系統管理,例如,模塊的裝載/卸載,路由的設置,防火牆的規則,能很容易就被修改,如果用戶的ID是0。所以當入侵者獲得ROOT權限後,就變得很不安全。   超級用戶(root)作為ROOT可能濫用權限   他可以為所欲為。作為ROOT他甚至可以對現有的權限進行修改。   綜上所述,我們發現在現有的Linux系統中的進入控制模式是不足以建立一個安全的Linux系統。我們必須在系統中添加新的模式來解決這些問題。這就是LIDS所要做的。 2. LIDS的特色   Linux入侵偵察系統是Linux內核補丁和系統管理員工具,它加強了內核的安全性。它在內核中實現了參考監聽模式以及Mandatory Access Control(命令進入控制)模式。當它起作用後,選擇文件進入,每一個系統/網絡的管理操作,任何使用權限, raw device, mem和 I/O 進入將可以禁止甚至對於ROOT也一樣。它使用和擴展了系統的功能,在整個系統上綁定控制設置,在內核中添加網絡和文件系統的安全特性,從而加強了安全性。你可以在線調整安全保護,隱藏敏感進程,通過網絡接受安全警告等等。   簡而言之,LIDS提供了保護、偵察、響應的功能,從而是LINUX系統內核中的安全模式得以實現。   2.1 保護   LIDS提供以下的保護 : 保護硬盤上任何類型的重要文件和目錄,任何人包括ROOT都無法改變。能保護重要進程不被終止能防止非法程序的RAW IO 操作。保護硬盤,包括MBR保護,等等。能保護系統中的敏感文件,防止未被授權者(包括ROOT)和未被授權的程序進入。   2.2 偵察   當有人掃描你的主機, LIDS能偵察到並報告系統管理員。 LIDS也可以檢測到系統上任何違法規則的進程。   2.3 響應   當有人違反規則, LIDS會將非法的運作細節記錄到受LIDS保護的系統log文件中。 LIDS還可以將log信息傳到你的信箱中。LIDS也可以馬上關閉與用戶的對話。 3. 建立安全的Linux系統   看完了LIDS特性,讓我們來看看怎麼樣一步步地用LIDS建立安全的系統。   3.1 下載LIDS補丁和相關正式的Linux內核


  可以從LIDS Home,LIDS FTP Home或最近的LIDS Mirror獲得LIDS補丁和系統管理工具。   補丁名稱是lids-x.xx-y.y.y.tar.gz, x.xx代表lids的版本, y.y.y代表Linux內核版本 .例如, lids-0.9.9-2.2.17.tar.gz代表lids 版本是0.9.9 以及相關的內核版本是2.2.17. 。   必須下載相關的內核版本。例如,你下載了lids-0.9.9-2.2.17.tar.gz,那你就應該下 載Linux內核2.2.17的原代碼。可以從Kernel FTP Site或其他鏡象獲得內核原碼。   然後,將內核原碼和LIDS tar解壓.例如,從 www.lids.org得到lids-0.9.9-2.2.17.ta r.gz,從ftp.us.kernel.org得到linux-2.2.17.tar.bz2後: ----------------------------------------------------------- 1. uncompress the Linux kernel source code tree. # cd linux_install_path/ # bzip2 -cd linux-2.2.17.tar.bz2 tar -xvf - 2. uncompress the lids source code and install the lidsadm tool. # cd lids_install_path # tar -zxvf lids-0.9.8-2.2.17.tar.gz -----------------------------------------------------------   3.2 在正式的linux內核上打LIDS補丁   Linux內核原碼打LIDS補丁 ----------------------------------------------------------- # cd linux_install_path/linux # patch -p1 /* link the default source path to lids patched version # rm -rf /usr/src/linux # ln -s linux_install_patch/linux /usr/src/linux   3.3 配置Linux內核 ----------------------------------------------------------- configure the Linux kernel # cd linux # make menUConfig or make xconfig -----------------------------------------------------------   現在,配置Linux內核,按照以下步驟實施: [*] Prompt for development and/or incomplete code/drivers [*] Sysctl support After that, you will find that a new item appear in the bottom of the configura tion menu name "Linux Intrusion Detection System". Entering this menu, turn the [*] Linux Intrusion Detection System support (EXPERIMENTAL) (NEW).   配置LIDS內核以後.退出配置界面,編譯內核。 # make dep # make clean # make bzImage # make modules # make modules_install   3.4 在Linux系統上安裝LIDS和系統管理工具   復制 bzImage 到 /boot/ ,編輯 /etc/lilo.conf ----------------------------------------------------------- # cp arch/i386/boot/bzImage /boot/bzImage-lids-0.9.9-2.2.17 /* build admin tools */ # cd lids-0.9.8-2.2.17/lidsadm-0.9.8/ # make # make install # less /etc/lilo.conf boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 default=linux

image=/boot/vmlinuz-2.2.16-3 label=linux read-only root=/dev/hda2 image=/boot/bzImage-lids-0.9.9-2.2.17 label=dev read-only root=/dev/hda2 -----------------------------------------------------------   運行/sbin/lilo 來安裝新內核 # /sbin/lilo   3.5 配置LIDS系統   在重新啟動以前,必須配置lids系統,使其符合你的安全需要.你可以定義受保護的文件,受保護的進程等等。   缺省情況下,lidsadm將把缺省配置文件安裝到 /etc/lids/。你必須根據自己的需要重 新配置。首先,可以更新缺省lids.conf的inode/dev值。 # /sbin/lidsadm -U   3.6 重新啟動系統   配置完Linux系統後,重新啟動.當lilo出現時,選擇裝載the lids enable kernel。然 後,你就將進入美妙的LIDS世界。   3.7 封裝內核   系統啟動後,不要忘記用lidsadm封裝內核,在最後/etc/rc.local加入以下命令# /sbin/lidsadm -I   3.8 在線管理   封裝完內核後,你的系統就處於LIDS的保護下。可以做一些測試來驗證,如果想改變某些配置,例如修改權限,可以通過輸入密碼方式在線改變lids的安全等級。 # /sbin/lidsadm -S -- -LIDS   改變lids配置屬性後,例如lids.conf,lids.cap,你可以通過以下命令在內核中重新裝 載配置文件 # /sbin/lidsadm -S -- +RELOAD_CONF 4. 配置LIDS系統   4.1 LIDS配置目錄 -- “/etc/lids/”   安裝 lidsadm以後,在/etc/lids/下會產生一個 lids配置目錄,當內核啟動時,配置信 息將被讀入內核中來初始化 LIDS系統。lids.conf 這是用來儲存 LIDS ACLs信息的文件。它包括定義事件進入類型的ACLs.其項目可以用lidsadm來添加或刪除。lids.cap 這個文件包括了系統中所有的權限,可以通過編輯它來配置系統中啟動或禁止的權限。在想要啟動的名稱前設置 "+"或設置 "-"來禁止。安裝系統時, lids.cap 以缺省值存在,應該按照自己的需要改變它。lids.net 這個文件是用來配置通過網絡傳送警告信件的。可以定義 SMTP服務器、端口、信息題目等等。    這一文件需要在配置內核時選擇:   [*] Send security alerts through network (NEW) lids.pw 這是用來儲存由"lidsadm -P"產生的密碼的文件,需要在配置內核時選擇:    [*] Allow switching LIDS protections (NEW)   注意: 如果要改變lids保護等級,你必須在重新啟動內核前運行"lidsadm -P"l.   4.2 保護文件和目錄   首先,要決定哪些文件需要受保護。建議你應該保護系統二進制文件和系統配置文件,例如/usr/,/sbin/,/etc/,/var/log/。   其次,要決定保護文件的方式. LIDS提供四種保護類型:   DENY access to any body(禁止任何人進入)。   這種方式意味著沒有人能夠看見或修改文件或目錄. 最敏感的文件應該配置為DENY。 例如,可以將 /etc/shadow設置為 DENY access to anybody, ------------------------------------------------------- Usage lidsadm -A -o file_to_protected -j DENY # lidsadm -A -o /etc/shadow -j DENY After reboot or RELOAD the configurate files. you can see, # ls /etc/shadow ls: /etc/shadow: No such file or Directory -------------------------------------------------------   然後,你要設置一些可以進入文件的程序,例如,登陸系統時,/bin/login文件需要從 受保護的文件/etc/shadow裡讀取密碼 ,但/etc/shadow不允許任何人進入,所以你應該: ------------------------------------------------------- Usage lidsadm -A -s SUBJECT_PROGRAM -o OBJECT_PROGRAM -j READ/WRITE/APPEND # lidsadm -A -s /bin/login -o /etc/shadow -j READ

-------------------------------------------------------   配置生效後,你可以登陸到系統上但無法進入/etc/shadow。這是MAC (mandatory acce ss control命令進入控制)的一個實例。 Read Only Files(只讀文件)   這種方式意味著沒有人可以改變文件,建議/etc/passwd,/bin/passwd等類似文件可以 采取這種方式。 ------------------------------------------------------- lidsadm -A -o file_to_protect -j READ example, 1. to protect the whole /sbin/ as read-only. # /sbin/lidsadm -A -o /sbin/ -j READ 2. to protect /etc/passwd as read-only # /sbin/lidsadm -A -o /etc/passwd -j READ -------------------------------------------------------   Append Only Files(只能添加文件)   大多此類文件是指系統的log文件,例如 /var/log/message ,/var/log/secure。 文件 只能添加而不能刪除或修改以前的內容。 ------------------------------------------------------ USAGE: lidsadm -A -o filename_to_protect -j APPEND example, 1. to protect the system log files # /sbin/lidsadm -A -o /var/log/message -j APPEND # /sbin/lidsadm -A -o /var/log/secure -j APPEND 2. to protect the apache httpd log files # /sbin/lidsadm -A -o /etc/httpd/logs/ -j APPEND ----------------------------------------------------- WRITE(可寫)   此類型用於定義可以改寫的文件。   Mandatory Access Control in file protection(文件保護中的命令進入控制)   定義哪個項目(程序)可以以哪種方式(READ,APPEND,WRITE)進入哪個目標(文件)。   例如,定義/home/httpd/為DENY to anybody然後讓/usr/sbin/httpd能從目錄中READ。 這樣一來, Web服務器可以正常地作為公用WEB服務器,但在/home/httpd/下的內容和程序是不可見的,也不能被修改。如果入侵者通過httpd的bug獲得了root shell,他即使在root shell下也不能看到文件,即使他可以通過改寫堆棧在httpd服務器中插入危險的代碼,他也 只能讀到/home/httpd下的文件,而不能修改。 ---------------------------------------------------- # lidsadm -A -o /home/httpd -j DENY # lidsadm -A -s /usr/sbin/httpd -o /home/httpd -j READ --------------------------------------------------- 實例   下面是LIDS HOWTO中的一個實例 --------------------------------------------------- lidsadm -Z lidsadm -A -o /boot -j READ lidsadm -A -o /vmlinuz -j READ lidsadm -A -o /lib -j READ lidsadm -A -o /root -j READ lidsadm -A -o /etc -j READ lidsadm -A -o /sbin -j READ lidsadm -A -o /usr/sbin -j READ lidsadm -A -o /bin -j READ lidsadm -A -o /usr/bin -j READ lidsadm -A -o /usr/lib -j READ lidsadm -A -o /var/log -j APPEND ---------------------------------------------------   安裝lidsadm後,在lidsadm包中會有一個樣例lids.conf 存放於/etc/lids/下,你必須 運行 "lidsadm -U"更新 inode/dev值,根據需要重新配置它。 4.3 保護進程   UN-killable process(不可殺進程)   LIDS 可以保護進程當其父程序初始化時(pid=1)[ the process whose parent is init (pid=1)]必須配置權限 (/etc/lids/lids.cap),如下: -29:CAP_INIT_KILL

  hidden process(隱藏進程)   由於進程被隱藏, 所以當進程啟動時,任何人用 "ps"命令或在"/proc"下都無法找到 . -------------------------------------------------- example, lidsadm -A -s /usr/sbin/httpd -t -o CAP_HIDDEN -j INHERIT --------------------------------------------------   4.4 權限保護   Capabilities類似於賦予進程的權限, root方式擁有所有權限,但存在權限綁定設置。 在普通的內核中,當你從綁定設置中刪除一個權限,再也沒有人可以使用它了,直到下次重 新啟動。 (關於普通使用可以參考http://www.netcom.com/ spoon/lcap)。   LIDS修改這一屬性,使你可以任意轉換。進入/proc/sys/kernel/cap_bset被捕獲後引發 安全警報,lidsadm承擔所有這些工作。   可以通過運行lidsadm列出所有的LIDS權限,和每一權限確切的含義。   系統權限配置   系統權限屬性存放於/etc/lids/lids.cap,必須編輯此文件來適應你的需要。   這裡,我們討論其中的兩個屬性:   CAP_SYS_RAWIO 啟用這一權限,我們可以   allow ioperm/iopl and /dev/port access,   allow /dev/mem and /dev/kmem access and   allow raw block devices (/dev/[sh]d??) access   當禁止了這項功能以後,可以使得系統上所有進程失去對於raw device的權限,例如運行lilo。   但是一些進程需要此權限來打開,例如XF86_SVGA, 所以在編譯內核的時候, 使一些程序處於例外狀態。   CAP_NET_ADMIN 這個項目可以得到以下權限 interface configuration administration of IP firewall, masquerading and accounting setting debug option on sockets modification of routing tables setting arbitrary process / process group ownership on sockets binding to any address for transparent proxying setting TOS (type of service) setting promiscuous mode clearing driver statistics multicasting read/write of device-specific registers   出於安全因素,應該禁止此項目來禁止改變網絡配置。當其被禁止後,防火牆規則將不允許被改變。 配置lids.cap   可以在capability name前加 "+"或"-"來啟動或禁止權限。 -------------------------------------------------- ### 0: In a system with the _POSIX_CHOWN_RESTRICTED option defined, this overri des the restriction ### 0: of changing file ownership and group ownership. # -0:CAP_CHOWN ### 1: Override all DAC access, including ACL execute access if _POSIX_ACL is d efined. Excluding ### 1: DAC access covered by CAP_LINUX_IMMUTABLE. # +1:CAP_DAC_OVERRIDE ---------------------------------------------------   以上例子演示了禁止CAP_CHOWN (-),啟動CAP_DAC_OVERRIDE(+),應該仔細檢查lids.c ap文件來決定哪些需要啟動哪些需要禁止。   用capabilities為獨立進程分類   你可以使用capability為獨立進程分類,從而使得進程可以做到一些系統所禁止的事情 。   例如,你可以在/etc/lids/lids.cap下禁止CAP_SYS_RAWIO(-),但你仍然需要使用X服務 ,所以你可以: # lidsadm -A -s /usr/X11R6/bin/XF86_SVGA -t -o CAP_SYS_RAWIO -j INHERIT   使得XF86_SVGA擁有CA_SYS_RAWIO的權限,而其他程序不能獲得CAP_SYS_RAWIO。   封裝內核   啟動內核以後,系統權限要在封裝內核以後才會起作用。你必須將以下命令加入RefHat 系統的/etc/rc.d/rc.local下,或其他系統的啟動初始文件中 #/sbin/lidsadm -I   4.5 網絡安全

  LIDS提供了加強網絡安全的功能。   基於capability的網絡安全   通過capability,可以加強網絡安全性。比如anti snifferring,不能綁定低於1024的 端口,不能改變防火牆和路由器規則。所以,建議仔細閱讀每一項capability.   內核中的掃描檢測器   LIDS提供了一個內核掃描檢測器,用來偵察是否有人在掃描你的系統。這個掃描器可以偵察到half-open scan, SYN stealth port scan, Stealth FIN, Xmas,或是Null scan 等等, 象nmap,satan等工具都能被檢測到。   當raw socket被禁止時,它會起作用。這樣一來,一些基於監聽上的user space detec tor不起作用。並且這一檢測器不使用任何socket,比任何user space detector要安全。   如果想要啟用這項功能,可以在編譯內核的時候選擇。   4.6 入侵響應系統   當LIDS檢測到違反已定義規則時,它可以用以下方式回應。   記錄信息   當有人違反規則, lids_security_log將把信息記錄下來, 記錄也具有anti_logging_ flood的能力,可以在編譯內核時設置。   通過mail服務器記錄信息   LIDS的新功能可以把信息傳輸到你的信箱。你可以在/etc/lids/lids.net下定義郵件服 務器IP,外來郵件地址等等。 樣例 ----------------------------------------------------- MAIL_SWITCH=1 # MAIL_RELAY=hex IP:port # IP11.1 of the machine that will be directly connected by LIDS # for relaying its mails. Port is usually 25, but who knows... MAIL_RELAY=210.73.88.149:25 # MAIL_SOURCE=source machine : # Name of the source machine, used for the ehlo identification. # Note that a bad name here could make the mail relay refuse your # mails. MAIL_SOURCE=lids.chinacluster.com -----------------------------------------------------   此例中,SMTP服務器是210.73.88.149,端口25.郵件資源用於EHLO identification。   控制台的掛起   當用戶違反規則,控制台將關閉用戶的控制台。 看到一個小小的錯誤: Mandatory Access Control應該譯作“強制性訪問控制” 不懂的單詞請訪問: www.dreye.com.cn



  此例中,SMTP服務器是210.73.88.149,端口25.郵件資源用於EHLO identification。   控制台的掛起   當用戶違反規則,控制台將關閉用戶的控制台。 看到一個小小的錯誤: Mandatory Access Control應該譯作“強制性訪問控制” 不懂的單詞請訪問: www.dreye.com.cn



Copyright © Linux教程網 All Rights Reserved