技术标签: 【基础知识】
libcap-ng库旨在使具有posix功能的编程比传统的libcap库容易得多。它包括一些实用程序,可以分析所有当前正在运行的应用程序并打印出任何功能,以及是否具有开放式边界集。不带securebits“ NOROOT”标志的开放边界集将允许仅通过调用execve来扩展保留uid 0的应用程序的完整功能。
随附的实用程序旨在让管理员和开发人员从可能以太多特权运行的各种方式中发现应用程序。例如,任何调查都应该从面向网络的应用程序开始,因为它们将是入侵的主要目标。netcap程序将检查所有正在运行的应用程序并显示结果。netcap的样本输出:
ppid pid acct command type port capabilities
1 2295 root nasd tcp 8000 full
2323 2383 root dnsmasq tcp 53 net_admin, net_raw +
1 2286 root sshd tcp 22 full
1 2365 root cupsd tcp 631 full
1 2286 root sshd tcp6 22 full
1 2365 root cupsd tcp6 631 full
2323 2383 root dnsmasq udp 53 net_admin, net_raw +
2323 2383 root dnsmasq udp 67 net_admin, net_raw +
1 2365 root cupsd udp 631 full
但是,假设有人成功进入您的系统并且仅具有部分功能,那么获得完全特权的下一个目标可能是什么?pscap程序将向您显示当前在系统上运行的所有具有特权的应用程序。理想情况下,所有以uid 0运行的应用都应放弃特权。有些不能出于充分的理由,如后面所述。但是很多可以。
如果由于某种原因您觉得它太难或应用程序开发人员不愿意更改,则管理员可以使用filecap设置基于文件的功能,前提是该文件系统具有扩展的属性并且内核支持基于文件系统的功能。它还可以搜索系统上具有基于文件系统功能的文件。
我认为基于文件系统功能的目的之一是允许管理员独立于应用程序开发人员的工作来控制其安全风险配置文件并丢弃系统上应用程序的特权。我怀疑放弃特权的采用率低是因为旧的API使得执行任何任务变得乏味,因此应用程序开发人员只是不使用它。您看到多少个应用程序说您必须是root用户才能使用该程序?这是因为它只需1行代码即可检查您是否是root用户。程序员可能知道需要特定的功能,但是选择了捷径。我想通过使用易于使用的API来改变它。与添加大约20行代码的补丁相比,接受3-4行补丁更容易。
作为应用程序开发人员,您可能会感兴趣大约6个用例:删除所有功能,保留一项功能,保留若干项功能,检查您是否有任何功能,检查某些功能以及在uid更改中保留功能。我将展示使用libcap-ng(现在在python中)在下面进行这些操作是多么容易:
capng_clear(CAPNG_SELECT_BOTH);
capng_apply(CAPNG_SELECT_BOTH);
capng_clear(CAPNG_SELECT_BOTH);
capng_update(CAPNG_ADD, CAPNG_EFFECTIVE|CAPNG_PERMITTED, CAP_CHOWN);
capng_apply(CAPNG_SELECT_BOTH);
capng_clear(CAPNG_SELECT_BOTH);
capng_updatev(CAPNG_ADD, CAPNG_EFFECTIVE|CAPNG_PERMITTED, CAP_SETUID, CAP_SETGID, -1);
capng_apply(CAPNG_SELECT_BOTH);
if (capng_have_capabilities(CAPNG_SELECT_CAPS) > CAPNG_NONE)
do_something();
if (capng_have_capability(CAPNG_EFFECTIVE, CAP_CHOWN))
do_something();
capng_clear(CAPNG_SELECT_BOTH);
capng_update(CAPNG_ADD, CAPNG_EFFECTIVE|CAPNG_PERMITTED, CAP_CHOWN);
if (capng_change_id(99, 99, CAPNG_DROP_SUPP_GRP | CAPNG_CLEAR_BOUNDING))
error();
现在,这不是很简单吗?请注意,最后一个示例使用较旧的功能库需要大约60行代码。从0.6版本开始,有一个m4宏文件可帮助将libcap-ng添加到您的autotools配置系统中。在configure.ac中,添加LIBCAP_NG_PATH。然后在Makefile.am中找到链接到libcap-ng的应用程序,将$(CAPNG_LDADD)添加到其_LDADD条目中。最后,用#ifdef HAVE_LIBCAP_NG包围可选功能代码。
该库使它更加完整的一个方面是,它将边界集视为另一种功能集。采用有效,允许或可继承的相同函数也采用bounding_set。但是有时您不想触摸边界集,因此API允许您在传统功能,边界集或两者之间进行选择。需要注意的一件事,如果要更改边界集,则必须具有SETPCAP功能。即使没有SETPCAP功能,也可以随时删除传统功能。在“功能(7)”手册页中了解有关此内容的更多信息。
那么,对于仅在几行代码中使用posix功能的所有新功能,我们该怎么办?我们应该修补所有内容以最小化功能。:-)有关一些初步的补丁程序,请参见上面的链接,这些补丁程序演示了如何删除常见软件包的privs。
参见上图。有3种应用程序。第一个就像sshd,crond,xinetd或gdm。它们为各种用户生成应用程序,而您永远不知道该用户需要什么。这些可以并且应该以全部功能运行。第二种应用程序是不需要完全特权来执行其工作,但仍可以作为根uid运行的应用程序。这确实是libcap-ng的主要目标。最后一种应用是在非root帐户上运行并删除所有priv的应用。这些我们不必担心。
上图显示了Linux 2.6.26后内核的当前状况。注意黄色的守护程序。如果应用程序没有清除其边界集并保留根uid,并且对这些应用程序的任何攻击成功,则攻击者只需调用execve就可以重新获得完全特权。下图显示了我们真正想要的。
在这张照片中,我们看到边界集已被清除,因此对具有部分功能(黄色守护程序)的应用程序的攻击仍保持部分功能。有时,应用程序有合理的理由允许子进程重新获得priv,因此libcap-ng库也允许这样做。
可以使用功能创建强化系统。如果我们修补除2-3个login / cron守护程序之外的所有守护程序以删除priv,则这些以root用户身份运行的应用程序是无效的攻击目标。但是它们仍然具有uid 0,典型的系统安装允许uid做事。例如,/ bin / sh是0755,/ bin也是0755。撤防的根进程仍然可以对系统进行特洛伊木马。但是,如果我们放弃了对root的所有读/写权限,该怎么办?像这样:
echo "Hardening files..."
find / -type f -perm /00700 -a -uid 0 -exec chmod u-wrx {} \; 2>/dev/null
find / -type f -perm /00070 -a -gid 0 -exec chmod g-wrx {} \; 2>/dev/null
echo "Hardening directories..."
find / -type d -perm /00200 -a -uid 0 -exec chmod u-w {} \; 2>/dev/null
find / -type d -perm /00020 -a -gid 0 -exec chmod g-w {} \; 2>/dev/null
echo "Correcting a couple things..."
find /sbin -type f -perm /00000 -a -uid 0 -exec chmod u+x {} \; 2>/dev/null
find /usr/sbin -type f -perm /00000 -a -uid 0 -exec chmod u+x {} \; 2>/dev/null
该系统仍然可以工作吗?(希望您首先在VM中尝试此操作。)答案大部分是肯定的。我知道的唯一问题是,如果使用了dhcp,则需要编写/etc/resolve.conf文件。系统仍然可以工作的原因是,管理员以root用户身份登录并获得了DAC_OVERRIDE功能。DAC_OVERRIDE允许读取或写入系统上的任何文件,而不管所有权或权限如何。Sshd调用pam进行身份验证,后者依次运行具有DAC_OVERRIDE的setuid帮助程序,以便它可以读取影子文件。由于使用了pam的setuid帮助程序,因此更改密码仍然有效。
任何正在运行的守护程序都不应具有DAC_OVERRIDE功能。这样,即使该守护程序受到威胁,也不会对系统造成太大影响。由于文件的权限现在为0000,因此它无法读取/ etc / shadow。由于目录权限为0005根目录,因此无法安装二进制文件。IOW,根守护程序在读取/写入文件方面被简化为普通用户。
因此,如果您想走这条强化系统之路,则需要非常小心哪些应用程序具有DAC_OVERRIDE。这些应用程序无论具有何种uid,都将能够在系统上的任何位置读取/写入文件。它们将成为系统的攻击目标。如果您为应用程序打补丁以放弃功能,而这是必需的,则您可能要考虑该应用程序是否需要重新设计。在许多情况下,要创建一个由应用程序拥有且可由其uid写入的目录,然后将其任何写入/读取操作移至该目录。发出DAC_OVERRIDE时要非常小心。
Explaining Deep Neural Networks翻译一下牛津小姐姐这这篇优秀的博士论文,可以大致当做一篇综述来看,如果有翻译不好的地方,请大家多多指点附上论文地址 https://arxiv.org/pdf/2010.01496.pdf????????????文章目录Explaining Deep Neural Networks????????????摘要第一章 简介1.1 解释深度神经网络的重要性1.2 研究问题及大纲第二章 深度神经网络解释的背景知识2.1 记号2.2 解释性方
目前,市场逐步走向个性化、以销定产模式;生产逐步以多品种小批量形成存在。对于离散制造行业,APS是为解决多工序、多资源的优化调度问题,而对于流程行业,APS则是为解决顺序优化问题。APS通过为流程和离散的混合模型同时解决顺序和调度的优化问题,从而对项目管理与项目制造解决关键链和成本时间最小化,具有重要意义。
cordova使用遇到的坑
在本课中,你将学习如何在FortiGate的防火墙策略中使用身份验证。
电脑换了华硕新主板,需要重装系统,用的Ubuntu18.04的系统,电脑用的显卡是GTX1080Ti。在新系统中装显卡驱动过程中遇到很多坑,中间无奈搞乱环境又重装了一次系统,再次尝试,终于成功。整个过程失败次数很多,参考的教程感觉自己步步都做对了,但是最后就是不能成功运行。配置系统这种事情确实比较麻烦,心态要对,遇到问题上网搜索方法,最终总归都能解决。接下来接讲讲我装NVIDIA驱动到装tens...
1、安装Nginx依赖创建nginx-dependence文件夹,在该文件夹中安装依赖:mkdir nginx-dependencecd nginx-dependencewget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gztar -zxvf pcre-8.40.tar.gzcd pcre...
Bootstrap中col-*-offset和col-*-push的区别
2019日记,想到什么说什么,只是想找几个同心境的伙伴一起放松下自己2019的我这几天仿佛陷入了迷茫,自己一个人,目前的我24岁,专科学校毕业一年5个月,三线城市,java程序员工作三年一个月,工资微薄,有女朋友,有最近半年的核心目标,但是我却不知道,我209,2020,2021,乃至未来,我将成为一个怎么样的人,我现在在我工作的城市,每天固定的工作,固定的工资,固定的游戏与娱...
产品规格:1、供电电压 : 2.7 - 5.5V【3.3V供电时,输出电压也可以到正负10V】2、通道数: 2路(通过1片DAC8563实现)3、输出电压范围 : -10V ~ +10V 【客户可以自己更改为 0-10V输出范围。使用烙铁切换2个焊点即可,无需更换元器件】4、输出驱动能力:带运放驱动,最大输出电流10mA。负载电阻>1K欧姆5、分辨率: 16位6、功耗 :小于20mA7、MCU接口 :高速 SPI (50M) 支持 3.3V和5V单片机8、DAC输出模拟带宽:350K...
#include <msp430.h> #include "Pwm.h"#include "Uart.h"/** * main.c */int main(void){ WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer, if not, System will continue to Reset! P1DIR |= 0x01; // configure P1.0 as output
题目:实现一个函数stringToInt,实现把字符串转换成整数这个功能,不能使用atoi或者其他类似的库函数。https://blog.csdn.net/yishizuofei/article/details/81610802bool stringToInt(char *str,int *ret) { if ( NULL== str || ret == NULL |...
这种方法可以得到真正的半透明效果。他会使用当前片元的透明度作为混合因子,与已经存储在颜色缓冲中的颜色进行混合,得到新的颜色。但是,透明度混合需要关闭深度写入,这使得我们要非常小心物体的渲染顺序。需要注意的是,透明度混合只关闭了深度写入,但是没有关闭深度测试。这意味着,当透明度混合渲染一个片元时,还是会比较它的深度值与当前深度缓冲中的深度值,如果它的深度值距离摄像机更远,那么就不会再进行混合操作。这一点决定了,当一个不透明物体出现在一个透明物体的前面,而我们先渲染了不透明物体,他仍然可以正常的遮挡住透明物体。