日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

构建LINUX下的入侵检测系统——LIDS 系统管理命令--vlock

發(fā)布時間:2024/4/14 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 构建LINUX下的入侵检测系统——LIDS 系统管理命令--vlock 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

構(gòu)建LINUX下的入侵檢測系統(tǒng)——LIDS?? 系統(tǒng)管理命令--vlock

http://blog.chinaunix.net/uid-306663-id-2440200.html

?

LIDS官方網(wǎng)站:http://lids.luky.org/

?

Who's new

hkbadu
harpo_marx
arthit75
lbcoqkf
kravciak
Who's online

There are currently 0 users and 2 guests online.
LIDS 2.2.3rc3 is released for kernel 2.6.23

Thu, 01/24/2008 - 01:37 — omo ? ?已經(jīng)無更新
lids-2.2.3rc3-2.6.23 which included TPE/NFMark feature is
already available.

You can download it from
http://www.secureos.jp/LIDS-JP/develop/
You must completely re-install lidstools to lidstools-2.2.7.3 also.
(It means you must erase /etc/lids directory and re-make ACL with
new version of lidsconf command.)

Also, now I'm developing lids-2.2.3rc4-2.6.23 which will inclide TDE/Sandbox feature. Stay tuned.

OMO

omo's blog
LIDS 2.2.3rc1 is released for kernel 2.6.21

Thanks to Kazuki Omo , We have this new version for kernel 2.6.21, you can download it from lids-2.2.3rc1-2.6.21.patch and the related lidstools-2.2.7.2.tar.gz

ChangeLog

* moved CAP_PROTECTED/CAP_KILL_PROTECTED to LIDS_CAP_PROTECTED/LIDS_CAP_KILL_PROTECTED.
Then above 2 capabilities syntaxes are changed to lidsconf -A -s "Subject" -o LIDS_CAP_PROTECTED -j ENABLE

Read more
Welcome to the LIDS new site

We are starting a new LIDS site as well as a fresh LIDS software..stay tune.

Cytrun Linux use LIDS

Cytrun Linux https://sourceforge.net/projects/cytrun is based on the Slackware, possesss Kernel 2.6.13 + LIDS, Snort Inline(A modified version of Snort that accepts packets from
iptables). Servers: WEB, EMAIL, SQL, PROXY, SSH, DHCP and DNS, Interface of Remote Administration based on Webmin.

Thanks to Michell L. Garcia, I am autor of the Cytrun Linux.

Syndicate content
Download
補丁名稱是lids-x.xx-y.y.y.tar.gz, x.xx代表lids的版本, y.y.y代表Linux內(nèi)核版本

lidstools-2.2.7.2.tar.gz
lids-2.2.3rc1-2.6.21.patch
Sponsor


?

LIDS的組成
兩個用戶態(tài)工具和一些文件,和一個內(nèi)核補丁
/sbin/目錄 存放LIDSADM命令和LIDSCONF命令

/etc/lids/lids.conf #ACLS配置文件
/etc/lids/lids.cap #LIDS capabilities(功能)配置文件
/etc/lids/lids.pw #LIDS密碼文件
/etc/lids/lids.net # LIDS郵件警告配置文件

?

一、什么是LIDS

? LIDS全稱為Linux Intrusion Detection System,是一種基于LINUX內(nèi)核補丁模式的入侵檢測系統(tǒng),它也是一種基于主機的入侵檢測系統(tǒng)。它集成在LINUX內(nèi)核中,來進一步加強LINUX內(nèi)核的安全性,為LINUX內(nèi)核提供實現(xiàn)一種安全模式、參考模式和強制存取控制模式。

(1)、LIDS的主要功能:

? 1、保護:保護硬盤上任何類型的重要文件和目錄,如/bin、/sbin、/usr/bin、/usr/sbin、/etc/rc.d等目錄和其下的文件,以及系統(tǒng)中的敏感文件,如passwd和shadow文件,防止未被授權(quán)者(包括ROOT)和未被授權(quán)的程序進入,任何人包括ROOT都無法改變,文件可以隱藏。保護重要進程不被終止,任何人包括root也不能殺死進程,而且可以隱藏特定的進程。防止非法程序的RAW IO 操作,保護硬盤,包括MBR保護等等。

2、檢測:集成在內(nèi)核中的端口掃描器,LIDS能檢測到掃描并報告系統(tǒng)管理員。 LIDS還可以檢測到系統(tǒng)上任何違反規(guī)則的進程。

3、響應(yīng):來自內(nèi)核的安全警告,當(dāng)有人違反規(guī)則時, LIDS會在控制臺顯示警告信息,將非法的活動細節(jié)記錄到受LIDS保護的系統(tǒng)log文件中。 LIDS還可以將log信息發(fā)到你的信箱中。LIDS還可以馬上關(guān)閉與用戶的會話。

(2)、在LINUX上應(yīng)用LIDS的必要性。

?? 隨著LINUX進一步的推廣,現(xiàn)在,有很多中小企業(yè)都把自己的重要服務(wù)遷移到LINUX上。借著LINUX系統(tǒng)強大的安全性和較少的成本,架設(shè)在LINUX系統(tǒng)上的各種企業(yè)服務(wù)為這些中小企業(yè)提供了更大的發(fā)展和更強的競爭力。但是,在當(dāng)前網(wǎng)絡(luò)環(huán)境下,隨著黑客技術(shù)的不斷提高,以及黑客數(shù)量的不斷增加,加上黑客工具的不斷推陳出新,網(wǎng)絡(luò)攻擊事件也越來越多。LINUX系統(tǒng)的安全性正在一次次地經(jīng)受著考驗,LINUX系統(tǒng)的安全缺陷也越來越多突現(xiàn)出來。對于這些應(yīng)用LIUNX系統(tǒng)在網(wǎng)絡(luò)中提供企業(yè)相關(guān)業(yè)務(wù)的中小企業(yè)來說,如何保證這些暴露在網(wǎng)絡(luò)中的服務(wù)器數(shù)據(jù)的安全性是一個迫在眉急的問題。雖然,網(wǎng)絡(luò)防火墻能夠阻止大部份的網(wǎng)絡(luò)攻擊,但是,一旦這種攻擊穿透了防火墻,系統(tǒng)上的重要數(shù)據(jù)就會有完全控制的危險。因此,在LINUX系統(tǒng)上布置LIDS是很有必要的。它能夠保證LINUX系統(tǒng)上的重要目錄及文件不被復(fù)制、刪除,重要的服務(wù)不被刪除或停止,不能修改系統(tǒng)登錄方式等等,為LINUX系統(tǒng)數(shù)據(jù)安全提供一種全方位的保護,也可作為防火墻的一種后備保護方式存在。

