聊一聊Linux下进程隐藏的常见手法及侦测手段

0x00.前言 进程隐藏是恶意软件隐藏自身痕迹逃避系统管理人员发现的常用伎俩之一,当然,安全防护人员有时候也会使用到,比如隐藏蜜罐中的监控进程而不被入侵者觉察等。笔者也曾在多次安全应急响应经历中遇到过多各式各样的进程隐藏伎俩,了解进程隐藏的常见手法及发现手段是每一位安全运维工程师所应掌握的知识点。本文抛砖引玉,浅谈我所了解的Linux下进程隐藏手段及发现技巧,也希望读者能够积极分享自己相关经验与技巧。   0x01.我所了解的 Linux下进程隐藏手段及侦测方法 Linux 下进程隐藏手法大体上分为两种,一种是基于用户态隐藏;一种是直接操控内核进行隐藏。 一、基于用户空间进程隐藏手法 1、偷梁换柱型 1)隐藏原理 ​ 道理很简单,通过替换系统中常见的进程查看工具(比如ps、top、lsof)的二进制程序,导致原先查看进程相关信息的工具(ps、top、lsof等)都被调包了,当然看不到 2)防护手段 ​ I、从干净的系统上拷贝这些工具的备份至当前系统,对比前后的输出是否一致,不一致,则说明被替换了 ​ II、检测这些工具的hash值是否与系统初始化的时候值不一致,是,则说明被替换了 ​ III、专业一点话,使用一些系统完整性检查工具,比如tripwrie、aide等 ​ IV、部署主机入侵检查工具(比如ossec),监控系统文件是否被替换,如有替换,则会报警记录 2、HooK系统调用型 1)隐藏原理 先说下ps、top等工具的工作原理 以ps 工作原理为例说明这些进程信息查看工具的原理 我们知道/proc是一个虚拟文件系统,是VFS的一个实现形式,/proc中包含了内核信息,硬件信息,进程信息等,ps等工具就是通过分析/proc文件系统中进程相关目录的信息获取进程信息汇总。HooK系统调用型的进程隐藏方式都是通过拦截或者迷惑ps等工具从/proc获取分析结果的过程,而不是针对/proc/文件系统生成本身。 ps 首先会调用openat 系统函数获取/proc目录的文件句柄,然后调用系统函数 getdents 递归获取/proc目录下所有文件信息(包括子目录),然后开始open函数打开/proc/进程pid/stat,/proc/进程pid/status, /proc/进程pid/cmdline 文件开始获取进程信息,然后打印给你看 攻击者通过劫持getdents 等系统调用函数或libc中的readdir 函数,实现对特定进程名进程的隐藏,以达到进程隐藏目的 劫持getdents 等系统调用函数或libc中的readdir 函数等系统调用函数一般来说有3个途径 I、修改内核调用,比如getdents 的源码 II、修改libc库中readdir 函数的源码 III、利用环境变量LD_PRELOAD 或者配置ld.so.preload文件 以使的恶意的动态库先于系统标准库加载,以达到架空系统标准库中相关函数的目的,最终实现对特定进程的隐藏 这3个原理类似,III相对于I、II比较简单,在此以III为例进行演示(劫持libc 中的readdir函数) 演示(利用LD_PRELOAD这个环境变量进行进程信息隐藏),比如隐藏ping这个进程: Read more…

Linux登录提示信息动态显示

