蓝队笔记

通篇摘录,尚待学习= =

应急响应

https://bypass007.github.io/Emergency-Response-Notes/Summary/

流程

image-20240627161826663

https://mp.weixin.qq.com/s/APfr2ctaq1GHNpJeSxQ3EQ

截图

应急前沟通

现场现象是什么?如何发现的?(依据是什么) ?
什么时候发现的?
目前是否有做物理隔离(断网) ?
受害机器是哪个?
受害服务有几台?(1 台/N 台)
最先发现是哪台 ?
这台服务器对外有哪些服务?
这台服务器于其他机器是否处于同一个内网?
操作系统类型?
是否有公网映射业务?
远程管理方式?
网络边界有没有流量监控设备?
主机侧是否有 EDR 等安全设备

image-20240627162018816

问题处置

事件判断:判断是否是安全事件,何种安全事件,勒索、挖矿、断网、DDoS等等。以及安全事件的危害程度

临时处置:给出客户临时处置建议,断网隔离,保护现场环境,切断供给链

深入分析:收集客户信息和中毒主机信息,包括样本,日志分析、进程分析、启动项分析、样本分析

清理处置:直接杀掉进程,删除文件,打补丁,抑或是修复文件。 产出报告:整理并输出完整的安全事件报告

截图

事件分析

Web 攻击

相关表现: 页面被篡改、恶意推广、黑词黑页、webshell
相关危害: 导致搜索引擎告警、微信等 app 分享告警、首页敏感内容、拖库、内网沦陷等排查
要点: 能否多个环境下复现异常现象;确定相关资产是否存在;恶意文件是否确实存在于服务器上
操作要点: 备份文件;webshell 后门查杀;web 日志分析;web 中间件缓存处理;web 中间件配置检查;重启 web 中间件;服务器后门检查;
防护措施: 加固相关 web 应用,修改相关系统的所有用户密码

链路劫持

相关表现: 区域性服务不可用或返回异常内容
相关危害: 导致搜索引擎告警、微信等 app 分享告警、首页敏感内容等
排查要点: 能否多个环境下复现异常现象;确定相关资产是否存在;恶意文件是否确实存在于服务器上
操作要点: 跨地区、运营商进行测试,确定受影响范围:在能复现的环境中判断是 DNS 劫持还是 HTTP 劫持
防护措施: 重要业务部署 https

代理隧道

相关表现: 持续性或间断性外连行为,通常为 tcp 协议,对内网多个主机有访问行为
相关危害: 作为跳板机攻击其他内网资产
排查要点: 确定存在代理隧道的跳板机,通常为某时间段内集中访问内网多种资源的机器,判断隧道类型
防护措施: 完善内网 acl,服务器按业务需要通过白名单策略访问外网

替换系统命令

相关表现: 无明显表现
相关危害: 将后门、木马持久化在系统中:窃取账号、密码等重要凭证
排查要点: 使用包管理自带的包校验功能验证文件完整性,分析恶意文件行为,确定影响面
操作要点: 使用静态链接的 busybox;重新安装被替换的包
命令:

1
2
rpm -Va
dpkg --verify

ld.so.preload 动态链接库劫持

相关表现: 无明显表现
相关危害: 将后门、木马持久化在系统中:窃取账号、密码等重要凭证
排查要点: 检查/etc/ld.so.preload,ld.so(如/lib/x86_64-linux-gnu/ld-2.27.so)
操作要点: 使用静态链接的 busybox; 重启被注入恶意模块的进程,必要时直接重启系统

内核态 rootkit

相关表现: 无明显表现
相关危害: 将后门、木马持久化在系统中:隐藏文件、进程等信息
排查要点: 确定是否存在无法使用常规命令查看的文件、进程;
操作要点: 使用 tyton 内核态 rootkit 检测工具检测:检查/etc/modules 是否有未知的内核模块

计划任务

相关表现: 特定时间间隔触发木马、后门、网络链接、DNS 请求、篡改页面等行为
相关危害: 将后门、木马持久化在系统中:周期性篡改页面、拉取数据等
排查要点: 判断是否存在周期性出现的异常现象,检查/var/spool/cron/crontabs/,/etc/cron.*等常用计划任务配置文件
操作要点: 停止计划任务服务后再操作;注意辨别利用\r 回车符的障眼法小技巧

远控木马

相关表现: 有持续或间断性的对外网络链接或 DNS 请求等通信行为
相关危害: 窃取系统资料、作为跳板进一步攻击内网其他机器
排查要点: 关注 tcp、udp、icmp 等一切网络行为,检查注册表、服务、开机目录、计划任务等一系列常见的持久化点
操作要点: 检查网络连接,以及 IDS 设备上的异常远控告警

Windows

账号安全

1.弱口令,远程端口

2.可疑账号 lusrmgr.msc

3.隐藏账号,克隆账号

​ a.打开注册表

​ b.D 盾查杀

4.日志

​ a、Win+R 打开运行,输入“eventvwr.msc”,回车运行,打开“事件查看器”。

​ b、导出 Windows 日志–安全,利用 Log Parser 进行分析。

异常端口,进程

1、检查端口连接情况,是否有远程连接、可疑连接。

  • 检查方法:
  • a、netstat -ano 查看目前的网络连接,定位可疑的 ESTABLISHED
  • b、根据 netstat 定位出的 pid,再通过 tasklist 命令进行进程定位 tasklist | findstr “PID”

截图

2、进程

  • 检查方法:
  • a、开始–运行–输入 msinfo32,依次点击“软件环境 → 正在运行任务”就可以查看到进程的详细信息,比如进程路径、进程 ID、文件创建日期、启动时间等。
  • b、打开 D 盾_web 查杀工具,进程查看,关注没有签名信息的进程。
  • c、通过微软官方提供的 Process Explorer 等工具进行排查 。
  • d、查看可疑的进程及其子进程。可以通过观察以下内容:
1
2
3
4
5
6
解释
没有签名验证信息的进程
没有描述信息的进程
进程的属主
进程的路径是否合法
CPU或内存资源占用长时间过高的进程

3、小技巧:

a、查看端口对应的 PID: netstat -ano | findstr “port”

b、查看进程对应的 PID:任务管理器–查看–选择列–PID 或者 tasklist | findstr “PID”

c、查看进程对应的程序位置:

任务管理器–选择对应进程–右键打开文件位置

运行输入 wmic,cmd 界面 输入 process

d、tasklist /svc 进程–PID–服务

e、查看 Windows 服务所对应的端口: %system%/system32/drivers/etc/services(一般 %system% 就是 C:\Windows)

启动项,计划任务,服务