二、獲取并安裝LIDS補丁包及LIDS工具包

? LIDS是基于開源方式,用戶使用是安全免費的??梢灾苯拥絃IDS官方網(wǎng)站(www.lids.org)上下載,包括LIDS的內(nèi)核補丁包和LIDS工具包。但一定要保證下載的LIDS補丁包與你當(dāng)前所使用的LINUX系統(tǒng)內(nèi)核版本相一致,LIDS工具包可以下載最新版本的,現(xiàn)在的最新版本是:lids-2.2.7.2.tar.gz,LIDS補丁包的最新版本是:lids-2.2.3rc-2.6.21.patch。 打patch

1、????????? 應(yīng)用LIDS內(nèi)核補丁包。

? 現(xiàn)在以上述最新版本的LIDS內(nèi)核為例。將下載的LIDS內(nèi)核補丁包保存到/usr/src下,以根用戶的權(quán)限進入字符模式。現(xiàn)在假設(shè)內(nèi)核在/usr/src/linux下:

?# cd /usr/src/linux

# patch p1 < /usr/src/ lids-2.2.3rc-2.6.21.patch

重新配置此內(nèi)核:

# makemenuconfig

把有關(guān)LIDS的所有項都選中。這樣的話,不僅對于不太熟習(xí)的用戶能省去很多不必要的麻煩,同時,它也不是很大,并不會影響多少系統(tǒng)性能的。

在選擇好后就是重新編譯內(nèi)核:

# make

# make install

?這樣一個加入了LIDS的內(nèi)核就重新編譯好了,但要應(yīng)用LIDS還應(yīng)做相應(yīng)設(shè)置。要使加入了LIDS的新內(nèi)核工作,得重新啟動系統(tǒng)(因為LIDS是一個內(nèi)核補丁,在選擇好后就是重新編譯內(nèi)核。)。

2、安裝LIDS工具包。

現(xiàn)在也以它的最新版本作例子,把下載的LIDS工具包保存的到/home/用戶名(用戶名是你系統(tǒng)上登錄的用戶名)目錄中后,按如下方式安裝:

# cd /home/用戶名

# tar -zxvf lids-2.2.7.2.tar.gz

# cd lids-2.2.7.2

# ./configure

# make

# make install

這樣會安裝LIDSADM和LIDSCONF這兩個工具到/sbin/目錄中,同時會創(chuàng)建一個/etc/lids的目錄,并在此目錄下生成一個默認的配置文件。在使用LIDS前應(yīng)先用“l(fā)idsadm –U”命令更新這個默認的配置文件。

? (注意:如果在編譯LIDS工具包時出現(xiàn)GCC報LIDSTEXT.h文件不存在的錯誤提示,應(yīng)修改LIDS工具包的安裝目錄下的MAKEFILE文件,在在其中的CFLAGS選項中加入“-I/usr/src/linux/include”,然后就可以重新編譯了。)

3、LIDSADM和LIDSCONF命令工具解釋。

(1)、LIDSADM工具及其選項:

??? LIDSADM是LIDS的管理工具單元,可以用它在你的系統(tǒng)中管理LIDS,包括啟用或停用LIDS、封存LIDSADM到內(nèi)核中和查看LIDS狀態(tài)。

使用如下命令可以列出所有可用的選項:

 # lidsadm -h

它會返回下列信息:

......

lidsadm -[s/I] -- [+/-] [LIDS_FLAG] [...]

lidsadm -v

lidsadm -h

命令參數(shù):

-s:開關(guān)某些保護選項時指示應(yīng)提交密碼;

-I:開關(guān)某些保護選項時不提交密碼;

-v:顯示版本;

-V:查看現(xiàn)在LIDS狀態(tài);

-h:列出所有選項。

可用功能,只列出了它的一部分(Availabe capabilities):

CAP_CHOWN:chown/chgrp

CAP_NET_BROADCAST:監(jiān)聽廣播

CAP_NET_ADMIN:接口、防火墻、路由器改變

CAP_IPC_LOCK:鎖定共享內(nèi)存

CAP_SYS_MODULE:插入和移除內(nèi)核模塊

CAP_HIDDEN:隱藏進程

CAP_SYS_RESOURCE:設(shè)置資源限制

CAP_KILL_PROTECTED:殺死保護進程

CAP_PROTECTED:保護進程為單用戶方式

可用的標志(Available flags):

LIDS:禁止或激活本地LIDS

LIDS_CLOBAL:完全禁止或激活LIDS

RELOAD_CONF:重新加載配置文件

(2)、LIDSCONF工具及其選項:

LIDSCONF為LIDS配置訪問控制列表(ACLS)和設(shè)置密碼。

輸入以下命令能顯示所有可用的選項:

 # lidsconf -h

它會返回以下信息:

......

lidsconf -A [-s subject] -o object [-d] [-t from-to] [-i level] -j Accept

lidsconf -D [-s file] [-o file]

lidsconf -E

lidsconf -U

lidsconf -L

lidsconf -P

lidsconf -v

lidsconf -[h/H]

命令參數(shù):

-A:增加一條指定的選項到已有的ACL中

-D:刪除一條指定的選項

-E:刪除所有選項

-U:更新dev/inode序號

-L:列出所有選項

-P:產(chǎn)生用Ripemd-160加密的密碼

-V:顯示版本

-h:顯示幫助

-H:顯示更多的幫助

子對像(subject):

