赞
踩
本文介绍下在应急响应过程中,linux系统下排查系统、进程、服务可能用到的命令,有些命令选项很多,读者可以仅看常用选项。不涉及内存、进程注入、rootkit等高级攻击的排查。
-a, --all 按顺序打印全部信息,如果 -p 和 -i 的信息是未知,那么省略。
-s, --kernel-name 打印内核名称。
-n, --nodename 打印网络节点主机名称。
-r, --kernel-release 打印内核release。
-v, --kernel-version 打印内核版本。
-m, --machine 打印机器名称。
-p, --processor 打印处理器名称。
-i, --hardware-platform 打印硬件平台名称。
-o, --operating-system 打印操作系统名称。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
常用-n参数,n为展示的数量
systemctl命令 是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
任务 | 旧指令 | 新指令 |
---|---|---|
使某服务自动启动 | chkconfig --level 3 httpd on | systemctl enable httpd.service |
使某服务不自动启动 | chkconfig --level 3 httpd off | systemctl disable httpd.service |
检查服务状态 | service httpd status | systemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active) |
显示所有已启动的服务 | chkconfig --list | systemctl list-units --type=service |
启动服务 | service httpd start | systemctl start httpd.service |
停止服务 | service httpd stop | systemctl stop httpd.service |
重启服务 | service httpd restart | systemctl restart httpd.service |
重载服务 | service httpd reload | systemctl reload httpd.service |
举例
systemctl list-units --type=service
查看自启服务
systemctl list-units --type=service | grep enabled
linux自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。
Linux下的任务调度分为两类: 系统任务调度 和 用户任务调度 。
系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
/etc/crontab文件包括下面几行:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
前四行是用来配置crond任务运行的环境变量
第一行SHELL变量指定了系统要使用哪个shell,这里是bash
第二行PATH变量指定了系统执行命令的路径
第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
用户任务调度: 用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致。
crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
在以上各个字段中,还可以使用以下特殊字符:
举例
每月2号和每周五,每两分钟以lady_killer用户身份执行一次touch /tmp/lady_killer_test.txt
可以看到已经创建成功
默认读取~/.bash_history中的历史命令
-c 清空历史列表。
-d offset 根据offset删除记录。如果是正数则表示offset位置的记录,如果为负数则表示从结尾向前offset位置的记录。
-a 将当前终端的历史记录行添加到历史记录文件。
-n 将尚未从历史文件中读取的历史行追加到当前历史列表中。
-r 读取历史文件,并将其内容附加到历史列表中。
-w 将当前历史记录列表附加到历史记录文件中并且附加它们到历史列表中。
-p 在每个arg上执行历史记录扩展并在标准输出上显示结果,而不将结果存储在历史记录列表中。
-s 将每个arg作为单个条目附加到历史记录列表。
查看最近5条
在命令行中,可以使用符号!执行指定序号的历史命令
接下来看看攻击者删除历史命令的方法
方法1:
echo '' > ~/.bash_history
可以看到留下了清理痕迹
方法2:
vim ~/.bash_history
依然留下了清理痕迹
方法3:
history -c
命令行terminal无法查看,但文件中还存在
方法4:
rm ~/.bash_history && touch ~/.bash_history
依然留下了清理痕迹
总之,通过清理痕迹的方式能够让应急同学看不到执行了什么命令,但最后的清理动作会保留。
应急同学可以学习一下history加固相关知识,增加条数、IP、执行用户,以及使用chattr防止篡改。
ps实用程序显示标题行,然后显示包含有关所有具有控制终端的进程的信息的行。
通过使用-a、-G、-g、-p、-T、-t、-U和-u选项的任意组合,可以选择显示不同的进程集。如果给出了多个这些选项中的一个以上,则ps将选择满足至少一个给定选项的所有进程。
对于已选择显示的进程,ps通常会每个进程显示一行。对于某些进程,-M选项可能会导致多个输出行(每个线程一行)。默认情况下,所有这些输出行首先按控制终端排序,然后按进程ID排序。-m、-r和-v选项将更改排序顺序。如果给出了多个排序选项,则所选进程将按最后指定的排序选项进行排序。
对于已选择显示的进程,所选择要显示的信息是基于一组关键字来选择的。默认输出格式包括每个进程的进程ID、控制终端、CPU时间(包括用户和系统时间)、状态和关联命令。
-A:显示其他用户进程的信息,包括那些没有控制终端的进程。 -a:显示其他用户进程以及您自己的进程信息。这将跳过没有控制终端的进程,除非同时指定了-x选项。 -C:通过使用“原始”CPU计算来改变CPU百分比的计算方式,该计算方式忽略“常驻”时间(通常没有影响)。 -c:将“command”列的输出更改为仅包含可执行文件名,而不是完整的命令行。 -d:类似于-A,但排除会话领导者。 -E:同时显示环境变量。这不会反映进程启动后的环境变化。 -e:与-A相同。 -f:显示uid、pid、父进程pid、最近的CPU使用率、进程启动时间、控制终端、已用CPU时间以及关联的命令。如果还使用了-u选项,则显示用户名而不是数字UID。当使用-o或-O在-f之后进行显示时,命令字段不像其他格式那样被严重截断。 -G:显示正在以指定真实组ID运行的进程的信息。 -g:显示具有指定进程组领导者的进程信息。 -h:根据需要重复打印信息标题,以保证每页信息有一个标题。 -j:打印与以下关键词相关联的信息:用户、pid、ppid、pgid、sess、jobc、state、tt、time和command。 -L:列出可用于-O和-o选项的关键词集。 -l:显示与以下关键词相关联的信息:uid、pid、ppid、flags、cpu、pri、nice、vsz=SZ、rss、wchan、state=S、paddr=ADDR、tty、time和command=CMD。 -M:打印与每个任务相对应的线程。 -m:按内存使用进行排序,而不是按控制终端和进程ID的组合排序。 -O:在默认信息显示中,在进程ID之后添加与空格或逗号分隔的关键词列表相关的信息。关键词可以用等号('=')和字符串附加。这将导致打印的标题使用指定的字符串而不是标准标题。 -o:显示与空格或逗号分隔的指定关键词列表相关联的信息。也可以以多个-o选项的形式给出多个关键词。关键词可以用等号('=')和字符串附加。这将导致打印的标题使用指定的字符串而不是标准标题。如果所有关键词的标题文本为空,将不会写入标题行。 -p:显示与指定进程ID匹配的进程信息。 -r:按当前CPU使用率进行排序,而不是按控制终端和进程ID的组合排序。 -S:通过将所有退出的子进程时间累加到其父进程中,改变进程时间的计算方式。 -x: ps命令会列出所有与当前用户相关的进程,无论是通过终端启动的还是通过其他方式启动的。
包括进程ID、CPU使用率、内存使用率等。
ps -aux
包括进程ID、父进程ID、用户、状态、运行时间、终端等。
ps -ef
ps -eLf:,包括线程ID、优先级、状态、CPU使用率等。
只显示进程ID、父进程ID、命令、CPU使用率和内存使用率。
ps -eo pid,ppid,cmd,%cpu,%mem
ps -p <PID> -f
ps -u <USER>
ps -aux --sort=-%cpu
-a:列出打开文件存在的进程;
-c<进程名>:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程(协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
-v:显示版本信息
列出指定进程号所打开的文件
lsof -p 636
获取端口对应的进程
lsof -i:8082
列出目录下被打开的文件和对应进程
lsof /elkeid/mongodb
动态实时显示进程信息
-d, --delay: 指定刷新时间间隔,单位为秒。
-n, --iterations: 指定刷新次数后退出 top。
-b, --batch: 使用批处理模式运行 top,适用于将输出传递给其他程序。
-c, --command: 显示完整的命令行。
-u, --user: 显示指定用户的进程信息。
-p, --pid: 显示指定进程 ID 的信息。
-H, --threads: 显示线程信息。
-i, --ignore-case: 在排序时忽略大小写。
-o, --old-style: 启用旧风格的输出格式。
-C, --no-command: 隐藏命令名称和参数。
-w, --width: 指定输出宽度。
-P, --sort-field: 按指定字段排序(如 %CPU、%MEM)。
显示完整命令行
top -c
-s sig 信号名称。
-n sig 信号名称对应的数字。
-l 列出信号名称。如果在该选项后提供了数字那么假设它是信号名称对应的数字。
-L 等价于-l选项。
使用9)SIGKILL杀死进程
kill -9 30634
-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-q 禁止输出关于脱离的消息.
-r 打印出相对时间关于,每一个系统调用.
-t 在输出中的每一行前加上时间信息.
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 微秒级输出,以秒了表示时间.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.
-x 以十六进制形式输出非标准字符串
-xx 所有字符串以十六进制形式输出.
-a column 设置返回值的输出位置.默认 为40.
-e expr 指定一个表达式,用来控制如何跟踪.格式:[qualifier=][!]value1[,value2]…
qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否定符号.例如:-eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open 表示跟踪除了open以外的其他调用.有两个特殊的符号 all 和 none. 注意有些shell使用!来执行历史记录里的命令,所以要使用\.
-e trace=set 只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all.
-e trace=file 只跟踪有关文件操作的系统调用.
-e trace=process 只跟踪有关进程控制的系统调用.
-e trace=network 跟踪与网络有关的所有系统调用.
-e strace=signal 跟踪所有与系统信号有关的 系统调用
-e trace=ipc 跟踪所有与进程通讯有关的系统调用
-e abbrev=set 设定strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all.
-e raw=set 将指定的系统调用的参数以十六进制显示.
-e signal=set 指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号.
-e read=set 输出从指定文件中读出 的数据.例如: -e read=3,5
-e write=set 输出写入到指定文件中的数据.
-o filename 将strace的输出写入文件filename
-p pid 跟踪指定的进程pid.
-s strsize 指定输出的字符串的最大长度.默认为32.文件名一直全部输出.
-u username 以username的UID和GID执行被跟踪的命令
统计系统调用
strace -c ./test
test.c
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("%09d\n", a);
return 0;
}
跟踪进程
strace -p 4776
-a:显示命令行中指定的所有文件;
-k:杀死访问指定文件的所有进程;
-i:杀死进程前需要用户进行确认;
-l:列出所有已知信号名;
-m:指定一个被加载的文件系统或一个被加载的块设备;
-n:选择不同的名称空间;
-u:在每个进程后显示所属的用户名。
查看文件进程
fuser /usr/bin/python
查看所属的用户
fuser -u /usr/bin/python
切换到指定用户,没有时默认为root
-m, -p, --preserve-environment: 不重置环境变量
-g, --group : 指定主要组
-G, --supp-group : 指定附加组
-, -l, --login: 将 shell 设置为登录 shell
-c, --command : 使用 -c 将单个命令传递给 shell
–session-command : 使用 -c 将单个命令传递给 shell,并且不创建新会话
-f, --fast: 对于 csh 或 tcsh,传递 -f 给 shell
-s, --shell : 如果 /etc/shells 允许,使用指定的 shell 运行
-h, --help: 显示帮助信息并退出
-V, --version: 输出版本信息并退出
su - 用户名,这样可以直接切换到该用户家目录
-A, --askpass: 使用辅助程序提示输入密码
-b, --background: 在后台运行命令
-C, --close-from=num: 关闭所有文件描述符 >= num
-E, --preserve-env: 运行命令时保留用户环境
–preserve-env=list: 保留特定的环境变量
-e, --edit: 编辑文件而不是运行命令
-g, --group=group: 以指定的组名或组ID运行命令
-H, --set-home: 将 HOME 变量设置为目标用户的主目录
-h, --help: 显示帮助信息并退出
-h, --host=host: 在主机上运行命令(如果插件支持)
-i, --login: 以目标用户的登录 shell 运行;也可以指定一个命令
-K, --remove-timestamp: 完全移除时间戳文件
-k, --reset-timestamp: 使时间戳文件失效
-l, --list: 列出用户的权限或检查特定命令;使用两次以获取更长的格式
-n, --non-interactive: 非交互模式,不会提示输入
-P, --preserve-groups: 保持组向量而不是设置为目标用户的组
-p, --prompt=prompt: 使用指定的密码提示
-r, --role=role: 使用指定角色创建 SELinux 安全上下文
-S, --stdin: 从标准输入读取密码
-s, --shell: 以目标用户的 shell 运行;也可以指定一个命令
-t, --type=type: 使用指定类型创建 SELinux 安全上下文
-T, --command-timeout=timeout: 在指定的时间限制后终止命令
-U, --other-user=user: 在列表模式下,显示用户的权限
-u, --user=user: 以指定的用户名或用户ID运行命令(或编辑文件)
-V, --version: 显示版本信息并退出
-v, --validate: 更新用户的时间戳而不运行命令
–: 停止处理命令行参数
后面接命令,以root权限运行
以root用户,交互式执行
sudo -i
更多命令学习:
应急响应-主机安全之文件相关命令(Linux操作系统)
《网络安全应急响应技术实战指南》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。