1、检查服务器是否有异常的启动项。

  • 检查方法:
  • a、登录服务器,单击【开始】>【所有程序】>【启动】,默认情况下此目录在是一个空目录,确认是否有非业务程序在该目录下。
  • b、单击开始菜单 >【运行】,输入 msconfig,查看是否存在命名异常的启动项目,是则取消勾选命名异常的启动项目,并到命令中显示的路径删除文件。
  • c、单击【开始】>【运行】,输入 regedit,打开注册表,查看开机启动项是否正常,特别注意如下三个注册表项: HKEY_CURRENT_USER\software\micorsoft\windows\currentversion\run HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce 检查右侧是否有启动异常的项目,如有请删除,并建议安装杀毒软件进行病毒查杀,清除残留病毒或木马。
  • d、利用安全软件查看启动项、开机时间管理等。
  • e、组策略,运行 gpedit.msc。

截图

2、检查计划任务

  • 检查方法:
  • a、单击【开始】>【设置】>【控制面板】>【任务计划】,查看计划任务属性,便可以发现木马文件的路径。
  • b、单击【开始】>【运行】;输入 cmd,然后输入 at,检查计算机与网络上的其它计算机之间的会话或计划任务,如有,则确认是否为正常连接。

3、服务自启动

  • 检查方法:单击【开始】>【运行】,输入 services.msc,注意服务状态和启动类型,检查是否有异常服务。

系统信息

1、查看系统版本以及补丁信息

  • 检查方法:单击【开始】>【运行】,输入 systeminfo,查看系统信息

2、查找可疑目录及文件

  • 检查方法:
    • a、 查看用户目录,新建账号会在这个目录生成一个用户目录,查看是否有新建用户目录。
    • Window 2003 C:\Documents and Settings
      Window 2008R2 C:\Users\

3、得到发现 WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?

日志

image-20240627162645478

系统日志

  • 分析方法:
  • a、前提:开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等。
  • b、Win+R 打开运行,输入“eventvwr.msc”,回车运行,打开“事件查看器”。
  • C、导出应用程序日志、安全日志、系统日志,利用 Log Parser 进行分析。
  • 截图

WEB 访问日志

  • 分析方法:
  • a、找到中间件的 web 日志,打包到本地方便进行分析。
  • b、推荐工具:Window 下,推荐用 EmEditor 进行日志分析,支持大文本,搜索效率还不错。
  • Linux 下,使用 Shell 命令组合查询分析

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
获取本机用户列表: net user
本机管理员: net localgroup administrators
查看当前会话: net session
查看当前运行的服务: net start
远程连接: net use
查看当前用户下的共享目录: net share
最近打开的文件:
%UserProfile%\Recent
%APPDATA%\Microsoft\Windows\Recent
查找文件中的字符串: findstr /m /i /s "hello" *.txt
查看网络连接: netstat - ano
操作系统的详细配置信息: systeminfo
获取系统进程信息: Wmic process
根据应用程序查找PID: wmic process where name="cmd.exe” get processid,executablepath,name
根据PID查找应用程序: wmic process where processid="1” get executablepath,name
获取系统进程信息:tasklist
对于要查询特定dll的调用情况,可以使用命令tasklist /m dll名称
计算样本MD5: certutil -hashfile %样本文件名% MD5

工具

病毒分析

病毒查杀

病毒动态

在线扫描

webshell 查杀

PChunter
系统信息监控工具,主要拿来看数字签名
黑色是微软认证的
粉红色是未认证的
红色是可疑进程

Autoruns
启动项、计划任务等动态监测工具

Process Explorer
应用程序监测工具
数据量很大,需要过滤

TCPView
其实就是 netstat -ano 的输出,但是可视化方便处理

Microsoft Network Monitor
很小的一个流量监控软件
安装完需要重启,可以监测单个程序进程

D 盾
查杀 webshell

Everything
快速查找文件和目录

sysmon
微软开发的系统监控工具,常用来判断挖矿后门等等

火绒剑

威胁分析平台

BeaconEye
监测 CS 木马后门特征

DumpIt
内存取证工具,需要 dump 整个系统,取证空间占用太大,不建议使用
替代工具:FTK ImagerWinPMem

Volatility
内存取证工具

Linux

账号安全,历史命令,异常端口,开机启动、服务,异常文件,/tmp/user/bin 目录、进程

基本命令

1
2
**top和ps -aux**
查看系统资源占用
1
2
**netstat -antpl**
查看网络连接以及其对应可执行程序
1
2
**lsof**
查看开放端口的进程
1
2
3
4
**登录信息查看**
显示错误的尝试登录信息: lastb
显示系统用户最近的登录信息: last
现实所有的用户最近的登录信息: lastlog
1
2
**grep**
查找符合条件的字符串:netstat -antpl lgrep 22
1
2
**crontab**
查看定时任务: crontab -1 、 cat /etc/crontab
1
2
**历史命令**
查看历史命令: historycat ~/.bash history
1
2
3
4
5
6
7
8
9
10
**校验RPM软件包**
校验RPM软件包: rpm -Va、dpkg -verify
S:表示对应文件的大小 (Size) 不一致
M: 表示对于文件的mode不一致
5:表示对应文件的MD5不一致
D:表示文件的major和minor号不一致
L:表示文件的符号连接内容不一致
U:表示文件的owner不一致
G: 表示文件的group不一致
T:表示文件的修改时间不一致
1
2
3
4
5
6
7
8
9
**其它**
登录成功的IP
grep “Accepted” /var/log/secure | awk ‘{print $11}’ | sort | uniq -c | sort -nr | more
定位有爆破行为的IP
grep “Failed password” /var/log/secure awk ‘{print $11}’ | sort | uniq -c | sort -nr | more
查看隐藏进程
ps -ef awk ‘{print $11}’ | sort -n | uniq >1
ls /proc | sort -n | uniq >2
diff 1 2

账号安全

基本使用:

1
2
3
4
5
6
7
8
9
解释
1、用户信息文件/etc/passwd
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
注意:无密码只允许本机登陆,远程不允许登陆
2、影子文件/etc/shadow
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
1
2
3
who     查看当前登录用户(tty本地登陆  pts远程登录)
w 查看系统信息,想知道某一时刻用户的行为
uptime 查看登陆多久、多少用户,负载

入侵排查:

1
2
3
4
5
6
7
8
9
10
11
解释
1、查询特权用户特权用户(uid 为0)
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
2、查询可以远程登录的帐号信息
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
3、除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
[root@localhost ~]# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
4、禁用或删除多余及可疑的帐号
usermod -L user 禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头
userdel user 删除user用户
userdel -r user 将删除user用户,并且将/home目录下的user目录一并删除

历史命令