-s [--subject]:指定一個子對像,可以為任何程序,但必須是文件;

目標(object):

-o[object]:可以是文件、目錄或功能(capabilities)和socket名稱。

動作:

-j:它有以下在個參數(shù):

DENY:禁止訪問

READONLY:只讀

APPEND:增加

WRITE:可寫

GRANT:對子對像授與能力

ignore:對設(shè)置的對像忽略所有權(quán)限

disable:禁止一些擴展特性

其它選項:

-d :目標的可執(zhí)行domain

-i:繼承級別

-t:指定從某一時段到某一時段可以進行怎樣的操作

-e:擴展列表

三、應(yīng)用LIDS

? 1、LIDS的啟用與設(shè)置。

?? 首先, 要想使LIDS設(shè)置的ACLS發(fā)揮作用,應(yīng)在系統(tǒng)引導(dǎo)時把LIDS封裝進內(nèi)核中。這樣每次系統(tǒng)啟動到最后階段(啟動最后加載內(nèi)核模塊),此設(shè)置會根據(jù)你的系統(tǒng)上的/etc/lids/lids.cap文件中的內(nèi)容來設(shè)置全局功能,此文件中保存的是你設(shè)置ACLS。設(shè)置封裝內(nèi)核,在你的/etc/rc.d/rc.local文件的未尾加入如下內(nèi)容:

?/sbin/lidsadm –I

在開始應(yīng)用LIDS前,如果在安裝命令時沒有詢問你設(shè)置密碼,那么還應(yīng)為它設(shè)置一個進入終端會話模式的密碼,使用如下命令:

?# lidsconf -P

你將被提示輸入密碼,兩次輸入密碼后,系統(tǒng)將你設(shè)置的密碼保存到/etc/lids/lids.pw文件中,此密碼已通過Ripemd-160加密。設(shè)置了密碼后,如果你想修改ACLS、Capabilities或當(dāng)你開始LIDS會話時,就需要你提交此密碼。你也可以在以后再次通此命令來修改已設(shè)定的密碼,并在修改完成后用以下命令重新更新LIDS的配置文件:(注意:在修改密碼時不會提示輸入舊密碼。)

lidsadm -S -- +RELOAD_CONF

特別要注意的是,在對LIDS做了任何修改后,都應(yīng)使用上述命令重新更新LIDS的配置文件,它將重新加載下列配置文件:

/etc/lids/lids.conf #ACLS配置文件

/etc/lids/lids.cap #LIDS capabilities(功能)配置文件

/etc/lids/lids.pw #LIDS密碼文件

/etc/lids/lids.net # LIDS郵件警告配置文件

然后重新啟動系統(tǒng)服務(wù)使應(yīng)用改變生效。

2、????????? 通過LIDS來保護系統(tǒng)。

?? 首先要明白,在通過LIDS保護的LINUX的系統(tǒng)中,可以通過一個LIDS的自由會話終端模式來修改那些已經(jīng)加入到保護中的數(shù)據(jù),所有的LIDS設(shè)置工作也可在這個自由會話終端中進行。使用如下命令打開一個LIDS終端會話:

# lidsadm -S -- -LIDS

按提示輸入密碼后,就建立了一個lids 自由會話終端,在此終端你可以啟用或停用LIDS和退出此終端。此時,LINUX系統(tǒng)中的任何數(shù)據(jù)都是不受LIDS保護的。在完成對文件或數(shù)據(jù)的修改后,你應(yīng)通過如下命令重新啟用LIDS:

# lidsadm -S -- +LIDS

另外要清楚的是,在一個增加了LIDS的內(nèi)核的系統(tǒng)中,一個叫/etc/lids/lids.cap文件中包括了所有的功能描述列表。每一個功能項前通過使用“+”號來啟用此功能,使用“-”號來禁用此功能,完成設(shè)置后你必須重新加載配置文件。

下面我們就來通過運用這些功能項對要保護的重要數(shù)據(jù)進行設(shè)置。

(1)、保護文件為只讀。

 # lidsconf -A -o /some/file -j READONLY

此命令保證一旦LIDS啟用,任何人都不能修改或刪除此文件。如果你在lids自由會話終端方式下,你就可以修改/some/file指定的文件,只要此分區(qū)不是掛載為只讀方式。應(yīng)用時用實際的文件路徑代替/some/file。

(2)、保護一個目錄為只讀。

 # lidsconf -A -o /some/directory -j READONLY

此命令用保證一旦LIDS啟用,任何人都不能列出或刪除此目錄及其中的內(nèi)容。如果你在自由會話終端方式下,你就可以修改/some/directory目錄,只要分區(qū)不是掛載為只讀方式。例如,你可以設(shè)置保護/etc/目錄為只讀方式:

 lidsconf -A -o /etc -j READONLY

這里要告別注意的是:當(dāng)你設(shè)定/etc目錄為只讀后,當(dāng)你想掛載文件系統(tǒng)時,你應(yīng)該刪除/etc/mtab文件,然后使用它的一個符號連接/proc/mounts。同時,你必須修改你的初始化腳本,使用“-n”選項來設(shè)置任何mount和umount命令。這個選項告訴mount和umount不更新/etc/mtab文件。例如,你發(fā)現(xiàn)在你的初始化腳本中有一行:mount -av -t nonfs,nproc,應(yīng)把它改為:mount -av -n -t nonfs,nproc。

?

(3)、隱藏任何人都看不到的文件或目錄。

 # lidsconf -A -o /some/file_or_directory -j DENY

此設(shè)置將使用任何人甚至root用戶都不能訪問它,如果是一個目錄,那么此目錄下的文件、目錄都將隱藏,文件系統(tǒng)也一樣。

(4)、指定某些特定的程序以只讀方式訪問一些非常敏感的文件。

 比如在系統(tǒng)登錄時要訪問/etc/shadow文件,我可以指定某些程序能在系統(tǒng)認證時使用它,如login、ssh、su和vlock。例如,你可以只允許login以只讀方式訪問/etc/shadow文件:

 # lidsconf -A -s /bin/login -o /etc/shadow -j READONLY

