linux下的入侵監測系統LIDS原理(2)

2021-12-29 16:33:28 字數 2704 閱讀 6324

五.密封核心

我們需要在系統啟動的時候做一些必要的操作,但是我們也需要在系統執行的時候保護它們。

例如,我們需要象核心裡插入一些需要的模組,但是我們不希望在系統執行的時候插入任何模組,因為那樣會十分危險。如何解決這個問題呢?這裡就有一些密封的方法。我們可以在系統啟動的時候做我們任何想做的事情,然後我們就密封核心。然後,我們就不能做那些以前在沒有密封的時候可以做的事情。用密封的方法,我們可以用模組來解決問題,我們可以在密封前向核心裡插入我們想要的模組,在密封後我們就不可以在核心裡插入或是刪除任何模組。

5.1 用lids密封核心

為了密封核心,我們可以用下面的lids命令

#lidsadm ci -- -cap_***….

它們可以放到指令碼裡讓系統啟動的時候就執行它。具體你們可以看我以前在linuxbyte和chinabyte發表的文章。lids是通過/proc/sys/lids/locks和核心通訊的。

當你密封了核心,lidsadm是呼叫lidsadm.c的lids_init()的呼叫。

#define lids_locks "/proc/sys/lids/locks"

void lids_init(int optind, int argc, char *ar**)

if ((fd=open(lids_locks,o_rdwr)) == -1) *cap_user_header_t;

typedef struct __user_cap_data_struct *cap_user_data_t;

#ifdef __kernel__

/* #define strict_cap_t_typeche

#ifdef strict_cap_t_typechecks

typedef struct kernel_cap_struct kernel_cap_t;

#else

typedef __u32 kernel_cap_t;

#endif

kernel_cap_t cap_bset = cap_full_set;

在kernel_ap_t的每一位都代表乙個許可。cap_bset是capability集的主要部分。它們的值可以通過改變/proc/sys/kernel/cap-bound來改變。

看看上面的檔案,你就會發現一些問題。

/* in include/linux/capability.h */

/* in a system with the [_posix_chown_restricted] option defined, this

overrides the restriction of changing file ownership and group

ownership. */

#define cap_chown 0

/* override all dac access, including acl execute access if

[_posix_acl] is defined. excluding dac access covered by

cap_linux_immutable. */

#define cap_dac_override 1

/* overrides all dac restrictions regarding read and search on files

and directories, including acl restrictions if [_posix_acl] is

defined. excluding dac access covered by cap_linux_immutable. */

#define cap_dac_read_search 2

每乙個任務(程序)在結構task_struct定義了三個成員:cap_effective,cap_inheritable,cap_permitted.我們已經有了乙個用來表明基本capability的變數cap_bset。它們會檢測這個系統並確定那種capability用來控制系統。

在核心實現的大部分系統呼叫會呼叫函式capable() (在kernel/sched.c)。然後會呼叫cap_raised() (在/include/linux/capability.h)。如下:

#ifdef config_lids_allow_switch

#define cap_raised(c, flag) ((cap_t(c) & cap_to_mask(flag)) && ((cap_to_mask(flag) & cap_bset) || (!lids_load) || (!lids_local_load)))

#else

#define cap_raised(c, flag) (cap_t(c) & cap_to_mask(flag) & cap_bset)

#endif

你會看到這裡的cap_bset(一般預設都是1)是很重要的。如果有人在那裡把一些位置0,capability就可以會禁止整個系統。如,18 位的cap_sys_chroot, 如果我們把他置0,表明我們就不能用chroot()了。

如果你看到sys_chroot的源**,你就發現很多問題了:

if (!capable(cap_sys_chroot)) {

goto dput_and_out;

capable()會返回0,在位18為0,這樣chroot就會給使用者返回乙個錯誤資訊。

6.2.在lids裡的capability

lids用capability來限制整個動

linux系統函式 監測系統引數用的

strip python中的strip用於去除字串的首位字元,同理,lstrip用於去除左邊的字元,rstrip用於去除右邊的字元。這三個函式都可傳入乙個引數,指定要去除的首尾字元。如下 thestring saaaay yes no yaaaass print thestring.strip sa...

linux系統使用python監測系統負載指令碼分享

複製 如下 usr bin env python import os def load stat load g f op程式設計客棧en 程式設計客棧proc load g con f.read split f.close load g l g 1 con 0 load g l g 5 con 1 ...

入侵檢測系統和入侵防護系統的區別

2008 08 29 cbsi中國 pchome.net 1.入侵檢測系統 ids ids是英文 intrusion detection systems 的縮寫,中文意思是 入侵檢測系統 專業上講就是依照一定的安全策略,對網路 系統的執行狀況進行監視,盡可能發現各種攻擊企圖 攻擊行為或者攻擊結果,以...