网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 数据库技术 > Oracle > 备份与恢复 > linux下的入侵监测系统LIDS原理(1)  

linux下的入侵监测系统LIDS原理(1)

2002-12-13  作者:BitsCN整理  来源:中国网管联盟  点评 投稿 收藏


  上次我发布的linux下的入侵监测系统LIDS的时候很忙,也很乱,可能大家看不出什么东西。现在我正慢慢整理其他资料。现在有一部分写完,先给大家看看,以后我会陆续发表的。希望大家一起探讨,也可以给我e-mail:chaobowang@sina.com
  
  一. 入侵
  随着internet上的linux主机的增加,越来越多的安全漏洞在当前的GNU/linux系统上发现。你也许在internet上听说过 在linux下发现bug,它会导致系统很容易的被黑客攻击。
  因为linux是一个开放代码的系统,漏洞很容易发现,并且也会很快的有补丁出来。但是当漏洞没有公布的时候,并且管理员很懒,没有去打补丁。黑客就会很容易的攻击这个系统,取得root权限,在现有的GNU/linux下,他就可以做任何他想做的事情。现在你可以问,我们现在到底可以做些什么呢?
  1. 1现在的GNU/linux错误在哪里?
  l 超级用户会滥用职权,他能够做所有他要做的事情。作为root。他会改变所有的东西。
  l 许多系统文件很容易被更改。这些文件可能是很重要的文件,如/bin/login,如果一个黑客进入,他可以上传一个login程序来覆盖/bin/login,这样他就可以不用登陆名和密码来登陆系统。但是这些文件不需要经常改动,除非你要升级系统。
网管网www.bitscn.com

  l 模块modules很容易用来中断内核。模块是为了让linux内核更模块话和更高效而设计的。但是当模块加入到内核,它就会成为内核的一部分并且能做原始内核能做的工作。因此,一些不友好的代码可以写成模块来加入到内核里,这些代码就会重定向系统调用并且作为一个病毒来运行。
  l 进程是不受保护的,一些进程,如后台的web服务器,一直都认为是没有严格保护的程序。因此,他们就会很容易被黑客攻击。
  1. 2 LIDS的设想是什么。
  l 保护重要文件。因为文件很容易被root更改,为什么不严格文件操作呢?因此,LIDS改变了文件系统在内核里的安全系统调用。如果某个时候一些人访问一个文件,他就会进入系统调用然后我们就可以检查文件名并且看她们是否被保护。如果它已经被保护,我们就可以拒绝这个访问者的要求。
  l 保护重要的进程。这个和上面的保护进程的想法不是一样的。当一个系统里运行一个进程,它会在/proc 文件系统里有一个用pid作为路径名的入口。所以,如果你用“ps –axf”你就可以显示出当前运行的进程。你可以问如果保护这些进程。如果你要杀死一个进程的话,首先,你键入“ps”来得到进程的PID,然后,你键入“kill 〈pid〉”来杀死它。但是,如果我不让你看到进程,你怎么来杀死这个进程呢?因此,LIDS是用隐藏进程来保护它的。 网管u家u.bitsCN.com
  
  另外一个重要的方法就是不让任何人可以杀死进程,包括root用户。LIDS能够保护父进程是init(pid=1)的所有进程 。
  l 封装内核。有时候我们需要要把一些必要的模块加入到内核里来使用,另外,我们也要拒绝任何人包括root用户向内核插入模块。那么如何来平衡这个矛盾的问题呢?我们可以只允许在系统启动的时候插入模块,然后我们封装模块,在封装后,内核不允许任何人插入模块到内核里。通过这种封装功能,我们能用它来保护重要的文件,进程,我们可以在系统启动的时候只允许必要的进程,只改变必要的文件。在封装内核后,我们就不能在对文件有任何的修改。
  
  二,保护文件系统
  2.1 保护文件系统是LIDS的重要功能之一。这个功能是在内核的VFS(虚拟文件系统)层实现的,我们可以保护任何种类的文件系统,如EXT2,FAT。
  在LIDS,保护的文件按种类分为以下几种:
  l 只读的文件或目录。只读文件意味着它们不被允许改写,如,在目录/usr/bin,/sbin。这些类型的文件大多数都是二进制系统程序或是系统配置文件,除了在升级系统的时候,我们不需要改变它们。
  l 只可增加文件或目录。这些文件是那些只可以增加大小的文件。大多数是系统的日值文件,如在/var/log里的只可增加文件。
