Linux应急响应:进程环境变量的妙用

admin 2024年11月20日22:00:09评论18 views字数 1242阅读4分8秒阅读模式

 

0x00 前 言

在Linux系统中,进程的环境变量是一些用来传递配置信息键值对。当一个进程被创建,会继承其父进程的所有环境变量(如下所示)。操作系统通过/proc/[pid]/environ文件向用户态提供查看进程环境变量的途径,该文件内容由一个个键值对构成,并以空字节()分隔。

Linux应急响应:进程环境变量的妙用

部分攻击手段会在登录终端后设置临时环境变量,在执行完恶意进程后,终端进程退出,临时环境变量即被清除。那么去检查像.bashrc/etc/profile文件等并不能发现异常配置,因为上述的环境变量是临时的,并不会持久化。所以在应急响应过程中,进程的环境变量也是一个必需的检查项。

笔者通过本文和各位读者分享Linux应急响应过程中进程环境变量的妙用,希望对各位有所帮助。

0x01 正 文

校验数据来源的正确性

上文提到环境变量的数据来源为/proc/pid/envrion文件,正常情况下,这个文件的格式是非常固定的:n*(key=value'�'),如果不满足这个格式,那么进程的环境变量大概率被篡改过。篡改环境变量的行为并不能直接判定该进程为恶意进程,因为很多正常的进程也会出现此情况,这个在之前Linux进程伪装系列的三篇文章中有提到过,此处不再赘述。

Linux应急响应:进程环境变量的妙用

如果说进程的环境变量格式正常,那么我们可以通过tr命令将空字节替换为换行符,以可读性较高的形式去阅读进程的环境变量。

Linux应急响应:进程环境变量的妙用

分析关键环境变量

获取到环境变量信息之后,应当关注哪些环境变量的值呢?笔者通常关注如下环境变量:

环境变量

含义

USER/LOGNAME

进程运行时登录的用户,两个值应该是相同的

SSH_CLIENT

进程是用户通过ssh登录终端后创建的,信息中包含了登录IP地址

SSH_CONNECTION

同SSH_CLIENT,但信息中多了本机IP

PWD

进程创建时所处目录

OLDPWD

进程创建前从OLDPWD切换到PWD

HISCONTROL

如果值包含ignorespace,则代表如果执行的命令以空格开始,则不记录到历史记录中

HISTSIZE

如果值为0,则代表不会记录历史命令,可能是攻击者所为

HISTFILESIZE

同上

HISTFILE

如果值为/dev/null等异常文件,则代表不会记录历史命令,可能是攻击者所为

HISTIGNORE

忽略特定命令,如果为*,则忽略所有

还有一个环境变量传递的信息并不直接,但是笔者认为也有一定的参考价值,可以辅助推测进程行为。SHLVL是一个表示shell嵌套级别的环境变量,每当启动一个新的shell,当前的SHLVL就会+1。默认情况下SHLVL初始值为1,但是也不绝对,例如ubuntu16.10的默认值为2。

Linux应急响应:进程环境变量的妙用

如果一个进程存在SHLVL的环境变量,首先说明该进程创建过shell。如果值等于默认值,则说明只调用过1次;但是如果超过默认值,也就是说存在嵌套创建shell的情况,从攻击手段的角度来讲,笔者会优先考虑进程本身或进程创建前是否存在提权行为

 

原文始发于微信公众号(风奕安全):Linux应急响应:进程环境变量的妙用

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月20日22:00:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Linux应急响应:进程环境变量的妙用https://cn-sec.com/archives/3410286.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息