长亭百川云 - 文章详情

Freebsd进程号随机化解读

kernsec

67

2024-07-13

Freebsd提供了一个有意思的安全功能,fork的进程号可以随机化。这个小功能很有用,可以防止恶意软件猜测父子进程号,内核提供了一个random_pid变量,可以通过sysctl设置。

static int randompid = 0;

Sysctl首先获取sysctl设置的pid值,然后根据pid值计算randompid的范围。pid为0表示关闭randompid功能,为1是randompid的范围限制在100-1023,小于0或者大于最大进程号减100,则设置为最大进程号减去100,这样会使randompid的范围变得很大,如果想采取更高的安全性,可以这样设置。pid小于100,randompid设置为固定的100。

static int

在fork时调用fork_findpid,如果没有RFHIGHPID标志,再次调用arc4random(),生成一个0-randompid的值,这个值用作要搜取的bit数组索引。

实际测试下,首先关闭进程号随机功能:

root@kexp:~/code # sysctl kern.randompid=0

父子进程号可以预测。

开启进程号随机功能:

root@kexp:~/code # sysctl kern.randompid=1

可以看到子进程号变得不可预测了。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2