2023-10-10更新: 用tput sgr0进行属性还原时,在web页面输出会显示出一个(B符号,如下: 参考https://github.com/rburns/ansi-to-html/issues/25 解决方法是,增加一个变量:TERM=ansi 整体脚本如下:

    2023-8-1更新: dymotd:

color.awk:

  2023-7-29更新: 去除了日历和时间显示,感觉很鸡肋,增加了进程使用CPU和Mem时的报警,合并了load为一条: dynmotd:

  color.awk:

  2023-7-14更新: 颜色显示统一用tput:

  另外, figlet字体文件可从这里下载: https://github.com/xero/figlet-fonts/tree/master 字体效果可以在这里看: https://devhints.io/figlet   2023-6-26更新: 美化了一下样式: dynmotd:

color.awk:

某些情况下可能因为磁盘等原因, 导致df等命令执行时间长,导致登录不进服务器, 所以可以增加执行的超时时间:在/etc/profile中添加5秒超时: timeout 5s /usr/local/bin/dynmotd     —— 2023-4-28更新: 简化了一下显示,增加了显示条: Read more…

CentOS7 minimal安装后需要安装的软件

CentOS7 minimal安装后需要安装的软件:  

 

CentOS 7 下关于时间和日期以及时间同步的应用

在CentOS 6版本,时间设置有date、hwclock命令,从CentOS 7开始,使用了一个新的命令timedatectl。 1. 基本概念 1.1 GMT、UTC、CST、DST 时间 UTC 整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。 GMT 格林威治标准时间 (Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同,本文中不做区分) CST 中国标准时间 (China Standard Time)

DST 夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时,将时间拨快一小时,以提早日光的使用。(中国不使用) 1.2 硬件时间和系统时间 硬件时间 RTC(Real-Time Clock)或CMOS时间,一般在主板上靠电池供电,服务器断电后也会继续运行。仅保存日期时间数值,无法保存时区和夏令时设置。 系统时间 一般在服务器启动时复制RTC时间,之后独立运行,保存了时间、时区和夏令时设置。 2. timedatectl 命令 2.1 使用帮助

2.2 命令示例 1.显示系统的当前时间和日期

2.设置日期与时间

3.查看所有可用的时区

Read more…

CentOS 7 升级内核

CentOS 7 自带的内核是3.10版本,有很多特性都无法使用,其中尤为重要的一点是没有bbr加速。其实elrepo中是有更新的内核,通过elrepo换内核实现各种新功能的同时还可以保持系统本身的稳定性。 更新CentOS 7 更新内核需要安装几个软件(repolist),所以首先需要更新一下。

更新完后,安装yum-plugin-fastestmirror来加速后面从更新源下载的速度和稳定性,避免在如此重要的时候掉链子导致后续无法进入系统。

查看内核版本 首先要检查系统版本和内核版本,以确保操作了正确的服务器。

一般来说,CentOS 7 的内核版本应该是3.10。 添加ELRepo源 将ELRepo的gpg密钥添加进系统。

添加ELRepo源。

  检查系统上目前可用的所有更新源,确保ELRepo在列表中。

安装新内核 使用以下命令,系统将自动从elrepo上下载并安装目前最新的稳定版系统内核。

配置Grub2文件 安装了最新的内核后,我还需要手动设置,将默认内核改成刚才安装的才可以。 首先检查所有已经安装了的内核。

一般情况下,至少有3.10和新内核两个内核,并且新内核的标识为0,将其设置为默认内核。

随后,生成grub2的配置文件并重启。

重启后,查看内核是否已经更新了。

移除多余的内核 如果系统内有多个内核,可以选择删除不需要的内核,也可以不删除留在那里。 删除内核需要安装yum-utils。

使用以下命令进行删除。需要注意的是,只有系统上有超过桑哥以上的内核时,才会按照从旧到新的顺序依次删除,如果没有那么多的内核,则不会有删除旧内核的行为。

 

openvpn架设

http://zhuwanjun.com/?m=201409   CentOS安装OpenVPN 发表评论 CentOS版本:6.4 OpenVPN版本:2.3.4 1.安装依赖包 yum install openssl-devel lzo-devel pam-devel gcc 2.下载安装包 从官网下载安装包openvpn-2.3.4.tar.gz,解压 ./configure make make install 3.安装easy-rsa 新建/etc/openvpn 下载wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip 解压上述文件,进入解压后的目录 cp -r ./easy-rsa /etc/openvpn 修改/etc/openvpn/easy-rsa/2.0/var文件 # These are the default values for fields # which will be placed in the certificate. # Don’t leave any of Read more…

centos7 在开机启动时配置grub进入字符界面

centos 7 从字符界面改成图形界面启动后, 启动失败, 在started accounts service 这一步卡住, 经分析可能跟图形驱动有关,  要改回字符界面, 在开机grub时, 选内核, 按e, 在有linux16的这一行末, 添加 digit 3, ctrl-x重启即可进入字符界面: 下面是网上搜索到的: https://www.centos.org/forums/viewtopic.php?t=47928 On the initial grub boot screen you press Esc to get the kernel list then hit ‘e’ to edit the top one, scroll down to the ‘linux16’ or ‘linuxefi’ lines Read more…

磁盘逻辑分区管理

pvcreate -ff /dev/sdb vgcreate data /dev/sdb #卷组名 pvscan vgscan vgdisplay pesize   查看Free  PE 值为51199 pvdisplay lvcreate -l 51199 data –name datalv #data为vg的名字 datalv是逻辑卷名 mkfs.ext4 /dev/mapper/data-datalv #格式化  /dev/mapper/vg名-lv名 e2label /dev/mapper/data-datalv data #给lv一个标签 vim /etc/fstab label=data /data ext4 defaults 1 2 #开启启动

centos-7.1 利用nginx 搭建局域网私有yum 源

系统环境:

1、安装nignx 及创建yum 源文件所需的包

2、修改nginx的配置文件

3、安装扩展源:

4、创建rpm 包存放目录:

5、在/usr/local/sbin 目录下新建rpm包下载脚本:

6、进入 /data/repo 目录,执行rpm 脚本,下载所有的repo 包(注意:这个时间非常长)。在执行之前,先清除本地yum 缓存并重新生成缓存:

7、下载完成后,启动nginx 服务,并开启防火墙的80 端口:

同时,测试访问yum 源,确保是下面这样的: 8、插入centos 7 的everythin 光盘,挂载到 /mnt:

9、执行 createrepo 创建yum 缓存数据(根据服务器性能所需的时间不一):

10、删除客户端 /etc/yum.repos.d 目下的所有配置,重新新建centos-7.repo 文件,配置如下:

11、清除客户端yum 缓存,重新生成缓存数据:

13、卸载挂载的iso Read more…