(5)、以根用戶身份啟動一個服務(wù)在指定的端口上運行。

 服務(wù)運行在指定的端口(1024以下)上需要CAP_NET_BIND_SERVICE功能。如果你禁止了此功能在/etc/lids/lids.cap文件中,你就不能以根用戶身份啟動任何一個服務(wù)運行在指定的端口上。你可以授與某個程序有此功能:

# lidsconf -A -s /usr/local/bin/apache -o CAP_NET_BIND_SERVICE 80 -J GRANT

或者在LIDS_GLOBAL被禁止時啟用此服務(wù)。

(6)、在LIDS啟用時,保證X Windows系統(tǒng)能工作。

 X server必須使用CAP_SYS_RAWIO功能才能在LIDS啟用時工作。

?# lidsconf -A -s /path/to /your/x-server -o CAP_SYS_RAWIO -j GRANT

(7)、啟用ssh和scp。

 缺省狀態(tài)下,ssh和scp通過指定的端口創(chuàng)建遠程連接,它需要CAP_NET_BIND_SERVICE功能,因此你可以授與CAP_NET_BIN_SERVICE功能給ssh:

?# lidsconf -A -s /usr/bin/ssh -o CAP_NET_BIN_SERVICE 22 -J GRANT

(8)、設(shè)置限制訪問時間

 例如,只允許用戶從早上8:00到下午6:00這段時間能登錄:

?# lidsconf -A -s /bin/login -o /etc/shadow -t 0800-1800 -j READONLY

你也可以在“-t”選項中使用“!”,即除指定時間外所有時間能做某項工作。

(9)、通過網(wǎng)絡(luò)發(fā)送安全警報。

在/etc/lids/lids.net文件中指定通過網(wǎng)絡(luò)發(fā)送安全警報的接收郵箱。要特別要注意的是:在指定e-mail時在E-MAIL地址的前后不能有任何空格。同時,在修改完后必須重新加載它的配置文件。

這篇文章我已經(jīng)發(fā)給網(wǎng)管員世界雜志刊登了,在這里貼出只是想可能有更多的朋友需要這方面的內(nèi)容。


?

Linux入侵監(jiān)測系統(tǒng)LIDS原理(2)
http://tech.sina.com.cn/s/2008-09-06/1214796394.shtml

LIDS保護數(shù)據(jù)結(jié)構(gòu)

?

   在分析完Linux文件系統(tǒng)后,讓我們來看看LIDS是如何容VFS來保護文件和目錄的。
在/usr/src/Linux/fs/lids.c

struct secure_ino {
unsigned long int ino; /* the inode number */
kdev_t dev; /* the dev number */
int type; /* the file type */
};
  上面的結(jié)構(gòu)用一對來存儲保護文件或目錄的結(jié)點?!皌ype”是用來標明保護結(jié)點文件類型的。

   LIDS有4種類型

   在/usr/src/Linux/include/Linux/fs.h
   #define LIDS_APPEND 1 /* APPEND ONLY FILE */
   #define LIDS_READONLY 2 /* Read Only File */
   #define LIDS_DEVICE 3 /* Protect MBR Writing to device */
   #define LIDS_IGNORE 4 /* Ignore the protection */

   通過secure_ino結(jié)構(gòu),我們能很容易的初使化保護的文件或是在內(nèi)核里執(zhí)行以下函數(shù)。


