【Linux】关于Linux内核利用和安全加固的思考

1. Linux内核利用思考

    在网络安全领域,对于系统的渗透是一个值得我们去思考的问题,目前,许多人认为Linux是很安全的操作系统,事实上相较于其他系统确实也比较安全,但是安全这个概念是相对的,虽然Linux有很强大的安全机制,但是它还是存在一些安全问题。

2. Linux漏洞检测工具

    目前来说,关于Linux内核利用这个方面值得我们去注意,因为这种利用方式的危害巨大,一旦攻击者利用Linux内核,一般来说将系统完全控制不是问题。对于Linux系统是否存在权限提升漏洞我们可以用 Linux privilege checker来进行检测。

3. Linux提权辅助工具

    还有一个工具是Linux Exploit Suggester,它是被设计用来帮助检测给定的一些基于Linux内核或者Linux的机器的安全缺陷,它主要提供以下的功能:

  • 评估已经公开的内核暴露漏洞,输出内核之中已经公开的Linux内核漏洞的存在情况,比如说下面的输出实例:
$ ./linux-exploit-suggester.sh
...
[+] [CVE-2017-16995] eBPF_verifier

   Details: https://ricklarabee.blogspot.com/2018/07/ebpf-and-analysis-of-get-rekt-linux.html
   Exposure: highly probable
   Tags: debian=9.0{kernel:4.9.0-3-amd64},fedora=25|26|27,[ ubuntu=14.04 ]{kernel:4.4.0-89-generic},ubuntu=(16.04|17.04){kernel:4.(8|10).0-(19|28|45)-generic}
   Download URL: https://www.exploit-db.com/download/45010
   Comments: CONFIG_BPF_SYSCALL needs to be set && kernel.unprivileged_bpf_disabled != 1

[+] [CVE-2017-1000112] NETIF_F_UFO

   Details: http://www.openwall.com/lists/oss-security/2017/08/13/1
   Exposure: probable
   Tags: [ ubuntu=14.04{kernel:4.4.0-*} ],ubuntu=16.04{kernel:4.8.0-*}
   Download URL: https://raw.githubusercontent.com/xairy/kernel-exploits/master/CVE-2017-1000112/poc.c
   ext-url: https://raw.githubusercontent.com/bcoles/kernel-exploits/cve-2017-1000112/CVE-2017-1000112/poc.c
   Comments: CAP_NET_ADMIN cap or CONFIG_USER_NS=y needed. SMEP/KASLR bypass included. Modified version at 'ext-url' adds support for additional distros/kernels

[+] [CVE-2016-8655] chocobo_root

   Details: http://www.openwall.com/lists/oss-security/2016/12/06/1
   Exposure: probable
   Tags: [ ubuntu=(14.04|16.04){kernel:4.4.0-(21|22|24|28|31|34|36|38|42|43|45|47|51)-generic} ]
   Download URL: https://www.exploit-db.com/download/40871
   Comments: CAP_NET_RAW capability is needed OR CONFIG_USER_NS=y needs to be enabled
...
  • 验证内核安全强化措施所处的状态,它可以检查内核提供的大多数安全设置,验证内核编译时的配置,同时验证运行时的设置,方便我们了解内核在运行时的安全状态,类似于checksec.sh工具的现代延续版,工具使用实例:
 $ ./linux-exploit-suggester.sh --checksec

Mainline kernel protection mechanisms:

 [ Disabled ] GCC stack protector support (CONFIG_HAVE_STACKPROTECTOR)
              https://github.com/mzet-/les-res/blob/master/features/stackprotector-regular.md

 [ Disabled ] GCC stack protector STRONG support (CONFIG_STACKPROTECTOR_STRONG)
              https://github.com/mzet-/les-res/blob/master/features/stackprotector-strong.md

 [ Enabled  ] Low address space to protect from user allocation (CONFIG_DEFAULT_MMAP_MIN_ADDR)
              https://github.com/mzet-/les-res/blob/master/features/mmap_min_addr.md

 [ Disabled ] Restrict unprivileged access to kernel syslog (CONFIG_SECURITY_DMESG_RESTRICT)
              https://github.com/mzet-/les-res/blob/master/features/dmesg_restrict.md

 [ Enabled  ] Randomize the address of the kernel image (KASLR) (CONFIG_RANDOMIZE_BASE)
              https://github.com/mzet-/les-res/blob/master/features/kaslr.md

 [ Disabled ] Hardened user copy support (CONFIG_HARDENED_USERCOPY)
              https://github.com/mzet-/les-res/blob/master/features/hardened_usercopy.md
...

在这里插入图片描述
在这里插入图片描述

4. Linux内核利用

    现今的操作系统大多数都是基于环保护模型,通常为4层模型,如下图所示:
在这里插入图片描述
    基于相同的机制,内存管理是Linux内核提供的最强大的功能之一。对于内核的利用,一般分为以下几点:

4.1 任意内核读写问题

    这种攻击通过将数据传递到Linux内核,进而实现攻击,windows、macOS都爆出过这类问题漏洞,感兴趣的可以去存在15年之久的macOS内核任意地址读写漏洞分析(含PoC)看看。

4.2 内存损坏漏洞问题

在这里插入图片描述

4.2.1 1-内核栈漏洞:

    堆栈为一个比较特殊的内存空间。在这个内存空间之中会自动增长。攻击者正是利用了内存空间会增长的一点,一旦函数调用过多,会致使调用堆栈无法容纳这些调用的返回地址,导致数据越界,覆盖老的堆栈数据产生栈溢出漏洞。

4.2.2 2-内核堆漏洞:

    堆一般用于动态内存分配。内核堆利用是非常危险的,因为在多数情况下,攻击者往往不需要准备任何的Linux模块调试环境,即可实现堆利用。

4.2.3 竞争条件

    一般由于两个或者多个进程竞争使用不能被同时访问的资源,使得这些进程有可能因为时间上推进的先后原因而出现问题,这就叫做竞争条件(Race Condition)。为了避免这个问题,linux实现了我们所谓的Mutex(互斥对象)。

4.2.4 地址空间布局随机化

    这是参与保护缓冲区溢出问题的一个计算机安全技术。是为了防止攻击者在内存中能够可靠地对跳转到特定利用函数。ASLR包括随机排列程序的关键数据区域的位置,包括可执行的部分、堆、栈及共享库的位置。

4.2.5 缓冲区溢出防御技术

    所谓的缓冲区溢出,就是向固定长度的缓冲区写入超出其分配长度内容,造成缓冲区中数据溢出,从而覆盖了缓冲区周围的内存空间,攻击者精心构造填充数据,导致原有流程改变,使得程序执行特殊的代码,进而获取控制权。

4.3 空指针引用问题

NULL指针错误会引发空指针NullPointerException异常。
在这里插入图片描述

5.对Linux安全加固

    反正就是定期更新Linux内核和应用程序,建议使用SFTP和OpenSSH,还有SELinux,密码设置要复杂,对/etc/sysctl.conf配置进行有效强化,对faillog记录多多观察,大概就是这样。

发布了31 篇原创文章 · 获赞 52 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36552566/article/details/105174583