三、保护设备

Linux的设备会在/dev/目录下以文件的形式列出,我们可以用上面保护文件的方法来保护设备。但是在一些情况下,用户也可以用IO操作来旁路文件系统来读写设备,我们必须注意这个问题。

3.1 设备,内核I/O

在GNU/Linux系统下的设备会以文件的形式表达,所以我们可以用保护文件系统那样来保护设备。

用户的I/O访问是通过系统调用sys_operm和sys_iopl来实现的。你可以看看/usr/src/Linux/arch/i386/kernel/ioport.。这个是要基于系统结构的,要是到其他平台,就需要注意它们的变化。

3.2 如何用LIDS来保护

大多数情况下,程序不需要通过在/dev的设备文件名称来访问设备。但是,一些特殊的程序需要直接访问,如X Server,这个会写到/dev/mem和甚至是I/O设备。我们需要一些额外的东西来保护设备。LIDS会在配置内核的时候来定义这个功能。

CONFIG_LIDS_ALLOW_DEV_MEM,如果你选择了开启这个功能,你就可以允许一些特殊程序来访问/dev/men和/dev/kmen这些内核临界的设备。如果你想要用内核的X Server,选择这个功能就会在配置内核的时候提供整个路径和文件名。

CONFIG_LIDS_ALLOW_RAW_DISKS,如果选择这个开启,你就可以允许一些特殊的程序来访问物理磁盘。

CONFIG_LIDS_ALLOW_IO_PORTS,如果你选择了开启这个功能,你就可以允许一些特殊的程序来访I/O端口。

当系统运行fs/lids.c里的init_vfs_security()的时候初使化就被调用。

#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端口或是磁盘设备,LIDS就会检查它在数组 allow_raw_disk,last_io_ports,等)。这个检查是通过调用lids_check_base()里的lids_search_inode(inode)来实现的。

如,让我们看看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包括了哪一个程序结点在系统启动的时候在init_vfs_security()里初使化。用同样的方法,除了一些特殊程序,我们可以保护设备,I/O访问等等。

四、保护重要进程

进程是操作系统的动态入口。内核里有两个特殊进程,进程ID 0 (swapd) 和进程ID 1(init)。Init进程是在系统启动的时候所有进程的父进程。

4.1 不可杀死的进程。

就象你可以看到是否有人要夺得root特权一样,我们可以很容易的杀死那些该内核发送特别信号的进程。为了杀死一个进程,你必须得到进程的ID,然后用kill命令来杀死它。

系统杀死进程的调用是kill,是在内核里的sys_kill()命令里的调用。

让我们看看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

...

}

你可以在内核里看到两个标签,,CONFIG_LIDS_INIT_CHILDREN_LOCK 和CONFIG_LIDS_ALLOW_KILL_INIT_CHILDREN.

在CONFIG_LIDS_INIT_CHILDREN_LOCK的开启状态,LIDS能保护初使的运行程序。如,如果你在系统里运行inetd程序,你可以在隐藏内核前运行它,然后,你还可以杀死它。但是一些人如果telnet到你的机器,inetd就会创造子进程来为用户服务,这个子进程不会被LIDS保护,因为用户在任何时候退出和杀死程序。

