一、基础知识
1、ls怎么按照时间排序列出当前目录文件?
- ls -lt 时间最近的在前面(降序)
- ls -ltr 时间从前到后(升序)
2、stat命令是干啥的?
显示文件详细信息,访问时间、内容修改时间、状态修改时间
3、lsof的作用是什么?
查看进程打开的文件,打开文件的进程,进程打开的端口(TCP\UDP)
详细内容可参考:https://blog.csdn.net/Fly_hps/article/details/83114354
4、strace命令的作用是什么?
在命令执行过程中,strace会记录和解析命令进程的所有系统调用以及这个进程所接收到的所有信号值。
5、怎么样使用cat命令组合awk和sed和cut等命令快速进行日志的分析?
cut与awk提取列
cut 【选项】 文件
-f:指定提取的列
-d:指定分隔符
sed主要是用来将数据进行选取,替换,删除,新增的命令。
sed 【选项】【动作】 文件名
6、通过linux下的那个文件可以得到当前主机的所有的用户信息?
cat /etc/passwd
cat /etc/group
7、.bash_history这个文件的作用是什么?crontab在linux下是干啥的?
.bash_history:主要用于记录历史bash命令
crontab:定时任务
8、xargs命令的作用是什么? find /var/www/html/ -type f -name "*.jsp" | xargs grep "exec("这条命令的作用是什么?/var/log/cron这个文件是记录什么?
xargs:给命令传递参数,例如
xargs将find 命令的输出传递给ls -l find /etc -name "*.conf" | xargs ls –l
命令作用:找到/var/www/html目录下类型为普通文件,名字后缀为jsp的文件,然后通过xargs传递给grep去匹配jsp中为exec的文本内容。(排查jsp后门用)
/var/log/cron:定制任务日志
9、/var/log/btmp?
文件是记录错误登录的日志/ssh登录
10、last命令的作用是什么?
显示用户最近登录信息
11、/var/log/secure?
包含验证和授权方面信息,例如,sshd会将所有信息记录(其中包括失败登录)都记录到这里
12、curl ip.cn -H "X-Forwarded-For: 117.34.5.6"这句命令作用是?
访问ip.cn为其加上X-Forwarded-For: 117.34.5.6的header头
13、ps -ef 、lsof -i:8080 、netstat -lanp ?
ps [选项]
-e 显示所有进程。
-f 全格式。
-h 不显示标题。
-l 长格式。
-w 宽输出。
-a 显示终端上的所有进程,包括其他用户的进程。
-r 只显示正在运行的进程。
- u 以用户为主的格式来显示程序状况。
- x 显示所有程序,不以终端机来区分。
ps -ef 显示出的结果:
1.UID 用户ID
2.PID 进程ID
3.PPID 父进程ID
4.C CPU占用率
5.STIME 开始时间
6.TTY 开始此进程的TTY----终端设备
7.TIME 此进程运行的总时间
8.CMD 命令名
lsof -i :port_number
example:
lsof -i :22 查看22端口运行的进程 ****
lsof -i :22 -t 查看22端口运行的进程的pid ***
kill -9 `lsof -i :22 -t` 查出使用22端口的进程pid,并杀掉该进程
lsof -i -sTCP:LISTEN 查看正在被监听的端口(或者lsof -i |grep LISTEN)
14、列出在某一个端口段间的所有进程
lsof -i :500-5000 (查看打开端口在500到5000间的所有进程)
15、列出某个进程id打开的文件
lsof -p 5001 查看进程id为5001的进程所打开的文件 ****
16、查看某个目录下被打开的全部文件(ps:会搜索目录下所有目录+d参数只会搜索目录第一层)
lsof +D /usr/ison 查看该目录下全部被打开的文件 ***
17、根据进程名查看被打开的文件
lsof -c mysql 查看mysql打开的文件名 ***
18、怎么样通过grep命令找到web访问日志中awvs和sqlmap的扫描记录?
find /var/log/apapche2/ -type f -name "access.log" | xargs grep "sqlmap"
19、sz和rz命令是干嘛的?scp呢?
- sz:将选定的文件发送(send)到本地机器
- rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
- scp:Linux之间复制文件和目录
20、怎么用tar命令打包文件夹?strings?
- tar cvf test.tar test.txt 压缩文件
- tar -xzvf archive.tar.gz 解压文件
21、windows操作系统基础
- 熟悉基本的cmd命令(参考:https://ss64.com/nt/)
- windows eventID在线查询:http://www.eventid.net/
- 熟悉常见的针对windows操作系统的攻击方式
22、熟悉常见组件以及端口的被攻击的方式
例如典型的:redis部署在公网或者阿里云内网,进redis的配置文件查看,如果requirepass没有启用,那么攻击者可以通过redis向crontab或者.ssh写入恶意语句入侵服务器;
例如部署了tomcat那么就需要看看manager目录是否删除?没有删除可以通过manager部署一个恶意的war入侵服务器等等
23、分析调试
能够使用IDA Pro 对恶意二进制文件进行简单的静态分析,使用网上公开的在线恶意文件分析平台对恶意二进制文件进行简单的动态分析。
24、-ctime、-atime、-mtime参数
-ctime(change time):变更时间,指文件的i节点被修改的时间,例如位置、用户属性、权限等。通过chmod、chgrp、 mv修改文件属性,ctime就会被修改。
-atime(access time):访问时间,修改文件不会改变atime。cat、less、more、touch均会改变atime。ls操作不会更新。
-mtime(modify time):修改时间,当文件内容改变后,该文件的atime可能不发生改变,mtime、ctime会发生改变。例如 对文件进行mv操作,mtime不变,ctime更新。编辑文件内容,mtime和ctime同时改变。
“+-”问题说明:
-mtime n中的n为数字,意思是在n天之前的【一天之内】被更改过内容的文件,例如: -mtime +n:列出在n天之前(不含n天本身)被更改过内容的文档名; -mtime -n:列出在n天之内(含n天本身)被更改过内容的文档名; 特别说明:0为24小时以内
二、Linux系统分析排查
文件分析
1.敏感目录的文件分析(类/tmp目录、命令目录/usr/bin /usr/sbin)
例如:
查看tmp目录下的文件: ls –alt /tmp/
查看开机启动项内容:ls -alt /etc/init.d/
查看指定目录下文件时间的排序:ls -alt | head -n 10
针对可疑文件可以使用stat进行创建修改时间、访问时间的详细查看,若修改时间距离事件日期接近,有线性关联,说明可能被篡改或者其他。
2、新增文件分析
例如要查找24小时内被修改的jsp文件:find ./ -mtime 0 -name "*.jsp"
(最后一次修改发生在距离当前时间n*24小时至(n+1)*24 小时)
查找72小时内新增的文件find / -ctime -2
PS:-ctime 内容未改变权限改变时候也可以查出
根据确定时间去反推变更的文件
ls -al /tmp | grep "Feb 27"
3、特殊权限的文件
查找777的权限的文件 find / *.jsp -perm 4777
4. 隐藏的文件(以 "."开头的具有隐藏属性的文件)
5. 在文件分析过程中,手工排查频率较高的命令是 find grep ls 核心目的是为了关联推理出可疑文件。
进程命令
1. 使用netstat 网络连接命令,分析可疑端口、可疑IP、可疑PID及程序进程
netstat –antlp | more
2. 使用ps命令,分析进程
ps aux | grep pid | grep –v grep
查看进程启动时间:
ps -p [pid] -o l start
查看有没有奇怪的进程
ps –aef | grep inetd
将netstat与ps 结合,可参考vinc牛的案例:
(可以使用lsof -i:1677 查看指定端口对应的程序)
3. 使用ls 以及 stat 查看系统命令是否被替换。
两种思路:第一种查看命令目录最近的时间排序,第二种根据确定时间去匹配。
ls -alt /usr/bin | head -10
ls -al /bin /usr/bin /usr/sbin/ /sbin/ | grep "Jan 15"
PS:如果日期数字<10,中间需要两个空格。比如1月1日,grep “Jan 1”
4. 隐藏进程查看
5.检查/etc/inetd.conf文件
输入:cat /etc/inetd.conf | grep –v “^#”,输出的信息就是你这台机器所开启的远程服务。
系统信息
1. 查看分析history (cat /root/.bash_history),曾经的命令操作痕迹,以便进一步排查溯源。运气好有可能通过记录关联到如下信息:
a) wget 远程某主机(域名&IP)的远控文件;
b) 尝试连接内网某主机(ssh scp),便于分析攻击者意图;
c) 打包某敏感数据或代码,tar zip 类命令
d) 对系统进行配置,包括命令修改、远控木马类,可找到攻击者关联信息…
2. 查看分析用户相关分析
a) useradd userdel 的命令时间变化(stat),以及是否包含可疑信息
b) cat /etc/passwd 分析可疑帐号,可登录帐号
查看UID为0的帐号:awk -F: '{if($3==0)print $1}' /etc/passwd
查看能够登录的帐号:cat /etc/passwd | grep -E "/bin/bash$"
PS:UID为0的帐号也不一定都是可疑帐号,Freebsd默认存在toor帐号,且uid为0.(toor 在BSD官网解释为root替代帐号,属于可信帐号)
3. 查看分析任务计划
a) 通过crontabl –l 查看当前的任务计划有哪些,是否有后门木马程序启动相关信息;
b) 查看etc目录任务计划相关文件,ls /etc/cron*
4. 查看linux 开机启动程序
a) 查看rc.local文件(/etc/init.d/rc.local /etc/rc.local)
b) ls –alt /etc/init.d/
c) chkconfig
5. 查看系统用户登录信息
a) 使用lastlog命令,系统中所有用户最近一次登录信息。
b) 使用lastb命令,用于显示用户错误的登录列表
c) 使用last命令,用于显示用户最近登录信息(数据源为/var/log/wtmp,var/log/btmp)
utmp文件中保存的是当前正在本系统中的用户的信息。
wtmp文件中保存的是登录过本系统的用户的信息。
/var/log/wtmp 文件结构和/var/run/utmp 文件结构一样,都是引用/usr/include/bits/utmp.h 中的struct utmp
6. 系统路径分析
a) echo $PATH 分析有无敏感可疑信息
7. 指定信息检索
a) strings命令在对象文件或二进制文件中查找可打印的字符串
b) 分析sshd 文件,是否包括IP信息strings /usr/bin/.sshd | egrep '[1-9]{1,3}\.[1-9]{1,3}\.'
PS:此正则不严谨,但匹配IP已够用
c) 根据关键字匹配命令内是否包含信息(如IP地址、时间信息、远控信息、木马特征、代号名称)
8. 查看ssh相关目录有无可疑的公钥存在。
a) Redis(6379) 未授权恶意入侵,即可直接通过redis到目标主机导入公钥。
b) 目录: /etc/ssh ./.ssh/
后门排查
除以上文件、进程、系统 分析外,推荐工具chkrootkit rkhunter
www.chkrootkit.org rkhunter.sourceforge.net
- chkrootkit
(迭代更新了20年)主要功能:
- 检测是否被植入后门、木马、rootkit
- 检测系统命令是否正常
- 检测登录日志
- 详细参考README
- rkhunter主要功能:
- 系统命令(Binary)检测,包括Md5 校验
- Rootkit检测
- 本机敏感目录、系统配置、服务及套间异常检测
- 三方应用版本检测
- RPM check检查
系统完整性也可以通过rpm自带的-Va来校验检查所有的rpm软件包,有哪些被篡改了,防止rpm也被替换,上传一个安全干净稳定版本rpm二进制到服务器上进行检查
如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是8位长字符串, ``c 用以指配置文件, 接着是文件名. 8位字符的每一个 用以表示文件与RPM数据库中一种属性的比较结果 。``. (点) 表示测试通过。.下面的字符表示对RPM软件包进行的某种测试失败:
借用sobug文章案例:如下图可知ps, pstree, netstat, sshd等等系统关键进程被篡改了
- Webshell查找
Webshell的排查可以通过文件、流量、日志三种方式进行分析,基于文件的命名特征和内容特征,相对操作性较高,在入侵后应急过程中频率也比较高。
可根据webshell特征进行命令查找,简单的可使用(当然会存在漏报和误报)
- Webshell的排查可以通过命令进行查找
- Github上存在各种版本的webshell查杀脚本,当然都有自己的特点,可使用河马shell查杀(shellpub.com)
综上所述,通过chkrootkit 、rkhunter、RPM check、Webshell Check 等手段得出以下应对措施:
- 根据进程、连接等信息关联的程序,查看木马活动信息。
- 假如系统的命令(例如netstat ls 等)被替换,为了进一步排查,需要下载一新的或者从其他未感染的主机拷贝新的命令。
- 发现可疑可执行的木马文件,不要急于删除,先打包备份一份。
- 发现可疑的文本木马文件,使用文本工具对其内容进行分析,包括回连IP地址、加密方式、关键字(以便扩大整个目录的文件特征提取)等。
日志分析
- 入侵后需要被关注的linux系统日志
附加:
~/.bash_history 至关重要的日志,往往黑客会使用history -c清理相关的日志,然后使用cat ~/.bash_history仍可查看相关的记录
- 入侵后需要被关注的web服务器日志
web服务器的种类很多,接触比较多的为apache、tomcat、nagix为主。无论任何web服务器其实日志需要关注的东西是一致的,即access_log和error_log。一般确定ip地址后,可以通过一下命令进一步分析:
find . access_log |grep xargs ip攻击地址 find . access_log| grep xargs 木马文件名
1. 日志查看分析,grep,sed,sort,awk综合运用
2. 基于时间的日志管理:
/var/log/wtmp
/var/run/utmp
/var/log/lastlog(lastlog)
/var/log/btmp(lastb)
3. 登录日志可以关注Accepted、Failed password 、invalid特殊关键字
4. 登录相关命令
5. 几个语句
相关处置
kill -9
chattr –i
rm
setfacl
ssh
chmod
三、Windows 系统分析排查
文件分析
1. 开机启动有无异常文件
2. 各个盘下的temp(tmp)相关目录下查看有无异常文件
3. 浏览器浏览痕迹、浏览器下载文件、浏览器cookie信息
4. 查看文件时间,创建时间、修改时间、访问时间。对应linux的ctime mtime atime,通过对文件右键属性即可看到详细的时间(也可以通过dir /tc 1.aspx 来查看创建时间),黑客通过菜刀类工具改变的是修改时间。所以如果修改时间在创建时间之前明显是可疑文件。
5. 查看用户recent相关文件,通过分析最近打开分析可疑文件
a) C:\Documents and Settings\Administrator\Recent
b) C:\Documents and Settings\Default User\Recent
c) 开始,运行 %UserProfile%\Recent
5. 根据文件夹内文件列表时间进行排序,查找可疑文件。当然也可以搜索指定日期范围的文件及文件件
Server 2008 R2系列
Win10 系列
7. 关键字匹配,通过确定后的入侵时间,以及webshell或js文件的关键字(比如博彩类),可以在IIS 日志中进行过滤匹配,比如经常使用:
进程命令
1. netstat -ano 查看目前的网络连接,定位可疑的ESTABLISHED
2. 根据netstat 定位出的pid,再通过tasklist命令进行进程定位
3. 通过tasklist命令查看可疑程序
系统信息
1. 使用set命令查看变量的设置
2. Windows 的计划任务;
3. Windows 的帐号信息,如隐藏帐号等
4. 配套的注册表信息检索查看,SAM文件以及远控软件类
5. 查看systeminfo 信息,系统版本以及补丁信息
例如系统的远程命令执行漏洞MS08-067、MS09-001、MS17-010(永恒之蓝)…
若进行漏洞比对,建议使用Windows-Exploit-Suggester
https://github.com/GDSSecurity/Windows-Exploit-Suggester/
后门排查
PC Hunter是一个Windows系统信息查看软件
http://www.xuetr.com/
功能列表如下:
PS:最简单的使用方法,根据颜色去辨识——可疑进程,隐藏服务、被挂钩函数:红色,然后根据程序右键功能去定位具体的程序和移除功能。根据可疑的进程名等进行互联网信息检索然后统一清除并关联注册表。
Webshell 排查
1. 可以使用hm
2. 也可以使用盾类(D盾、暗组盾),如果可以把web目录导出,可以在自己虚拟机进行分析
日志分析
1. 打开事件管理器(开始—管理工具—事件查看/开始运行eventvwr)
2. 主要分析安全日志,可以借助自带的筛选功能
3. 可以把日志导出为文本格式,然后使用notepad++ 打开,使用正则模式去匹配远程登录过的IP地址,在界定事件日期范围的基础,可以提高效率
正则是:((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))
4. 强大的日志分析工具Log Parser
有了这些我们就可以对windows日志进行分析了 比如我们分析域控日志的时候,想要查询账户登陆过程中,用户正确,密码错误的情况,我们需要统计出源IP,时间,用户名时,我们可以这么写(当然也可以结合一些统计函数,分组统计等等):
LogParser.exe -i:EVT "SELECT TimeGenerated,EXTRACT\_TOKEN(Strings,0,'|') AS USERNAME,EXTRACT\_TOKEN(Strings,2,'|') AS SERVICE\_NAME,EXTRACT\_TOKEN(Strings,5,'|') AS Client_IP FROM 'e:\logparser\xx.evtx' WHERE EventID=675"
事件ID是很好的索引
相关处置
- 通过网络连接锁定的可疑进程,进行定位恶意程序后删除(taskkill)
- 木马查杀,可配合pchunter 进行进一步专业分析,使用工具功能进行强制停止以及删除
- 最后清理后,统一查看网络连接、进程、内核钩子等是否正常。
应用类
- Mysql MSSQL数据库类
- 检查mysql\lib\plugin目录没有发现异常文件(参考UDF提权)
- Mysql : select * from mysql.func
- MSSQL,检查xp_cmdshell等存储过程正常与否
- Apache、tomcat、Nginx、IIS的Web日志类
无论任何web服务器其实日志需要关注的东西是一致的,即access_log和error_log。一般在确定ip地址后,通过:
find . access_log |grep xargs ip攻击地址
find . access_log| grep xargs 木马文件名
在对WEB日志进行安全分析时,可以按照下面两种思路展开,逐步深入,还原整个攻击过程。
1. 首先确定受到攻击、入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程。
2. 一般攻击者在入侵网站后,通常会上传一个后门文件,以方便自己以后访问。我们也可以以该文件为线索来展开分析。
应急总结
- 核心思路是“顺藤摸瓜”
- 碎片信息的关联分析
- 时间范围的界定以及关键操作时间点串联
- Web入侵类,shell定位很重要
- 假设与求证
- 攻击画像与路线确认
渗透反辅
1. 密码读取
a) Windows: Mimikatz
b) Linux: mimipenguin
2. 帐号信息
a) 操作系统帐号
b) 数据库帐号
c) 应用帐号信息
3. 敏感信息
a) 配置信息
b) 数据库信息
c) 服务端口信息
d) 指纹信息
4. 滚雪球式线性拓展
a) 密码口令类拓展(远控)
b) 典型漏洞批量利用
5. 常见的入侵方式Getshell方法
a) WEB入侵
i. 典型漏洞:注入Getshell , 上传Getshell,命令执行Getshell,文件包含Getshell,代码执行Getshell,编辑器getshell,后台管理Getshell,数据库操作Getshell
ii. 容器相关:Tomcat、Axis2、WebLogic等中间件弱口令上传war包等,Websphere、weblogic、jboss反序列化,Struts2代码执行漏洞,Spring命令执行漏洞
b) 系统入侵
i. SSH 破解后登录操作
ii. RDP 破解后登录操作
iii. MSSQL破解后远控操作
iv. SMB远程命令执行(MS08-067、MS17-010、CVE-2017-7494)
c) 典型应用
i. Mail暴力破解后信息挖掘及漏洞利用
ii. VPN暴力破解后绕过边界
iii. Redis 未授权访问或弱口令可导ssh公钥或命令执行
iv. Rsync 未授权访问类
v. Mongodb未授权访问类
vi. Elasticsearch命令执行漏洞
vii. Memcache未授权访问漏洞
viii. 服务相关口令(mysql ldap zebra squid vnc smb)
6. 资源参考
https://www.waitalone.cn/linux-find-webshell.html
http://vinc.top/category/yjxy/
http://www.shellpub.com/
http://linux.vbird.org/linux_security/0420rkhunter.php
https://cisofy.com/download/lynis/
https://sobug.com/article/detail/27?from=message&isappinstalled=1
http://www.freebuf.com/articles/web/23358.html
https://www.microsoft.com/en-us/download/details.aspx?id=24659
http://www.cnblogs.com/downmoon/archive/2009/09/02/1558409.html
http://wooyun.jozxing.cc/static/drops/tips-7462.html
http://bobao.360.cn/learning/detail/3830.html
https://yq.aliyun.com/ziliao/65679
http://secsky.sinaapp.com/188.html
http://blog.sina.com.cn/s/blog_d7058b150102wu07.html
http://www.sleuthkit.org/autopsy/
7. FAQ
1. 应急需求有哪些分类:
a) 被谁入侵了? 关联 攻击IP 攻击者信息
b) 怎么入侵的? 关联 入侵时间轴、漏洞信息
c) 为什么被入侵? 关联 行业特性、数据信息、漏洞信息
d) 数据是否被窃取? 关联 日志审计
e) 怎么办? 关联 隔离、排查分析、删马(解密)、加固、新运营
2. 关于windows的日志工具(log parser)有无图形界面版?
Log Parser Lizard 是一款用Vc++.net写的logParser增强工具。主要有以下特点:
a) 封装了logParser命令,带图形界面,大大降低了LogParser的使用难度。
b) 集成了几个开源工具,如log4net等。可以对IIS logs\EventLogs\active directory\log4net\File Systems\T-SQL进行方便的查询。
c) 集成了Infragistics.UltraChart.Core.v4.3、Infragistics.Excel.v4.3.dll等,使查询结果可以方便的以图表或EXCEL格式展示。
d) 集成了常见的查询命令,范围包含六大模块:IIS
e) 可以将查询过的命令保存下来,方便再次使用。
PS:软件是比较老的,对新系统兼容性不好,还是建议微软原生态log parser
3. 在linux日志中,有无黑客入侵后的操作命令的统计
a) 可以根据history信息进行溯源分析,但一般可能会被清除
b) 还有方法是需要结合accton 和 lastcomm
4. 3.2.3 提到了Windows-Exploit-Suggester,有无linux版?
Linux_Exploit_Suggester https://github.com/PenturaLabs/Linux_Exploit_Suggester
5. 有无linux自动化信息收集的脚本工具?
LinEnum https://github.com/rebootuser/LinEnum
6. 检测病毒文件的几个网站
https://x.threatbook.cn/
http://www.virscan.org
https://www.virustotal.com/
https://fireeye.ijinshan.com/
7. 有无综合的取证分析工具
Autopsy 是sleuthkit提供的平台工具,Windows 和 Linux磁盘映像静态分析、恢复被删文件、时间线分析,网络浏览历史,关键字搜索和邮件分析等功能
http://www.sleuthkit.org/autopsy/
8. 关于业务逻辑的排查方法说明
新型业务安全中安全事件,例如撞库、薅羊毛、支付、逻辑校验等敏感环节,未在本文体现,所以后续有必要针对业务侧的应急排查方法归纳。