Linux安全模块(LSM)学习——推荐一个非常好的博客

0.网址

博客地址
该博客基于linux 5.10.17,含有三个lsm demo,难度为递进顺序,作者展示了其如何逐步完成一个有实际使用价值的简单的lsm demo。

1.Whitelist demo

hook函数

由于是第一个demo,所以只用到了一个hook函数bprm_check_security,该函数在exec()时被调用,返回值为0时允许执行二进制文件,返回值为负时会拒绝此次调用。

原理

不加载未知的二进制文件,未知这里被定义为无扩展属性security.whitelisted,即只允许存在扩展属性security.whitelisted的二进制文件被exec() 。

代码

为了防止该模块对os的正常运行(实际使用中会导致无法进入图形界面,将返回值全部设0,仅通过输出观察调用是否合法)

int whitlist_bprm_check_security(struct linux_binprm *bprm)
{
  struct task_struct *task=current;
  kuid_t uid=task->cred->uid;

  //The target we are checking
  struct dentry *dentry=bprm->file->f_path.dentry;
  struct inode *inode=d_backing_inode(dentry);

  //size of the attribute,if any.
  int size=0;

  //Root can access everything.
  if(uid.val==0)
     return 0;

  //If there is an attribute,allow the access.
  //Otherwise, deny it.
  size=__vfs_getxattr(dentry,inode,"security.whitelisted",NULL,0);
  if(size>0){
       printk("whitelist LSM check of %s allowing access for UID %d [ERRO:%d]\n",bprm->filename,uid.val,size);
      return 0;
      }
  printk( "whitelist LSM check of %s denying access for UID %d [ERRO:%d]\n",bprm->filename,uid.val,size);
  //return -EPERM;
  return 0;

}

运行结果

测试时要配合setfattr等使用,将grep和tail setfattr -n security.whitelisted -v 1 XXX(grep / tail)后,运行以下指令,发现调用三次whitelist LSM,只有一次被阻止(无扩展属性的dmesg) 。
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值