一:前言
所有操作系统至少由两个主要组件组成:第一个是内核,位于操作系统的中心,控制着操作系统所做的一切,包括管理内存,控制cpu,甚至是控制用户在屏幕上看到的内容。第二个是用户区域。
内核被设计成一个受保护或特权的区域,只能由root账户或其他特权账户访问,因为对内核的访问几乎可以提供对操作系统的自由访问。如果可以改变目标的内核,就可以控制系统。
Linux是一个单片内核,可以添加内核模块。内核有时需要更新,需要安装新的设备驱动程序(如视频卡,蓝牙设备或USB设备),文件系统驱动程序,甚至系统扩展,必须将这些驱动程序嵌入内核中才能完全正常运行。在某些情况下,要添加驱动程序,必须重建、编辑和重新引导整个内核,但是Linux能够在不经过整个过程的情况下向内核添加一些模块,这些模块称为可加载模块或LKM
二:检查内核版本
1. 使用uname -a
操作系统正在运行的发行版是 Linux kali ,
内核版本是4.13.0
具有堆成多处理功能(smp)可以在具有多个核心或处理器的机器上运行
于2017年11月08日在Debian 4.13.10上构建
构架的建构是x86_64
2. 使用 cat /proc/version
三:使用sysctl进程内核优化
使用sysctl优化内核,可以更改内存分配,开启网络功能,加固内核抵御攻击
使用sysctl所做的更在重启之前有效,永久有效需修改 /etc/sysct.conf文件
启用数据包转发功能
在中间人攻击(MITM)中,攻击者把自己置于通信主机之间,以截获信息,流量会经过攻击者系统,攻击者可以查看并可能更改通信,实现这种路由的一种方法是启用包转发。
1.暂时更改使用命令 sysctl -w net.ipv4.ip_forward=1
2.永久更改在/etc/sysct.conf 取消对IP转发行的注释
禁用icmp echo请求 net.ipv4.icmp_echo_ignore_all=1
四:管理内核模块
两种方法,一种是insmod套件 第二种方法是modprobe命令
1.insmod套件
使用lsmod 列出所有内核模块
使用insmod 加载或插入模块
使用rmmod 删除模块
上面的命令不完美,会使内核不稳定或无法使用,没有考虑到模块的依赖性
2. modprobe
modinfo 模块名 获取更多模块的信息 eg modinfo bluetooth
添加模块 modprobe -a module_name
删除模块 modporbe -r module_name
插入模块 modprobe -a module_name
测试新模块是否正确加载 dmesg 加上正则过滤 eg:dmesg|grep video
五:总结
内核是一个受保护区域,任何无意中添加到内核中的东西都可能破坏操作系统甚至控制内核
LKM使系统管理员能够将模块添加到内核中,不必每次添加都重构整个内核
攻击主服务器可以诱使系统管理员添加恶意的LKM,从而控制整个系统