Linux安全相关技术

  • SELinux
  • AppArmor
  • openSSL
  • TPM
  • SGX
  • LSM

linux上六种常用的安全加固技术:

1 安全的编码(Secure Code),减少编写的错误。

2 应用层漏洞缓解技术(Application-level exploitation)(SSP,relro)

3 系统级漏洞缓解技术(System-level exploit mitigation)(ASLR,NX),

4 降权处理(Privilege Dropping)(Sandboxing)

5 强制访问控制(Mandatory access control)(MAC,SELinux)

6 更新策略(Update strategy)

feature

SELinux

AppArmor

grsecurity

Automated

No (audit2allow and system-config-selinux)

Yes (Yast wizard)

Yes (auto traning / gradm)

Powerful policy setup

Yes (very complex)

Yes

Yes

Default and recommended integration

CentOS / RedHat / Debian

Suse / OpenSuse

Any Linux distribution

Training and vendor support

Yes (Redhat)

Yes (Novell)

No (community forum and lists)

Recommend for

Advanced user

New / advanced user

New users

Feature

Pathname based system does not require labelling or relabelling filesystem

Attaches labels to all files, processes and objects

A

监控网络在主防领域是一个必须要完成的任务,下面以监控发送数据的系统调用API sendto为例讲解实现思路,首先,找到合适的监控点,我们先来看一看sendto系统调用的调用栈:

linux在构架设计时,还是考虑到了安全需求,在/include/linux/security.h文件定义了安全相关的操作集合

Linux安全模块(LSM)主要支持"限制型"的访问控制决策:当Linux内核授予文件或目录访问权限时,Linux安全模块(LSM)可能会拒绝,而当 Linux内核拒绝访问时,可以跳过LSM。

新的安全模块由register_security注册

能够操作的内核内部对象:

  1. task_struct结构:代表任务(进程)
  2. linux_binprm结构:代表程序
  3. super_block结构:代表文件系统
  4. inode结构:代表管道,文件,或者Socket套接字
  1. file结构:代表打开的文件
  1. sk_buff结构:代表网络缓冲区(包)
  1. net_device结构:代表网络设备
  1. kern_ipc_perm结构:代表Semaphore信号,共享内存段,或者消息队列
  1. msg_msg:代表单个的消息

LSM接口的核心是security_ops,当系统启动时,他们被初始化为传统的DAC策略。传统DAC访问控制是指控制系统中的主体(如进程)对系统中的客体(如文件目录、文件)的访问(读、写和执行等)。自主访问控制DAC 是指主体(进程,用户)对客体(文件、目录、特殊设备文件、IPC等)的访问权限是由客体的属主或超级用户决定的,而且此权限一旦确定,将作为以后判断主体对客体是否有访问权限的依据。

以Linus Torvalds为代表的内核开发人员对Linux安全模块(LSM)提出了三点要求:

只有Gentoo和Debian Mempo提供了直接使用Grsecurity/PaX的途径

1、真正的通用,当使用一个不同的安全模型的时候,只需要加载一个不同的内核模块。

2、概念上简单,对Linux内核影响最小,高效,并且。

3、能够支持现存的POSIX.1e capabilities逻辑,作为一个可选的安全模块

struct security_operations {

char name[SECURITY_NAME_MAX + 1];

。。。。。

int (*unix_stream_connect) (struct sock *sock, struct sock *other, struct sock *newsk);

int (*unix_may_send) (struct socket *sock, struct socket *other);

int (*socket_create) (int family, int type, int protocol, int kern);

int (*socket_post_create) (struct socket *sock, int family,

int type, int protocol, int kern);

int (*socket_bind) (struct socket *sock,

struct sockaddr *address, int addrlen);

int (*socket_connect) (struct socket *sock,

struct sockaddr *address, int addrlen);

int (*socket_listen) (struct socket *sock, int backlog);

int (*socket_accept) (struct socket *sock, struct socket *newsock);

int (*socket_sendmsg) (struct socket *sock,

struct msghdr *msg, int size);

int (*socket_recvmsg) (struct socket *sock,

struct msghdr *msg, int size, int flags);

int (*socket_getsockname) (struct socket *sock);

int (*socket_getpeername) (struct socket *sock);

int (*socket_getsockopt) (struct socket *sock, int level, int optname);

int (*socket_setsockopt) (struct socket *sock, int level, int optname);

int (*socket_shutdown) (struct socket *sock, int how);

int (*socket_sock_rcv_skb) (struct sock *sk, struct sk_buff *skb);

int (*socket_getpeersec_stream) (struct socket *sock, char __user *optval, int __user *optlen, unsigned len);

int (*socket_getpeersec_dgram) (struct socket *sock, struct sk_buff *skb, u32 *secid);

int (*sk_alloc_security) (struct sock *sk, int family, gfp_t priority);

。。。。。。

}

用crash查看default_security_ops里定义的socket相关的系统调用

参数分析,找出sendto系统调用正在发送的数据:

接下来要做的就是用自己hook 函数替换掉default_security_ops中的socket_sendmsg函数指针

linux安全加固技术--内核安全模块LSM相关推荐

  1. Linux 修复严重的内核代码执行漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 研究人员呼吁关注Linux 主流发行版本内核 TIPIC模块中的一个严重漏洞,它可被远程攻击者滥用于完全控制易受攻击的系统. 该漏洞的编号为CV ...

  2. linux内核引入模块机制好处,linux内核模块的版本检查机制

    linux内核对插入的内核模块进行严格的版本检查,即使一个小版本号不一致也会导致加载的不成功,这完全是为了内核本身运行安全.由于linux内核的发布是基于版本号的,而所有的内核模块的开发必须依赖内核头 ...

  3. linux内核及其模块的查询,加载,卸载 lsusb等

    http://blog.sina.com.cn/s/blog_53e81e2a0100zkxi.html 1,/sbin/update-modules文件,他是一个linux通用的模块管理脚本程序. ...

  4. Linux课程实践二:编译模块实现内核数据操控

    一.内核模块原理 1. Linux内核增加功能 Linux内核整体结构很庞大,包含了很多的组件,现在有两种方法将需要的功能包含进内核当中: - 静态加载:将所有的功能都编译进Linux内核. - 动态 ...

  5. Linux内核LED模块分析(二)

    Linux内核LED模块分析(二) 上次分析到那里后,还是有些同志说看不懂,那我就继续分析一把我认为不需要继续分析的东西吧.上回分析了 led_cdev和trigger的关系后就没有继续说了.有同志还 ...

  6. linux内核开发入门二(内核KO模块介绍、开发流程以及注意事项)

    linux内核开发入门二(内核KO模块介绍.开发流程以及注意事项) 一.什么是内核模块 内核模块:ko模块(Kernel Object Module)是Linux内核中的可加载模块,它可以动态地向内核 ...

  7. Linux安全增强技术,采用MAC技术的嵌入式Linux安全增强技术研究.pdf

    采用MAC技术的嵌入式Linux安全增强技术研究.pdf Practical Method .实践方法 采用 MAC 技术的 嵌入式 Linux 安全增强技术研究 吴新勇 1 杨霞2 (1.四川九於1 ...

  8. 转:Linux 2.4.x内核软中断机制

    源地址:http://www.ibm.com/developerworks/cn/linux/kernel/interrupt/ Linux 2.4.x内核软中断机制 杨沙洲 (pubb@163.ne ...

  9. Linux用户态与内核态通信的几种方式(待完善)

    文章目录 1. 内核启动参数 2.模块参数与sysfs 3.sysctl 4.系统调用 5.netlink 6. procfs(/proc) 7.seq_file 8.debugfs 9.relayf ...

  10. Linux 2.6.31内核优化指南

    Linux 2.6.31内核优化指南 作者:Ken Wu Email: ken.wug@gmail.com 转载本文档请注明原文链接 http://kenwublog.com/docs/linux-k ...

最新文章

  1. python私有属性怎么定义_Python中私有属性的定义方式
  2. 《30天吃掉那只 TensorFlow2.0 》(附下载)
  3. sysbench mysql oltp_用sysbench进行数据库OLTP基准测试
  4. 十九、 彻底掌握金融量化交易库Talib
  5. 更新失败无法连接更新服务器未响应,逆水寒客户端更新失败_长时间停滞未响应相关问题解答[图]...
  6. linux top 看硬盘读写,linux iotop 安装使用教程(显示硬盘IO读写情况)
  7. 转义字符简析及注意事项
  8. VS2013编译64位boost流程及若干问题
  9. SQL server 数据库 (函数篇 2)
  10. 20200318_抓取51job招聘数据存数据库
  11. astar算法c语言实,Astar寻路算法C++实现
  12. 飞思卡尔 智能车(山大 Router) 核心源码
  13. 【CMD】ping通ip
  14. Paper Download Artifact
  15. restframework单元测试
  16. CSGO 绑定一键跳投
  17. 【机房收费系统】 之 收费模式
  18. iOS 讯飞语音之语音听写 录音的实现
  19. 思维导图---考研高数---中值定理---套路归纳---汤家凤
  20. 【LeetCode Python实现】ZJ27 字典树

热门文章

  1. 线性规划中的灵敏度分析
  2. 3D模型在线转换,Solidworks版本转换
  3. 时间管理——四象限法则
  4. 网页制作基础及HTML的笔记,《网页设计与制作项目教程》:网页制作基础知识笔记一...
  5. 单片机大学生实习感悟体验
  6. django中render()与render_to_response()区别
  7. asp.net panel 加html,ASP.NET中 Panel 控件的使用方法
  8. sublime在wamp下配置php文件,配置WAMP环境下的sublime和PHPdesigner
  9. 过滤cuteftp上传下载
  10. c语言中文网qq,c语言写的qq连看辅助