在/usr/src/Linux/fs/lids.c
int lids_add_inode(unsigned long int inode ,kdev_t dev , int type)
{

if ( last_secure == (LIDS_MAX_INODE-1))
return 0;

secure[last_secure].ino = inode;
secure[last_secure].dev = dev;
secure[last_secure].type = type;

secure[++last_secure].ino = 0;

#ifdef VFS_SECURITY_DEBUG
printk("lids_add_inode : return %d
",last_secure);
#endif
return last_secure;
}
  就象你在上面代碼上可以看到的,給secure_ino加到一個結(jié)點上是非常容易的。被保護的結(jié)點會在系統(tǒng)啟動的時候初使化。初使化程序在/usr/src/Linux/fs/lids.c的init_vfs_security()里。

   現(xiàn)在,讓我們看看LIDS是如何來檢查是否一個結(jié)點已經(jīng)受到保護。


在/usr/src/Linux/fs/open.c
int do_truncate(struct dentry *dentry, unsigned long length)
{
struct inode *inode = dentry->d_inode;
int error;
struct iattr newattrs;

/* Not pretty: "inode->i_size" shouldnt really be "off_t". But it is. */
if ((off_t) length < 0)
return -EINVAL;

#ifdef CONFIG_LIDS
if (lids_load && lids_local_load) {
error = lids_check_base(dentry,LIDS_READONLY);
if (error) {
lids_security_alert("Try to truncate a protected file (dev %d %d,inode %ld)",
MAJOR(dentry->d_inode->i_dev),
MINOR(dentry->d_inode->i_dev),
dentry->d_inode->i_ino);
.....................
  這個是LIDS加到內(nèi)核里做檢測的一個例子。你會看到lids_check_base()是LIDS保護方法的一個核心函數(shù)。

   你可以在LIDS要保護的地方看到很多LIDS保護方法用到lids_check_base()函數(shù),特別是在Linux內(nèi)核的子目錄下。


在/usr/src/Linux/fs/lids.c

int lids_check_base(struct dentry *base, int flag)
{
..................
inode = base->d_inode; /* get the inode number */
parent = base->d_parent; /* get the parent diretory */

.................
----> do {
if ( inode == parent->d_inode)
break;
if ((retval = lids_search_inode(inode))) {
if ( retval == LIDS_IGNORE   
(retval == LIDS_DEVICE && flag != LIDS_DEVICE))
break;
if ( flag == LIDS_READONLY   
( flag == LIDS_APPEND && retval >flag )   
( flag == LIDS_DEVICE && flag == retval )) {
return -EROFS;
}
break;
}
inode = parent->d_inode;
} while( ((parent = parent->d_parent ) != NULL) );

return 0;
}
lids_check_base()會檢查一個給定文件的dentry和它的父目錄是否被保護。
  注意:如果它的父目錄被保護,它下面的文件也會被保護。

   例如,如果“/etc/”被保護,“/etc/passwd”也一樣被保護。

???? 在內(nèi)核保護系統(tǒng)調(diào)用

   為了保護系統(tǒng),LIDS會在一些檢查臨界的系統(tǒng)調(diào)用的時候做檢查。因此,我們可以保護系統(tǒng)調(diào)用和限制文件系統(tǒng)的用戶調(diào)用。

   這些是一些例子,

   open(),open是通過禁止一些權(quán)利來保護文件的打開。 你可以在打開調(diào)用open_namei()調(diào)用的時候LIDS在檢測它。
   mknod(),mknod是用來在指定目錄下保護mknod。
   unlink(), 在內(nèi)核代碼檢查do_unlink()。

?


用LIDS增強Linux系統(tǒng)安全(轉(zhuǎn))
http://blog.itpub.net/10617731/viewspace-961062/

用LIDS增強Linux系統(tǒng)安全(轉(zhuǎn))[@more@]  LIDS( Linux入侵偵察系統(tǒng))是Linux內(nèi)核補丁和系統(tǒng)管理員工具(lidsadm),它加強了Linus內(nèi)核。 它在內(nèi)核中實現(xiàn)了一種安全模式 -- 參考模式以及內(nèi)核中的Mandatory Access Control 模式(MAC系統(tǒng))。本文將闡述LIDS的功能和如何使用它來建立一個安全的Linux系統(tǒng)。


3.1 下載LIDS補丁和相關(guān)正式的Linux內(nèi)核
可以從LIDS Home,LIDS Ftp Home或最近的LIDS Mirror獲得LIDS補丁和系統(tǒng)管理工具。

補丁名稱是lids-x.xx-y.y.y.tar.gz, x.xx代表lids的版本, y.y.y代表Linux內(nèi)核版本
例如, lids-0.9.9-2.2.17.tar.gz代表lids 版本是0.9.9 以及相關(guān)的內(nèi)核版本是2.2.17.。
必須下載相關(guān)的內(nèi)核版本。例如,你下載了lids-0.9.9-2.2.17.tar.gz,那你就應(yīng)該下
載Linux內(nèi)核2.2.17的原代碼??梢詮腒ernel FTP Site或其他鏡象獲得內(nèi)核原碼。

然后,將內(nèi)核原碼和LIDS tar解壓.例如,從 www.lids.org得到lids-0.9.9-2.2.17.tar.gz,從ftp.us.kernel.org得到linux-2.2.17.tar.bz2后


Linux入侵監(jiān)測系統(tǒng)LIDS原理
http://netsecurity.51cto.com/art/200511/12114.htm

一、入侵

隨著Internet上的Linux主機的增加,越來越多的安全漏洞在當(dāng)前的GNU/Linux系統(tǒng)上發(fā)現(xiàn)。你也許在Internet上聽說過 在Linux下發(fā)現(xiàn)bug,它會導(dǎo)致系統(tǒng)很容易的被黑客攻擊。

因為Linux是一個開放代碼的系統(tǒng),漏洞很容易發(fā)現(xiàn),并且也會很快的有補丁出來。但是當(dāng)漏洞沒有公布的時候,并且管理員很懶,沒有去打補丁。黑客就會很容易的攻擊這個系統(tǒng),取得root權(quán)限,在現(xiàn)有的GNU/Linux下,他就可以做任何他想做的事情?,F(xiàn)在你可以問,我們現(xiàn)在到底可以做些什么呢?

1.1 現(xiàn)在的GNU/Linux錯誤在哪里?

超級用戶會濫用職權(quán),他能夠做所有他要做的事情。作為root。他會改變所有的東西。

許多系統(tǒng)文件很容易被更改。這些文件可能是很重要的文件,如/bin/login,如果一個黑客進入,他可以上傳一個login程序來覆蓋/bin/login,這樣他就可以不用登陸名和密碼來登陸系統(tǒng)。但是這些文件不需要經(jīng)常改動,除非你要升級系統(tǒng)。

模塊modules很容易用來中斷內(nèi)核。模塊是為了讓Linux內(nèi)核更模塊話和更高效而設(shè)計的。但是當(dāng)模塊加入到內(nèi)核,它就會成為內(nèi)核的一部分并且能做原始內(nèi)核能做的工作。因此,一些不友好的代碼可以寫成模塊來加入到內(nèi)核里,這些代碼就會重定向系統(tǒng)調(diào)用并且作為一個病毒來運行。

進程是不受保護的,一些進程,如后臺的web服務(wù)器,一直都認為是沒有嚴格保護的程序。因此,他們就會很容易被黑客攻擊。

1.2 LIDS的設(shè)想是什么。

保護重要文件。因為文件很容易被root更改,為什么不嚴格文件操作呢?因此,LIDS改變了文件系統(tǒng)在內(nèi)核里的安全系統(tǒng)調(diào)用。如果某個時候一些人訪問一個文件,他就會進入系統(tǒng)調(diào)用然后我們就可以檢查文件名并且看她們是否被保護。如果它已經(jīng)被保護,我們就可以拒絕這個訪問者的要求。

保護重要的進程。這個和上面的保護進程的想法不是一樣的。當(dāng)一個系統(tǒng)里運行一個進程,它會在/proc 文件系統(tǒng)里有一個用pid作為路徑名的入口。所以,如果你用“ps –axf”你就可以顯示出當(dāng)前運行的進程。你可以問如果保護這些進程。如果你要殺死一個進程的話,首先,你鍵入“ps”來得到進程的PID,然后,你鍵入“kill 〈pid〉”來殺死它。但是,如果我不讓你看到進程,你怎么來殺死這個進程呢?因此,LIDS是用隱藏進程來保護它的。

另外一個重要的方法就是不讓任何人可以殺死進程,包括root用戶。LIDS能夠保護父進程是init(pid=1)的所有進程 。

封裝內(nèi)核。有時候我們需要要把一些必要的模塊加入到內(nèi)核里來使用,另外,我們也要拒絕任何人包括root用戶向內(nèi)核插入模塊。那么如何來平衡這個矛盾的問題呢?我們可以只允許在系統(tǒng)啟動的時候插入模塊,然后我們封裝模塊,在封裝后,內(nèi)核不允許任何人插入模塊到內(nèi)核里。通過這種封裝功能,我們能用它來保護重要的文件,進程,我們可以在系統(tǒng)啟動的時候只允許必要的進程,只改變必要的文件。在封裝內(nèi)核后,我們就不能在對文件有任何的修改。
二、保護文件系統(tǒng)
2.1 保護文件系統(tǒng)是LIDS的重要功能之一。這個功能是在內(nèi)核的VFS(虛擬文件系統(tǒng))層實現(xiàn)的,我們可以保護任何種類的文件系統(tǒng),如EXT2,FAT。
在LIDS,保護的文件按種類分為以下幾種:
只讀的文件或目錄。只讀文件意味著它們不被允許改寫,如,在目錄/usr/bin,/sbin。這些類型的文件大多數(shù)都是二進制系統(tǒng)程序或是系統(tǒng)配置文件,除了在升級系統(tǒng)的時候,我們不需要改變它們。
只可增加文件或目錄。這些文件是那些只可以增加大小的文件。大多數(shù)是系統(tǒng)的日值文件,如在/var/log里的只可增加文件。
額外的文件或目錄,這些文件沒有被保護。一般來說,你想要保護目錄下的所有文件,但是,還需要有一些特殊的文件不要被保護。所以我們可以定義這些文件作為額外的其他的只讀文件。
保護掛載或卸載文件系統(tǒng)。當(dāng)你在啟動的時候掛載文件系統(tǒng)的時候,你可以禁止所有人,甚至是root,去卸載文件系統(tǒng)。你也可以禁止任何人在當(dāng)前文件系統(tǒng)下掛載文件系統(tǒng)來覆蓋它。
2.2 LIDS如何在內(nèi)核保護文件
在這部分,我們會看到一些內(nèi)核的代碼來理解LIDS是如何保護文件的。
Linux文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)程序
首先,我們必須了解Linux的虛擬文件系統(tǒng)。
在Linux里的每一個文件,不管是什么樣子的,都有一個結(jié)點inode數(shù),文件系統(tǒng)提供了以下數(shù)據(jù)結(jié)構(gòu)。

在/usr/src/Linux/include/Linux/fs.h
struct inode {
struct list_head i_hash;
struct list_head i_list;
struct list_head i_dentry;
unsigned long i_ino; ----> inode number.
unsigned int i_count;
kdev_t i_dev; ----> device number.
umode_t i_mode;
nlink_t i_nlink;
uid_t i_uid;
......
}

注意:用來鑒定一個結(jié)點inode。這個意思是你可以用一對來得到一個系統(tǒng)里獨一無二的inode。

在/ur/src/Linux/cinclude/Linux/dcache.h里
struct dentry {
int d_count;
unsigned int d_flags;
struct inode * d_inode; /* Where the name belongs to - NULL is negative */
struct dentry * d_parent; /* parent directory */
struct dentry * d_mounts; /* mount information */
struct dentry * d_covers;
struct list_head d_hash; /* lookup hash list */
struct list_head d_lru; /* d_count = 0 LRU list */
struct list_head d_child; /* child of parent list */
struct list_head d_subdirs; /* our
......
}

dentry是一個目錄文件的入口。通過這個入口,我們可以很容易的在文件的父目錄下移動。
例如,如果你一文件的inode是(struct inode*)file_inode,如果你可以用file_inode->d_entry來得到它的目錄入口并且用file_inode->d_entry->d_parent來得到父目錄的目錄入口。
LIDS保護數(shù)據(jù)結(jié)構(gòu)
在分析完Linux文件系統(tǒng)后,讓我們來看看LIDS是如何容VFS來保護文件和目錄的。

在/usr/src/Linux/fs/lids.c
struct secure_ino {
unsigned long int ino; /* the inode number */
kdev_t dev; /* the dev number */
int type; /* the file type */
};

上面的結(jié)構(gòu)用一對來存儲保護文件或目錄的結(jié)點?!皌ype”是用來標明保護結(jié)點文件類型的。
LIDS有4種類型
在/usr/src/Linux/include/Linux/fs.h
#define LIDS_APPEND 1 /* APPEND ONLY FILE */
#define LIDS_READONLY 2 /* Read Only File */
#define LIDS_DEVICE 3 /* Protect MBR Writing to device */
#define LIDS_IGNORE 4 /* Ignore the protection */
通過secure_ino結(jié)構(gòu),我們能很容易的初使化保護的文件或是在內(nèi)核里執(zhí)行以下函數(shù)。

在/usr/src/Linux/fs/lids.c
int lids_add_inode(unsigned long int inode ,kdev_t dev , int type)
{
if ( last_secure == (LIDS_MAX_INODE-1))
return 0;
secure[last_secure].ino = inode;
secure[last_secure].dev = dev;
secure[last_secure].type = type;
secure[++last_secure].ino = 0;
#ifdef VFS_SECURITY_DEBUG
printk("lids_add_inode : return %d
",last_secure);
#endif
return last_secure;
}

就象你在上面代碼上可以看到的,給secure_ino加到一個結(jié)點上是非常容易的。被保護的結(jié)點會在系統(tǒng)啟動的時候初使化。初使化程序在/usr/src/Linux/fs/lids.c的init_vfs_security()里。
現(xiàn)在,讓我們看看LIDS是如何來檢查是否一個結(jié)點已經(jīng)受到保護。

在/usr/src/Linux/fs/open.c
int do_truncate(struct dentry *dentry, unsigned long length)
{
struct inode *inode = dentry->d_inode;
int error;
struct iattr newattrs;
/* Not pretty: "inode->i_size" shouldnt really be "off_t". But it is. */
if ((off_t) length < 0)
return -EINVAL;
#ifdef CONFIG_LIDS
if (lids_load && lids_local_load) {
error = lids_check_base(dentry,LIDS_READONLY);
if (error) {
lids_security_alert("Try to truncate a protected file (dev %d %d,inode %ld)",
MAJOR(dentry->d_inode->i_dev),
MINOR(dentry->d_inode->i_dev),
dentry->d_inode->i_ino);
.....................

這個是LIDS加到內(nèi)核里做檢測的一個例子。你會看到lids_check_base()是LIDS保護方法的一個核心函數(shù)。
你可以在LIDS要保護的地方看到很多LIDS保護方法用到lids_check_base()函數(shù),特別是在Linux內(nèi)核的子目錄下。

在/usr/src/Linux/fs/lids.c
int lids_check_base(struct dentry *base, int flag)
{
..................
inode = base->d_inode; /* get the inode number */
parent = base->d_parent; /* get the parent diretory */
.................
----> do {
if ( inode == parent->d_inode)
break;
if ((retval = lids_search_inode(inode))) {
if ( retval == LIDS_IGNORE ||
(retval == LIDS_DEVICE && flag != LIDS_DEVICE))
break;
if ( flag == LIDS_READONLY ||
( flag == LIDS_APPEND && retval >flag ) ||
( flag == LIDS_DEVICE && flag == retval )) {
return -EROFS;
}
break;
}
inode = parent->d_inode;
} while( ((parent = parent->d_parent ) != NULL) );
return 0;
}
lids_check_base()會檢查一個給定文件的dentry和它的父目錄是否被保護。

注意:如果它的父目錄被保護,它下面的文件也會被保護。
例如,如果“/etc/”被保護,“/etc/passwd”也一樣被保護。
 在內(nèi)核保護系統(tǒng)調(diào)用
為了保護系統(tǒng),LIDS會在一些檢查臨界的系統(tǒng)調(diào)用的時候做檢查。因此,我們可以保護系統(tǒng)調(diào)用和限制文件系統(tǒng)的用戶調(diào)用。
這些是一些例子,
open(),open是通過禁止一些權(quán)利來保護文件的打開。 你可以在打開調(diào)用open_namei()調(diào)用的時候LIDS在檢測它。
mknod(),mknod是用來在指定目錄下保護mknod。
unlink(), 在內(nèi)核代碼檢查do_unlink()。
三、保護設(shè)備
Linux的設(shè)備會在/dev/目錄下以文件的形式列出,我們可以用上面保護文件的方法來保護設(shè)備。但是在一些情況下,用戶也可以用IO操作來旁路文件系統(tǒng)來讀寫設(shè)備,我們必須注意這個問題。
3.1 設(shè)備,內(nèi)核I/O
在GNU/Linux系統(tǒng)下的設(shè)備會以文件的形式表達,所以我們可以用保護文件系統(tǒng)那樣來保護設(shè)備。
用戶的I/O訪問是通過系統(tǒng)調(diào)用sys_operm和sys_iopl來實現(xiàn)的。你可以看看/usr/src/Linux/arch/i386/kernel/ioport.。這個是要基于系統(tǒng)結(jié)構(gòu)的,要是到其他平臺,就需要注意它們的變化。
3.2 如何用LIDS來保護
大多數(shù)情況下,程序不需要通過在/dev的設(shè)備文件名稱來訪問設(shè)備。但是,一些特殊的程序需要直接訪問,如X Server,這個會寫到/dev/mem和甚至是I/O設(shè)備。我們需要一些額外的東西來保護設(shè)備。LIDS會在配置內(nèi)核的時候來定義這個功能。
CONFIG_LIDS_ALLOW_DEV_MEM,如果你選擇了開啟這個功能,你就可以允許一些特殊程序來訪問/dev/men和/dev/kmen這些內(nèi)核臨界的設(shè)備。如果你想要用內(nèi)核的X Server,選擇這個功能就會在配置內(nèi)核的時候提供整個路徑和文件名。
CONFIG_LIDS_ALLOW_RAW_DISKS,如果選擇這個開啟,你就可以允許一些特殊的程序來訪問物理磁盤。
CONFIG_LIDS_ALLOW_IO_PORTS,如果你選擇了開啟這個功能,你就可以允許一些特殊的程序來訪I/O端口。
當(dāng)系統(tǒng)運行fs/lids.c里的init_vfs_security()的時候初使化就被調(diào)用。

#ifdef CONFIG_LIDS_ALLOW_DEV_MEM
lids_fill_table(allow_dev_mem,&last_dev_mem,LIDS_MAX_ALLOWED,CONFIG_LIDS_DEV_MEM_PROGS);
#endif
#ifdef CONFIG_LIDS_ALLOW_RAW_DISKS
lids_fill_table(allow_raw_disks,&last_raw_disks,LIDS_MAX_ALLOWED,CONFIG_LIDS_RAW_DISKS_PROGS);
#endif
#ifdef CONFIG_LIDS_ALLOW_IO_PORTS
lids_fill_table(allow_io_ports,&last_io_ports,LIDS_MAX_ALLOWED,CONFIG_LIDS_IO_PORTS_PROGS);
#endif

如果一個進程或是程序要直接訪問ip端口或是磁盤設(shè)備,LIDS就會檢查它在數(shù)組 allow_raw_disk,last_io_ports,等)。這個檢查是通過調(diào)用lids_check_base()里的lids_search_inode(inode)來實現(xiàn)的。
如,讓我們看看CONFIG_LIDS_ALLOW_DEV_MEM

/* in lids_search_inode() */
#ifdef CONFIG_LIDS_ALLOW_DEV_MEM
for( i = 0 ; i < last_dev_mem ;i++ ) {
if ( allow_dev_mem[i].ino == ino && allow_dev_mem[i].dev == dev) {
return LIDS_READONLY;
}
}
#endif
#ifdef CONFIG_LIDS_ALLOW_RAW_DISKS

在allow_dev_mem包括了哪一個程序結(jié)點在系統(tǒng)啟動的時候在init_vfs_security()里初使化。用同樣的方法,除了一些特殊程序,我們可以保護設(shè)備,I/O訪問等等。
四、保護重要進程
進程是操作系統(tǒng)的動態(tài)入口。內(nèi)核里有兩個特殊進程,進程ID 0 (swapd) 和進程ID 1(init)。Init進程是在系統(tǒng)啟動的時候所有進程的父進程。
4.1 不可殺死的進程。
就象你可以看到是否有人要奪得root特權(quán)一樣,我們可以很容易的殺死那些該內(nèi)核發(fā)送特別信號的進程。為了殺死一個進程,你必須得到進程的ID,然后用kill命令來殺死它。
系統(tǒng)殺死進程的調(diào)用是kill,是在內(nèi)核里的sys_kill()命令里的調(diào)用。
讓我們看看LIDS的保護代碼

在/usr/src/Linux/kernel/signal.c里
asmlinkage int
sys_kill(int pid, int sig)
{
struct siginfo info;
#ifdef CONFIG_LIDS_INIT_CHILDREN_LOCK pid_t this_pid;
int i;
#ifdef CONFIG_LIDS_ALLOW_KILL_INIT_CHILDREN
if (!(current->flags & PF_KILLINITC))
#endif
if (lids_load && lids_local_load && LIDS_FISSET(lids_flags,LIDS_FLAGS_LOCK_INIT_CHILDREN)) {
this_pid = pid>0?pid:-pid;
for(i=0;i if( this_pid == lids_protected_pid[i]) {
lids_security_alert("Try to kill pid=%d,sig=%d
",pid,sig);
return -EPERM;
}
}
}
#endif
...
}
你可以在內(nèi)核里看到兩個標簽,,CONFIG_LIDS_INIT_CHILDREN_LOCK 和CONFIG_LIDS_ALLOW_KILL_INIT_CHILDREN.

在CONFIG_LIDS_INIT_CHILDREN_LOCK的開啟狀態(tài),LIDS能保護初使的運行程序。如,如果你在系統(tǒng)里運行inetd程序,你可以在隱藏內(nèi)核前運行它,然后,你還可以殺死它。但是一些人如果telnet到你的機器,inetd就會創(chuàng)造子進程來為用戶服務(wù),這個子進程不會被LIDS保護,因為用戶在任何時候退出和殺死程序。
 4.2 隱藏進程
另外一個保護進程的方法就是隱藏進程。當(dāng)一個黑客危機你的系統(tǒng)。他會登陸,然后會看看有沒有一些已知的進程在監(jiān)視它。然后他就殺死它。如果你隱藏了這個功能的進程,黑客就不會知道進程的所有情況并且你可以記錄他在你系統(tǒng)上做的任何事情。
如何隱藏進程
為了隱藏進程,你必須在配置內(nèi)核的時候提供一個完全的路徑名。
當(dāng)內(nèi)核啟動的時候琇IDS會訪問文件結(jié)點到一個叫proc_to_hide[]的結(jié)構(gòu)里。

在include/Linux/sched.h里
#ifdef CONFIG_LIDS_HIDE_PROC
#define PF_HIDDEN 0x04000000 /* Hidden process */
#endif
/* in fs/lids.c */
#ifdef CONFIG_LIDS_HIDE_PROC
struct allowed_ino proc_to_hide[LIDS_MAX_ALLOWED];
int last_hide=0;
#endif
....
/* in fs/lids.c , init_vfs_security(),
fill up the hidden process in proc_to_hide[]
*/
#ifdef CONFIG_LIDS_HIDE_PROC
lids_fill_table(proc_to_hide,&last_hide,LIDS_MAX_ALLOWED,CONFIG_LIDS_HIDDEN_PROC_PATH);
#endif

PF_HIDDEN是否用戶可以用顯示進程的命令(如“ps –a”)來顯示和檢查進程,如果一個進程被LIDS隱藏,當(dāng)他執(zhí)行的時候,進程就會得到一個PF_HIDDEN的屬性。然后,當(dāng)系統(tǒng)輸出系統(tǒng)進程信息到用戶的時候,它就會可以檢查當(dāng)前輸出進程是否有PF_HIDDEN標志。如果發(fā)現(xiàn)了,它就不會輸出這個進程的信息。

在in fs/exec.c
int do_execve(char * filename, char ** argv, char ** envp, struct pt_regs * regs)
{
...
if (retval >= 0) {
#ifdef CONFIG_LIDS_HIDE_PROC
if (lids_search_proc_to_hide(dentry->d_inode))
current->flags |= PF_HIDDEN;
...

因為每一個Linux的進程都有一個在/proc文件系統(tǒng)的入口,我們?yōu)榱穗[藏進程也需要修改proc的文件入口。

在fs/proc/root.c
static struct dentry *proc_root_lookup(struct inode * dir, struct dentry * dentry)
{
...
inode = NULL;
#ifdef CONFIG_LIDS_HIDE_PROC
if ( pid && p && (! ((p->flags & PF_HIDDEN) && lids_load && lids_local_load)) ) {
#else
if (pid && p) {
#endif
unsigned long ino = (pid >> 16) + PROC_PID_INO;
inode = proc_get_inode(dir->i_sb, ino, &proc_pid);
if (!inode)
return ERR_PTR(-EINVAL);
inode->i_flags|=S_IMMUTABLE;
}
...
}

然后如果進程被PF_HIDDEN標記,它就不會在proc文件系統(tǒng)里顯示。

?

?



Linux 指令篇:系統(tǒng)管理--vlock
http://www.jb51.net/linux/vlock.htm
vlock(virtual console lock)

功能說明:鎖住虛擬終端。

語  法:vlock [-achv]

補充說明:執(zhí)行vlock指令可鎖住虛擬終端,避免他人使用。

參  數(shù):
 -a或--all  鎖住所有的終端階段作業(yè),如果您在全屏幕的終端中使用本參數(shù),則會將用鍵盤
 切換終端機的功能一并關(guān)閉。
 -c或--current  鎖住目前的終端階段作業(yè),此為預(yù)設(shè)值。
 -h或--help  在線幫助。
 -v或--version  顯示版本信息。

超強干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的构建LINUX下的入侵检测系统——LIDS 系统管理命令--vlock的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。