基本使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
解释
通过.bash_history查看帐号执行过的系统命令
1、root的历史命令
histroy
2、打开/home各帐号目录下的.bash_history,查看普通帐号的历史命令
为历史的命令增加登录的IP地址、执行命令时间等信息:
1)保存1万条命令
sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
2)在/etc/profile的文件尾部添加如下行数配置信息:
######jiagu history xianshi#########
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"
######### jiagu history xianshi ##########
3)source /etc/profile让配置生效
生成效果: 1 2018-07-10 19:45:39 192.168.204.1 root source /etc/profile
3、历史操作命令的清除:history -c
但此命令并不会清除保存在文件中的记录,因此需要手动删除.bash_profile文件中的记录。

入侵排查:

1
2
进入用户目录下
cat .bash_history >> history.txt

异常端口

使用 netstat 网络连接命令,分析可疑端口、IP、PID

1
2
3
netstat -antlp|more
查看下pid所对应的进程文件路径,
运行ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 为对应的pid 号)

异常进程

使用 ps 命令,分析进程

1
ps aux | grep pid

开机启动

基本使用:

系统运行级别示意图:

查看运行级别命令 runlevel

系统默认允许级别

1
2
vi  /etc/inittab
id=3:initdefault 系统开机后直接进入哪个运行级别

开机启动配置文件

1
2
/etc/rc.local
/etc/rc.d/rc[0~6].d

例子:当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/etc/init.d 目录下,然后在/etc/rc.d/rc*.d 中建立软链接即可

1
root@localhost ~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh

此处 sshd 是具体服务的脚本文件,S100ssh 是其软链接,S 开头代表加载时自启动;如果是 K 开头的脚本文件,代表运行级别加载时需要关闭的。

入侵排查:

启动项文件:

more /etc/rc.local /etc/rc.d/rc[0~6].d

ls -l /etc/rc.d/rc3.d/

定时任务

基本使用

1、利用 crontab 创建计划任务

  • 基本命令

crontab -l 列出某个用户 cron 服务的详细内容

Tips:默认编写的 crontab 文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root

crontab -r 删除每个用户 cront 任务(谨慎:删除所有的计划任务)

crontab -e 使用编辑器编辑当前的 crontab 文件

如:_/1 _* echo “hello world” >> /tmp/test.txt 每分钟写入文件

2、利用 anacron 实现异步定时任务调度

  • 使用案例

每天运行 /home/backup.sh 脚本: vi /etc/anacrontab @daily 10 example.daily /bin/bash /home/backup.sh

当机器在 backup.sh 期望被运行时是关机的,anacron 会在机器开机十分钟之后运行它,而不用再等待 7 天。

入侵排查

重点关注以下目录中是否存在恶意脚本

1
2
3
4
5
6
7
8
9
10
解释
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*

小技巧:

1
more /etc/cron.daily/*  查看目录下所有文件

服务

服务自启动

第一种修改方法:

1
2
3
chkconfig [--level 运行级别] [独立服务名] [on|off]
chkconfig –level 2345 httpd on 开启自启动
chkconfig httpd on (默认level是2345

第二种修改方法:

1
2
修改/etc/re.d/rc.local 文件  
加入 /etc/init.d/httpd start

第三种修改方法:

使用 ntsysv 命令管理自启动,可以管理独立服务和 xinetd 服务。

入侵排查

1、查询已安装的服务:

RPM 包安装的服务

1
2
3
4
5
6
7
8
解释
chkconfig --list 查看服务自启动状态,可以看到所有的RPM包安装的服务
ps aux | grep crond 查看当前服务
系统在35级别下的启动项
中文环境
chkconfig --list | grep "3:启用\|5:启用"
英文环境
chkconfig --list | grep "3:on\|5:on"

源码包安装的服务

1
2
3
查看服务安装位置 ,一般是在/user/local/
service httpd start
搜索/etc/rc.d/init.d/ 查看是否存在

异常文件

1、查看敏感目录,如/tmp 目录下的文件,同时注意隐藏文件夹,以“.*”为名的文件夹具有隐藏属性

2、得到发现 WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?

可以使用 find 命令来查找,如 find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前访问过的文件

3、针对可疑文件可以使用 stat 进行创建修改时间。

日志

日志默认存放位置:/var/log/

查看日志配置情况:more /etc/rsyslog.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
定位有多少IP在爆破主机的root帐号:    
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

定位有哪些IP在爆破:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c

爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr

登录成功的IP有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

增加一个用户kali日志:
Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali, shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali
#grep "useradd" /var/log/secure

删除用户kali日志:
Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'
grep "userdel" /var/log/secure

su切换用户:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)

sudo授权执行
sudo -l

列出当天访问次数最多的IP命令:
cut -d- -f 1 log_file|uniq -c | sort -rn | head -20

查看当天有多少个IP访问:
awk '{print $1}' log_file|sort|uniq|wc -l

查看某一个页面被访问的次数:
grep "/index.php" log_file | wc -l

查看每一个IP访问了多少个页面:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file

将每个IP访问的页面数进行从小到大排序:
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n

查看某一个IP访问了哪些页面:
grep ^111.111.111.111 log_file| awk '{print $1,$7}'

去掉搜索引擎统计当天的页面:
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l

查看2018年6月21日14时这一个小时内有多少IP访问:
awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}'| sort | uniq | wc -l

应急工具

BusyBox
静态链接库的 BusyBox
当命令被替换时使用
赋予可执行权限后.\即可

chkrootkit
监测 RootKit 的脚本

Rkhunter
同上

unhide
查找隐藏的 UDP/TCP 进程

ClamAV
检测各种恶意木马,病毒,进程
注意是否存在 so 文件的注入

河马 Webshell

RPM 包

查找文件中的恶意/危险函数

1
2
3
PHP: eval(、system(、assert (
JSP: getRunTime(、FileOutputStream(
ASP: eval(、execute(、ExecuteGlobal (

从日志记录中查找
查看每个 IP 地址访问次数:
cat access.log |awk ‘{print $1}’ |sort|uniq - c
访问 URL 排序:
cat access.log |awk ‘{print $1}’ |sort|uniq - c |sort -rn|head
访问指定资源日志:
cat access.log |awk ‘{print $7}’ |grep /%25Domain |sort|uniq - c |sort -rn|more

等保测评

学习干货|等保测评2.0技术自查阶段(中) (qq.com)

windwos

lusrmgr.msc:用户账号与组设置,密码过期

secpol.msc:用户权限,登陆限制,密码设置策略,审计功能开启

netplwiz:设置“必须输入密码”

eventvwr.msc:审计日志

dconcnfg:组件

firewall.cpl:waf

appwiz.cpl:程序功能,补丁

services.msc:服务

linux

用户身份/etc/shadow

image-20240707113633366

登录控制

  • linux /etc/login.defs
  • ubuntu /etc/pam.d/common-password
  • centos /etc/pam.d/system-auth

文件权限分配

r-4 w-2 x-1 配置文件不超过644 可执行不超过755

远程登录

/etc/ssh/sshd_config

用户权限

/etc/sudoers

安全审计

systemctl status rsyslog(auditd)

日志工具

/var/log/syslog

/vatr/log/audit/audit.log

入侵防范

uanme -a

apt-get update

Webshell

检查

首先,通过浏览器以 HTTP 协议访问 Web Server 上的一个 CGI 文件,是一个合法的 TCP 连接,TCP/IP 的应用层之下没有任何特征,只能在应用层进行检测
黑客不管是传文件还是改文件,必然有一个文件会包含 webshell 代码,很容易想到从文件代码入手,这是静态特征检测
webshell 运行后,B/S 数据通过 HTTP 交互,HTTP 请求/响应中可以找到蛛丝马迹,这是动态特征检测

【静态检测】

静态检测通过匹配特征码,特征值,危险函数函数来查找 webshell 的方法。

优点是快速方便,对已知的 webshell 查找准确率高,部署方便。

缺点漏报率、误报率高,无法查找 0day 型 webshell,而且容易被绕过。

【静态检测配合人工】
一个检查工具 https://github.com/he1m4n6a/findWebshell

【动态检测】

Linux 下就是 nobody 用户起了 bash,Win 下就是 IIS User 启动 cmd,这些都是动态特征。

如果黑客反向连接的话,那很更容易检测了,Agent 和 IDS 都可以抓现行。

Webshell 总有一个 HTTP 请求,如果我在网络层监控 HTTP,并且检测到有人访问了一个从没反问过得文件,而且返回了 200,则很容易定位到 webshell,这便是 http 异常模型检测,就和检测文件变化一样,如果非管理员新增文件,则说明被人入侵了。

缺点也很明显,黑客只要利用原文件就很轻易绕过了,并且部署代价高,网站时常更新的话规则也要不断添加。

【日志检测】

使用 Webshell 一般不会在系统日志中留下记录,但是会在网站的 web 日志中留下 Webshell 页

面的访问数据和数据提交记录。

日志分析检测技术通过大量的日志文件建立请求模型从而检测出异常文件,称之为:HTTP 异常请求模型检测

【寻找 webshell】
1.自动化查找:D 盾 河马 fotify
2.手动查找:windows sublime 全文件夹查找 IDE PHPSTORM 全局查找
Linux 命令查找 grep -rn "eval(" *
webshell 特征 PHP 的危险函数
还有 phar <?php XXXXX

防护

1.限制上传的文件夹解析方式

2.匹配文件夹里的脚本类型文件,将其设置为无法读取及操作。

3.给予上传的文件夹二级域名并且不给予解析权限

4.只能局域网访问

问题处置

文件无法删除

进程占用

1
lsof xxxx.xx

隐藏属性

1
2
3
sattr xxxx.xx
chattr -a xxxx.xx
chattr -i xxxx.xx

上层文件存在 SBIT 权限

这种情况只存在于非 root 权限去删除其他用户创建的目录的情况,即使文件权限是 777 也无法进行删除。
当目录被设置了粘滞位权限以后,即便用户对该目录有写入权限,也不能删除该目录中其他用户的文件数据,而是只有该文件的所有者和 root 用户才有权将其删除。
这种办法可以保持一种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据。
需要注意的是,粘滞位权限只能针对目录设置,对于文件无效。
设置了粘滞位权限的目录,使用 ls 命令查看其属性时,其他用户权限处的“x”将变为“t”。
粘滞位权限都是针对其他用户设置,使用 chmod 命令设置目录权限时,“o+t”、“o-t”权限模式可分别用于添加、移除粘滞位权限。

netstat -pantu 不显示 pid 而显示 -

可能是使用了 mkdir .hidden 或者 mount -o bind .hidden /proc/PID 来隐藏

1
2
cat /proc/$$/mountinfo   //查询挂载信息
umount /proc/PID //取消挂载

ps 和 top 看不到恶意进程

  1. 挂载被隐藏(看上一个的操作)
  2. 命令被替换(使用 busybox 进行检修)
  3. LD_PRELOAD 等方法共享库劫持(使用 busybox 进行检修)

快速查找文件

【which】
从环境变量查找系统命令的具体文件位置
【whereis】
从/usr 目录快速查找文件
【locate】
从 locatedb 数据库查找文件路径
【find】
强大的搜索命令
find <检索路径> <选项> <搜索内容>
具体使用方法

确定系统信息

1
2
3
4
5
cat /etc/issue   //系统版本
uname -m
getconf LONG_BIT //查看系统位数
cat /proc/version //查看内核版本
uname -a

系统完整性检测

1
2
3
rpm -Va   //Centos
apt install debsums //Ubuntu、Debian
debsums --all --changed

系统文件监控工具

1
AIDE\inotify\tripwire

查看 glibc 版本

1
ldd --version

误删文件恢复

1
2
3
4
5
6
7
8
9
被删除的文件在进程的内存空间还保存着一份,可以通过访问某个目录来找到文件恢复
如果正在进行读写操作:
lsof //查找进程文件恢复即可
mount //查看所有挂载点
umount //删除挂载点
lsblk -f //查看所有设备的挂载情况
df -T 路径 //可查看该路径的所属挂载点、所在分区、所在分区的文件系统类型
cat /proc/filesystems //查看文件系统的类型
常用恢复工具有:Extundelete、Debugfs、R-Linux、Ext3grep、Ext4magic

批量检索文件并打印信息

1
find / -name "内容" | while read line; do if [ -f $line ]; then ls -al $line; elif [ -d $line ]; then ls -al ../ | grep $line; fi; done

拷贝取证

  1. 使用虚拟化平台存储快照
  2. 打包整个系统
  3. 全盘拷贝(推荐 clonezilla)
  4. 进程拷贝(推荐 CRIU)
  5. 组合运用(冻结进程 + 全盘拷贝 + 恢复进程)

远控后门

获取事件告警信息

监控 EDR、态势感知、防火墙等平台查看威胁告警以及日志。

定位后门文件

1
2
3
4
根据告警信息定位后门文件位置,查找进程pid
lsof | grep xxxx.xx
lsof /root/xxxx.xx
fuser /root/xxxx.xx

查看外连事件详情

1
2
3
4
根据五元组来查找通信的端口ip对应的pid
netstat -pantu | grep 114.114.114.114
netstat -pantu | grep 65533
lsof -i:65533

查找进程信息

1
2
3
4
5
6
7
8
9
查找进程相关文件
lsof -p 1234 (需要root权限)
pwdx
获取pid程序详细信息
lsof -p pid
pwdx pid
systemctl status pid
cat /proc/pid/maps
ls -al /proc/pid/exe

根据 pid 查看对应线程

1
2
3
ps H -T -p pid
ps -aLf pid
pstree -agplU(推荐使用)

确定进程运行时间

1
ps -eo pid,lstart,etime,cmd | grep <pid>

比对恶意文件的创建时间

1
2
stat xxx.xx
ls -al xxx.xx

样本采集分析

使用 SCP/Xshell 等将样本移出主机,计算哈希值后到威胁情报平台中去搜索
certutil -hashfile 文件 MD5

进程查杀

1
2
3
4
5
6
【查找子进程】
ps ajfx
systemctl status
【杀死进程】
kill -9 pid (这样子是杀不死子进程的!!!)
kill -9 -pid (杀掉进程组)

删除文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
查看文件占用,解除占用后删除
lsof xxxx.xx
移除 i, a 属性
chattr -ia file.sh
查看是否移除成功
lsattr file.sh
移除文件
rm -rf file.sh
奇怪文件名无法删除,先查inode再删除
ls -li xxxx.xx
find ./* -inum 12327526 -delete
find ./ -inum 12327526 -exec rm {} \;
find ./* -inum 12327526 -exec rm -i {} \;
find ./* -inum 12327526 -exec rm -f {} \;
find ./* -inum 12327526 |xargs rm -f
rm
find ./* -inum 12327526
目录挂载无法删除(Device or resource busy)
sudo lsblk -a
sudo umount /dev/sdb1
rm -rf xxxx.xx

威胁情报

威胁情报的获取源

谷歌:www.google.com

百度:www.baidu.com

Virustotal:www.virustotal.com

微步在线:x.threatbook.cn

腾讯哈勃:habo.qq.com

Virscan:virusscan.jotti.org

Freebuf:www.freebuf.com

Jotti:virusscan.jotti.org

Scandir:www.scandir.com

Alexa排名:www.alexa.com

备案查询:beian.cndns.com

深信服安全中心:sec.sangfor.com.cn

深信服威胁分析平台:wiki.sec.sangfor.com.cn

深信服EDR安全软件中心:edr.sangfor.com.cn

黑客通过随机域名,动态域名,近期域名,顶级域名,暗网代理域名攻击

病毒

  • 蠕虫:自动复制自身的副本到其它主机的病毒。
  • 木马:隐蔽性强,多用于监控用户行为或盗取用户数据的病毒。
  • 感染型病毒:能将自身恶意代码插入正常文件的病毒。
  • 脚本病毒:使用脚本编写的病毒。
  • 宏病毒:宏是微软公司为其Office软件包设计的一个特殊功能,由于其功能强大,使得黑客可以通过精心构造的宏代码来实现恶意操作,这些代码就叫做宏病毒。宏病毒常以垃圾邮件的方式对用户进行攻击,因为伪造的Office文档不容易引起用户的怀疑,所以当用户毫无防备的打开Office文档并启用宏之后,宏病毒便开始了运行,对用户主机进行恶意操作。
  • 僵尸网络病毒:能形成大型的一对多,多对多控制的远程控制病毒。
  • 后门:在主机上开放端口允许远程非授权访问。
  • 挖矿病毒:消耗用户CPU、GPU资源,进行大量运算,获取加密货币的病毒。
  • 勒索病毒:能对用户文件进行加密的病毒。

挖矿排查

获取信息

  • 下线服务器之后从 DNS 服务器、防火墙、态势感知平台等地方获取到攻击事件详细信息
  • 根据上传来源的 IP/域名,在威胁情报平台查询确定木马类型
  • 获取异常进程的 pid
1
2
3
4
5
6
7
8
9
10
11
12
13
CPU占用:
top -c -o %CPU
ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%cpu | head -n 5
内存占用:
top -c -o %MEM
ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%mem | head -n 5
网络占用:
安装后使用nethogs或者jnettop进行查询
根据进程名或字符串查询:
pidof "name"
ps -aux | grep "name"
ps -ef | grep "name" | grep -v grep | awk '{print $2}'
pgrep -f "name"
  • 根据 pid 查询详细信息(当查询不到时有可能是/proc/pid 隐藏了)
1
2
3
4
5
lsof -p pid
pwdx pid
systemctl status pid
cat /proc/pid/maps
ls -al /proc/pid/exe
  • 根据 pid 查看对应线程
1
2
3
ps H -T -p pid
ps -aLf pid
pstree -agplU(推荐使用)
  • 确定进程运行时间
1
ps -eo pid,lstart,etime,cmd | grep <pid>
  • 比对恶意文件的创建时间
1
2
stat xxx.xx
ls -al xxx.xx
  • 样本采集分析
1
2
使用SCP/Xshell等将样本移出主机,计算哈希值后到威胁情报平台中去搜索
certutil -hashfile 文件 MD5
  • 进程查杀
1
2
3
4
5
6
【查找子进程】
ps ajfx
systemctl status
【杀死进程】
kill -9 pid (这样子是杀不死子进程的!!!)
kill -9 -pid (杀掉进程组)
  • 删除文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 查看文件占用,解除占用后删除
lsof xxxx.xx
# 移除 i, a 属性
chattr -ia file.sh
# 查看是否移除成功
lsattr file.sh
# 移除文件
rm -rf file.sh
# 奇怪文件名无法删除,先查inode再删除
ls -li xxxx.xx
find ./* -inum 12327526 -delete
find ./ -inum 12327526 -exec rm {} \;
find ./* -inum 12327526 -exec rm -i {} \;
find ./* -inum 12327526 -exec rm -f {} \;
find ./* -inum 12327526 |xargs rm -f
rm `find ./* -inum 12327526`
# 目录挂载无法删除(Device or resource busy)
sudo lsblk -a
sudo umount /dev/sdb1
rm -rf xxxx.xx
  • 网页挖矿排查
1
2
3
4
5
6
7
# 浏览器查看历史记录,定位到该事件点访问的页面
# 进入虚拟机进行访问,并限制进程只允许占用一个cpu
# 查看该网页的源码和网络链接调用
# 将浏览器缓存文件进行检测(大多数是JS)
# 清除浏览数据>清除缓存文件
# 解密恶意文件查看矿池地址以及连接条件
# 上区块链网站溯源

暴力破解

介绍

暴力破解一般针对

ssh、mysql、ftp、redis、mongodb、smtp

SSH 暴力破解

  1. 使用 netstat -pantu 查看网络状态,重点是 PID(当被破解时会有大量的 ESTABLISHED)
  2. 使用 awk -F: '{if($3==0) print $1}' /etc/passwd 查找特殊权限账号(默认 root)
  3. 查找可以使用 ssh 登录的账号
1
s=$( sudo cat /etc/shadow | grep '^[^:]*:[^\*!]' | awk -F: '{print $1}');for i in $s;do cat/etc/passwd | grep -v "/bin/false\|/nologin"| grep $i;done | sort | uniq |awk -F: '{print$1}'
  1. 查看正在连接的 ssh-session
1
2
3
4
5
6
7
who -a
w
last -p now
sudo netstat -tnpa | grep 'ESTABLISHED.*sshd'
pgrep -af sshd
echo $SSH_CONNECTION
ss | grep ssh
  1. 查看所有的账号信息
1
2
3
4
/var/log/auth.log(Ubuntu)
/var/log/secure(centOS)
列出当前账户
who am i
  1. 查看登录日志

查看日志 cd /var/log
成功登录 cat /var/log/auth.log | grep “Accept”
正常退出 cat /var/log/auth.log | grep “pam_unix(sshd:session): session closed”
密码错误 cat /var/log/auth.log | grep “authentication failure”
连续错误 cat /var/log/auth.log | grep “message repeated 2 times”

  1. 统计数据

登录失败的用户名及其次数
grep “Failed password” /var/log/auth.log|perl -e ‘while($_=<>){ /for(.*?)from/; print”$1\n”;}’|sort|uniq -c|sort -nr

登录失败的 IP 及其次数
cat /var/log/auth.log | grep “Failed password for” | grep “root” | grep -Po ‘(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}’ |sort|uniq -c|sort -nr

  1. 加固防护
    升级 SSH 版本至少为 7.7 版本以上,7.7 及以下版本存在 SSH 用户名枚举
    加强口令复杂程度
    禁止 root 用户登录,可以通过其他用户 su 到 root
    安装 fail2ban 来进行防御

Mysql 暴力破解

Mysql 默认安装会保留登录日志,在 Ubuntu 上默认位置为 /var/og/mysql/error.log

  1. 查看登录失败的用户名
1
cat /var/log/mysql/error.log | grep "Access denied for user" | grep "using password: YES" | awk -F "'" '{print $2}' | sort | uniq -c | sort -nr
  1. 查看登录失败的 IP 及次数
1
cat /var/log/mysql/error.log | grep "Access denied for user" | grep "using password: YES" | awk -F "'" '{print $2}' | sort| uniq | while read line;do echo $line;cat /var/log/mysql/error.log | grep "Access denied for user" | grep "using password" | awk -F "'" '{print $4}' | sort | uniq -c | sort -nr; done

FTP 暴力破解

  1. 查看网络连接(如果有爆破会有大量的 ESTABLISHED 状态和 TIME WAIT 状态的网络连接)
1
netstat -pantu
  1. 查看最近的一个 ftp 会话(也可以用 ftpwho 查找)
1
last -w -t
  1. 查找日志
1
cat /var/log/vsftpd.log   具体的位置可能不太一样,需要自己查找
  1. 查找登录失败的账号
1
cat /var/log/vsftpd.log | grep FAIL | cut -d "[" -f 3 | cut -d "]" -f 1 | sort | uniq -c | sort -nr
  1. 查找登录失败的 IP
1
cat /var/log/vsftpd.log | grep FAIL | cut -d "[" -f 3 | cut -d "]" -f 1 | sort | uniq | while read line;do echo $line;cat /var/log/vsftpd.log | grep $line | cut -d ":" -f 7 | cut -d '"' -f 1 | sort | uniq -c | sort -nr; done
  1. FTP 服务加固
    禁用 anonymous 和 ftp 两个账号
    使用 SSL 加密 FTP
    安装 fail2ban 来进行防御

Redis 未授权暴力破解

将 redis.conf 中的 requirepass 前的注释打开,并且设置一个复杂密码

缩减开放端口,建议仅在本机 127.0.0.1 使用

配置完成后需要重启来生效

  • 只有手动设置 logfile 才能保存日志,默认不设置默认的日志级别 notice 是不会记录登录、执行指令、退出的。
  • loglevel 设置为 verbose 或者 debug 才会记录登录主机
  • 执行的指令 info,set 等即使 loglevel 是 debug 级别也不会记录,但是会记录我们设置了多少个 key, 具体 key 名称以及内容不会记录

虽然如此,但是失败成功的登录日志都是一样的……
没办法区分是不是攻击行为,只能问有没有人那个时候登过了

MongoDB 暴力破解

默认配置文件位置为 /etc/mongodb.conf

默认的的日志位置为 /var/og/mongodb/mongodb.log

打开 verbose 后能看到大量的 failed 事件

在/var/log/mongodb/mongodb.log 查看

  1. 登录失败的账户
1
cat /var/log/mongodb/mongodb.log | grep -v "UserNotFound"|grep failed | awk -F " " '{print $9}' | sort|uniq -c|sort -nr
  1. 登录所有账户失败的 IP 及次数
1
cat /var/log/mongodb/mongodb.log | grep -v "UserNotFound"|grep failed | awk -F " " '{print $9}' |sort | uniq | while read line;do echo $line;cat /var/log/mongodb/mongodb.log |grep -v "UserNotFound" | grep failed | grep $line | awk -F " " '{print $14}' | cut -d ":" -f 1 | sort | uniq -c | sort -nr; done
  1. 不存在账户的爆破事件
1
cat /var/log/mongodb/mongodb.log | grep "UserNotFound"|grep failed | awk -F " " '{print $9}' |sort | uniq | while read line;do echo $line;cat /var/log/mongodb/mongodb.log |grep "UserNotFound" | grep failed | grep $line | awk -F " " '{print $14}' | cut -d ":" -f 1 | sort | uniq -c | sort -nr; done

SMTP 暴力破解

SMTP 负责发,POP3、IMAP 负责收,POP3 协议客户端收到邮件,服务器端就会将其删除,除非有特殊的配置。

IMAP 则弥补了这一缺陷,客户端该收收,服务端还给你保存着,同时你在客户端的各种配置操作都会在服务器上进行同步

1
2
验证失败的账户IP
cat /var/log/mail.log | grep "authentication failed" | grep -Po '(1\d{2}|2[0-4]\d|25[0-5]|

善后处理

杀死进程

1
2
3
4
5
6
top d1   //运行top命令后,键入大写字母P按cpu排序
ps aux | sort -k4nr //运行top命令后,键入大写字母M按内存排序
ls -la /proc/$pid/exe //查找进程文件
strace -tt -T -e trace=all -p $pid //跟踪进程运行
lsof -p $pid //进程打开的文件
netstat -anltp | grep $pid //查看进程端口情况

查看账号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
awk -F ":" '
$3==0{print $
1}' /etc/passwd //查看特权用户
awk '/\
$1|\$
6/{print $1}' /etc/shadow //可远程登录的账号信息
cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)" //sudo的账号
w //当前用户及其行为
lastlog //所有用户最后登录时间
last //所有用户关键信息
grep "Accepted " /var/log/secure* | awk '{print
$1,$
2,
$3,$
9,$11}' //成功登录日期、用户名及ip
//查看试图爆破主机的ip
grep refused /var/log/secure* | awk {'print $9'} | sort | uniq -c |sort -nr | more
grep "Failed password" /var/log/secure* | grep -E -o "(([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}))" | uniq -c
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort //查看爆破root的ip
grep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nr //查看爆破的用户名字典

锁定目录

1
2
3
4
chmod 000 /usr/bin/风险目录
chattr +i /usr/bin
chattr +i /bin
chattr +i /tmp

检查异常文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
【检查特权文件】
find / -perm /6000
find / -perm /4000
find / -perm /2000
【检查corn文件】
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
【最近被修改的系统文件】
find /etc/ /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ -type f -mtime -T | xargs ls -la
【被替换的命令/动态链接库劫持】
echo $LD_PRELOAD
echo $LD_LIBRARY_PATH
注:基本上上面两个命令回显是空白的,如果有回显大概率是被劫持
ls -alt /usr/bin /usr/sbin /bin /usr/local/bin
rpm -Va>rpm.log

删除计划任务等

1
2
3
4
5
rm -f /etc/init.d/风险目录
rm -f /etc/rc#.d/木马连接文件
cat /etc/rc.local //开机启动项
chkconfig --list //开机启动项
注意:建议使用vim查看,cat有可能显示不全

rootkit 查杀

rootkit 主要有两种类型:文件级别和内核级别。
文件级别的 rootkit: 一般是通过程序漏洞或者系统漏洞进入系统后,通过修改系统的重要文件来达到隐藏自己的目的。
内核级 rootkit: 是比文件级 rootkit 更高级的一种入侵方式,它可以使攻击者获得对系统底层的完全控制权,此时攻击者可以修改系统内核,进而截获运行程序向内核提交的命令,并将其重定向到入侵者所选择的程序并运行此程序。内核级 rootkit 主要依附在内核上,它并不对系统文件做任何修改。以防范为主。
查杀工具:
chkrootkit rkhunter ClamAV

其它检查方面

  • BASH 内置命令
1
compgen -b
  • BASH 函数
1
2
compgen -f
unset -f functionName
  • 环境变量
1
2
3
4
5
env
set
export
cat /proc/$PID/environ
declare
  • SSH key
  • SSH config 文件
1
2
/etc/ssh/ssh_config 和 ~/.ssh/config将
LocalCommand 和 ProxyCommand 参数封禁
  • alias 命令替换
1
2
3
alias 命令的功能是为命令设置别名
alert //检查是否存在替换
unalias alert //删除别名
  • DNS 配置文件
1
/etc/resolv.conf
  • 禁止 ptrace_scope 操作
1
cat /proc/sys/kernel/yama/ptrace_scope
  • ASLR
1
cat /proc/sys/kernel/randomize_va_space   //调成2减缓溢出攻击
  • capabilities
1
2
getcap -r / 2>/dev/null   //查看对权限的默认情况
setcap //重新设置权限
  • iptables 端口复用
1
sudo iptables -L   //查看默认情况
  • 密码填充检查
1
cat /etc/passwd | cut -d ":" -f 2 | grep -v "x   //默认情况应该是空的
  • 服务检查
1
2
3
4
sudo systemctl list-units --type=service --state=running   //正在运行的服务
systemctl status xxx.service //查看单一服务进程状态
systemctl cat xxx.service //获取服务配置文件
systemctl cat
  • MOTD
1
2
是Linux中发送问候消息的功能,一般在我们登录服务器后显示
每次任意用户登录时都会触发 motd 服务的功能,这个功能的脚本几乎都是使用 root 权限来启动的,所以很适合用来做后门
  • 进程启动文件
1
2
3
恶意程序执行后,可能会删除本地文件,但是该文件已经被进程加载,可以通过遍历这种情况来排查恶意程序
sudo lsof | grep deleted
sudo ls -al /proc/*/exe 2>/dev/null | grep deleted //建议使用这一个命令
  • 检查系统及应用程序配置文件
  • sudo 配置文件检查