linux lids pdf,Linux入侵监测系统LIDS原理(3)相关推荐

  1. 无线测温在线监测系统工作原理与产品选型

     摘要:本文首先介绍了无线测温在线监测系统的基本工作原理以及软硬件组成,重点介绍了在线监测的无线测温技术特点.在此研究基础上,探讨了无线测温在线监测系统在实际工作场景中的应用案例,证明了其在温度检测方 ...

  2. TOOM舆情监测系统需求分析,舆情监测系统的原理是什么?

    舆情监测系统是指一种针对特定主题或关键词进行全网信息监测.挖掘和分析的系统,其目的在于了解公众对某一特定事件.议题.品牌等的态度和情感,以帮助决策者做出更明智的决策.下面从多个角度详细分析舆情监测系统 ...

  3. 电气设备绝缘在线监测系统的原理

       摘要:在线监测是控制好电气设备绝缘的重要方式,为电力系统稳定奠定重要基础.在线监测电气设备时,要利用检测技术促进电力系统运行效率提升,让电气设备在具体工作过程中发挥更大作用.本次研究中主要分析了 ...

  4. linux安全pdf,linux系统安全加固.pdf

    通用 linux 系统安全加固手册 系统安全加固手册 1 帐户安全配置要求 1 帐户安全配置要求 1.1 创建/etc/shadow 影子口令文件 1.1 创建/etc/shadow 影子口令文件 配 ...

  5. linux优化pdf,linux系统安全和优化.pdf

    crookoo 于 2012-05-06 03:42:36发表: 好东西啊 dayed 于 2012-03-25 11:30:45发表: linux系统安全和优化 topcloud 于 2012-03 ...

  6. linux存储pdf伟岸_Linux 文件恢复的原理

    inode 和 block 首先简单介绍一下 Linux 文件系统的最基本单元:inode.inode 译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份 ...

  7. linux v4l2 pdf,linux V4L2编程

    前言:目前正在忙于ARM平台的Linux应用程序的开发(其实是刚刚起步学习啦).底层的东西不用考虑了,开发板子提供了NAND Bootloader,和Linux 2.6的源码,而且都编译好了.自己编译 ...

  8. linux FHS pdf,linux FHS(Filesystem Hierarchy Standard)

    文件系统层次标准(Filesystem Hierarchy Standard,FHS):规范了在根目录下各个主要目录应该放什么样的文件. linux的目录配置:根据FHS定义,每个目录内应该放置的文件 ...

  9. Linux -- 利用IPS(入侵防御系统) 构建企业Web安全防护网

    一.IPS系统简介 (应用层上应用) 防火墙只在网络层上应用,IPS 和防火墙相比,检测及过滤功能更为强大,它通过串联在网络主干线路上,对防火 墙所不能过滤的攻击进行过滤.这样一个两级的过滤模式,可以 ...

最新文章

  1. 一套就够了!室内+室外激光SLAM关键算法讲解与工程实现(源码和数据开源)...
  2. 机器学习类别/标称(categorical)数据处理:序号编码(Ordinal Encoding)
  3. bzoj2440: [中山市选2011]完全平方数
  4. Python re module的使用
  5. Java反射基础(二)--Fileds对象的使用
  6. 4招教你们怎么做海报,想要宣传推广就来这
  7. 利用计算机制作多媒体最后一步,计算机多媒体技术在影视后期制作的运用
  8. 数天下文章,唯韩愈的《马说》《师说》感触深
  9. 玩物得志:效率为王!如何构建大数据平台?
  10. 获取手机状态栏的高度
  11. java短信发送代码_java 短信发送 的 代码
  12. RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublas‘
  13. DQN-[Playing Atari with Deep Reinforcement Learning]
  14. 朴素贝叶斯算法(python 实现)
  15. 2023年破产重整投资策略研究报告
  16. QPython-在安卓手机上运行Python的利器
  17. oracle-04045,8170导出(exp)数据报错ORA-04045错误
  18. mac看图软件哪个好用_办公记事软件哪个好?工作记事本便签app哪个好用
  19. 微软官方720P、1080P高清测试视频短片下载
  20. 跟我开发NSP(网上查询平台):如何选择开发项目

热门文章

  1. I.MX6 Android 设备节点权限
  2. erlang 动态编译和加载遇到的问题。
  3. 安装Exchange Server 2013
  4. apache storm 1.0.0 新特性
  5. Word01-从正文处开始插入页码
  6. jdk集合常用方法分析之HashSet和TreeSet
  7. 四行代码创建复杂(无限级)树
  8. 中外白领和无领的一天
  9. 用javascript防止EMAIL被抓取
  10. php正则表达式中的字符是,PHP_PHP正则表达式中的特殊字符,字符/意义:对于字符,通常表 - phpStudy...