网管bitscn_com

  l 额外的文件或目录,这些文件没有被保护。一般来说,你想要保护目录下的所有文件,但是,还需要有一些特殊的文件不要被保护。所以我们可以定义这些文件作为额外的其他的只读文件。
  l 保护挂载或卸载文件系统。当你在启动的时候挂载文件系统的时候,你可以禁止所有人,甚至是root,去卸载文件系统。你也可以禁止任何人在当前文件系统下挂载文件系统来覆盖它。
  2.2 LIDS如何在内核保护文件
  在这部分,我们会看到一些内核的代码来理解LIDS是如何保护文件的。
  
  Linux文件系统数据结构程序
  首先,我们必须了解linux的虚拟文件系统。
  在linux里的每一个文件,不管是什么样子的,都有一个结点inode数,文件系统提供了以下数据结构。
  在/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;
  ......
  }
网管下载dl.bitscn.com

  注意: 用来鉴定一个结点inode。这个意思是你可以用一对 来得到一个系统里独一无二的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保护数据结构。
  在分析完linux文件系统后,让我们来看看LIDS是如何容VFS来保护文件和目录的。
网管论坛bbs_bitsCN_com

  在/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 */
  };
  上面的结构用一对 来存储保护文件或目录的结点。“type”是用来标明保护结点文件类型的。
  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结构,我们能很容易的初使化保护的文件或是在内核里执行以下函数。
  在/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;

网管u家u.bitscn@com


  
  #ifdef VFS_SECURITY_DEBUG
  printk("lids_add_inode : return %d\n",last_secure);
  #endif
  return last_secure;
  }
  就象你在上面代码上可以看到的,给secure_ino加到一个结点上是非常容易的。被保护的结点会在系统启动的时候初使化。初使化程序在/usr/src/linux/fs/lids.c的init_vfs_security()里。
  
  现在,让我们看看LIDS是如何来检查是否一个结点已经受到保护。
  在/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),

网管联盟bitsCN_com


  dentry->d_inode->i_ino);
  .....................
  这个是LIDS加到内核里做检测的一个例子。你会看到lids_check_base()是LIDS保护方法的一个核心函数。
  你可以在LIDS要保护的地方看到很多LIDS保护方法用到lids_check_base()函数,特别是在linux内核的子目录下。
  在/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

TAGs   原理   系统   监测   入侵   文件   保护   可以   我们   struct   LIDS      
 上一篇:linux下的入侵监测系统LIDS原理(2)   下一篇:linux下的入侵监测系统LIDS
相关文章列表
linux下的入侵监测系统LIDS原理(1) 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
1.扫盲行动之:如何刻录ISO文件!(附多媒
2.如何使用iso文件?
3.简单的Oracle存储过程的创建方法
4.Oracle冷备份的不完全恢复
5.在LINUX下配置DNS
6.Oracle数据库备份与恢复的三种方法
7.设置TOMCAT PATH,CLASSPATH变量
8.linux下如何搜索文件?
9.专家在线:全面介绍恢复Oracle数据库
10..bz2文件如何解压缩
最新推荐文章:
1.容灾项目需要注意的几大问题
2.系统损坏情况下恢复 Oracle 10g 数据库
3.使用RMAN进行基于表空间的恢复
4.Oracle数据库常见错误操作及解决方案
5.专家在线:全面介绍恢复Oracle数据库
6.包含复制环境的数据库迁移
7.FLASHBACK TABLE对全文索引的影响
8.在Flashback数据库上获得较高可用性
9.Oracle数据库备份与恢复的三种方法
10.Oracle常用数据字典
网管论坛交流:
·不疯魔不成活
·令你大开眼界的真正标准化机房,已整理重
·为赈灾,女孩舍身拍“裸照”
·Windows Server 2003服务器群集创建和配
·exchange2k3全套官方资料
·双儿一周岁了。。。特殊的礼物来啦。。
·存储备份技术版块守则
·无盘技术交流区守则
·DOS命令基础大全之命令详解<作者吐血
·Windows XP 操作系统默认设置需要注意的