1
2
3
/etc/sudo.conf
/etc/sudoers
/etc/sudoers.d/
1
2
3
4
第三方GPG密钥检查

sudo apt-key list
具体存储⽬录为 /etc/apt/trusted.gpg.d/

gpg –quiet –show-keys /etc/pki/rpm-gpg/*

具体存储⽬录为 /etc/pki/rpm-gpg/

溯源

方法

溯源思路:

  1. 首先通过系统日志、安全设备截获攻击包等从中分析出攻击者的 ip 和攻击方式,通过 webshell 或者木马去微步分析,

  2. 或者去安恒威胁情报中心进行 ip 检测分析,是不是云服务器,基站等,如果是云服务器的话可以直接反渗透,看看开放端口,域名,whois 等进行判断,

  3. 获取姓名电话等丢社工库看看能不能找到更多信息然后收工

针对国外 IP 的溯源方法:

  1. 使用网络安全工具进行溯源:可以使用网络安全工具,如 traceroute、ping 等命令,对目标 IP 进行探测和跟踪。这些工具可以显示出攻击流量经过的路由器、网关和 ISP 等信息,帮助我们了解攻击流量的来源地点。
  2. 查找域名信息:通过 WHOIS 查询工具查询目标域名的注册信息,包括注册人、注册机构、联系方式等信息,可以从中了解到攻击来源的大致位置。
  3. 联系当地 ISP:如果攻击者使用的是公共网络,如酒店、咖啡厅、机场等,可以联系当地 ISP,寻求协助获取攻击来源的信息。

溯源反制

主要是通过混淆和伪装攻击流量,防止攻击者获取真实的攻击来源和行为信息。具体操作包括:
1.使用代理服务器:通过使用代理服务器,可以改变攻击流量的来源 IP 地址,使得攻击者无法追踪真实的攻击来源。
2.使用 VPN 技术:VPN 技术可以在公网上建立一个私有网络,加密传输数据流量,从而防止攻击者获取敏感信息。
3.使用匿名浏览器:匿名浏览器可以隐藏用户真实的 IP 地址和浏览痕迹,使得攻击者无法追踪用户的真实身份和行为。
4.使用虚假数据:在攻击流量中混入虚假的数据,如虚假的 IP 地址、协议和端口等信息,可以混淆攻击者的追踪。

内存马

分类

注入型内存马:通过利用漏洞将恶意代码注入到正常进程中,从而在内存中运行。
自执行型内存马:将恶意代码写入自启动项,启动后自动运行。
进程注入型内存马:利用进程注入技术,在受感染进程的内存中运行恶意代码。
Hook 型内存马:利用 Windows API 的 Hook 机制,修改进程中的关键函数,从而运行恶意代码。
要判断内存马的类型,可以使用反病毒软件或专门的安全工具对受感染主机进行扫描和分析。一般来说,不同类型的内存马会留下不同的痕迹和特征,比如某些进程的不正常行为、异常的网络连接等等。

防护

注入型内存马:修复漏洞、升级软件,加强网络安全防护等方法来预防类似攻击;对已经感染的主机,可以通过杀掉受感染进程或卸载恶意程序等方式来清除内存马。
自执行型内存马:可以通过清理自启动项、卸载恶意程序等方式来清除内存马。
进程注入型内存马:可以通过杀掉受感染进程或卸载恶意程序等方式来清除内存马。
Hook 型内存马:可以通过还原 Hook、修复关键函数、杀掉受感染进程或卸载恶意程序等方式来清除内存马。

基线检查

linux

账号管理和授权

  • 检查特殊账号,是否存在空密码的账户和root权限账户
  • 禁用或删除无用账号
  • 添加口令策略:/etc/login.defs修改配置文件,设置过期时间、连续认证失败次数
  • 禁止root远程登录,限制root用户直接登录。
  • 检查su权限。vi /etc/pam.d/su添加auth required pam_wheel.so group=test

服务

  • 关闭不必要的服务
  • SSH服务安全
    • 不允许root账号直接登录系统,PermitRootLogin=no
    • 修改SSH使用的协议版本为2
    • 修改允许密码错误次数(默认6次),MaxAuthTries=3

文件系统

  • 设置umask值 vi /etc/profile 添加行 umask 027
  • 设置登录超时 vi /etc/profile 修改配置文件,将以 TMOUT= 开头的行注释,设置为 TMOUT=180

日志

  • 启用syslogd日志,配置日志目录权限,或者设置日志服务器
  • 记录所有用户的登录和操作日志,通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。https://www.alibabacloud.com/help/zh/faq-detail/49809.htm

IP协议安全要求

  • 远程登录取消telnet采用ssh
  • 设置/etc/hosts.allow和deny
  • 禁止ICMP重定向
  • 禁止源路由转发
  • 防ssh破解,iptables(对已经建立的所有链接都放行,限制每分钟连接ssh的次数)+denyhost(添加ip拒绝访问)

中间件基线规范(APACHE)

https://www.alibabacloud.com/help/zh/faq-detail/52981.htm

配置

  • 账号
  • 授权
  • 日志
  • session过期时间(防ddos
  • 绑定监听地址

禁止

  • 目录权限
  • 访问外部文件
  • CGI
  • 非法HTTP方法(PUT DELETE)

隐藏

  • 服务版本号
  • 重定向错误页面

删除

  • 配置文件
  • 默认安装的无用文件

补充

守护进程

守护进程是什么? 其他进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程(守护进程)不受用户登录注销的影响,它们一直在运行着。

1
2
3
# 守护进程的本质是什么? 
守护进程的本职就是孤儿进程,该进程自成会话,自成进程组,一般守护进程与终端无关;(即:pid=sid=gid)
后台进程受用户登录注销的影响,而守护进程不受用户登录和注销的影响。但是它们都受关机的影响。
1
2
3
4
5
6
# 守护进程有什么特点? 
没有控制终端,终端名设置为?号
父进程不是用户创建的进程,一般由init进程或者systemd(pid=1)的进程为父进程
进程名字通常以字母 d 结束
工作目录为/(根),主要是为了防止占用磁盘导致无法卸载磁盘
以kthreadd内核进程创建的守护进程以kthreadd为父进程
1
2
3
4
5
# 守护进程如何设置? 
执行一个fork(),之后父进程退出,子进程继续执行。
子进程调用setsid()开启一个新回话并释放它与控制终端之间的所有关联关系。
在setsid()调用之后执行第二个fork(),让父进程退出并让孙进程继续执行。确保了子进程不会成为会话组长。 (根据System V中获取终端的规则,进程永远不会重新请求一个控制终端。多一个fork()调用不会带来任何坏处。)
使用 umask(0); 清除进程的umask以确保当daemon创建文件和目录时拥有所需的权限。 5. 修改进程的当前工作目录,通常会改为根目录(/)。 6. 关闭daemon从其父进程继承而来的所有打开着的文件描述符。
1
2
3
4
# 守护进程如何删除? 
首先ps axj | grep 守护进程名字,找到相应的守护进程,然后使用kill -9 守护进程名杀掉;
利用ps -ef命令查找相应的守护进程,再用kill -9命令将其杀死;
创建shell脚本对进程的启动、关闭、重启进行自动管理。 注:kill -9 -pid (杀掉进程组)

screen 的原理

  • 当用户启动 Screen 时,它会创建一个守护进程作为后台进程,并与用户终端会话(称为控制终端)分离。
  • 控制终端不再直接处理用户输入和输出,而是由 Screen 守护进程负责接收和处理。
  • 守护进程通过与 Unix 域套接字进行通信,与控制终端保持连接。
  • 用户在控制终端中输入的命令会被发送到守护进程,并由守护进程解析和执行。
  • 守护进程还负责从虚拟终端读取输出内容,并将其发送回控制终端进行显示。

通过这种方式,Screen 实现了在控制终端与守护进程之间的交互,并通过守护进程来管理多个虚拟终端、处理窗口切换、保存会话状态等功能。

需要注意的是,虽然 Screen 的守护进程在后台运行,但用户仍然可以通过重新连接到控制终端来恢复与之前会话的交互,即使之前的 SSH 连接断开或终端关闭。这是 Screen 的一个重要特性,允许用户在断开连接后恢复他们的工作环境。

恢复守护进程会话的交互

可以使用 nohup 命令启动一个守护进程,并将输出重定向到文件中,例如:

1
nohup ./your_daemon &

通过这种方式启动的守护进程不会因为用户退出终端而停止运行。

当用户重新连接到控制终端时,可以使用 jobs 命令查看守护进程的状态,并使用 fg 命令将其调至前台,恢复与之前会话的交互。例如:

1
2
jobs
fg %job_id

其中,job_id 是守护进程的作业号,可以在 jobs 命令的输出中找到

IDS/IPS

IDS(Intrusion Detection System)入侵检测系统

IPS (Intrusion Prevention System) 入侵防御系统

与防火墙相似,IPS 内嵌部署到流量中。IPS 是一个主动的网络组件,会检查每个通过的数据包,并根据其配置和策略采取正确的补救措施。相反,IDS 是一个被动组件,通常不会内嵌部署,而是通过 SPAN 或 TAP 技术监控流量,然后发出通知

IPS 阻断


蓝队笔记
http://example.com/2024/06/27/蓝队笔记/
作者
z2zQAQ
发布于
2024年6月27日
许可协议