分析针对我的网站的攻击
最近,我偶然在自己的博客( JeremyMorgan.com )上做了一次安全审计,决定深入研究一下我的安全日志。借助一些 Linux 命令行技巧、Golang 代码和 Google Sheets,我大致了解了攻击的来源。
首先,我使用 CentOS 来托管我的网站,所以我查看了 /var/log/secure。这个日志是我服务器上存储身份验证日志的地方。
日志文件如下所示:
而且有301,327行代码,我不太可能手动查看太多。让我们稍微自动化一下。
获取攻击者的IP地址
我想从这个文件中提取攻击者的IP地址。这样我就可以阻止他们。
我开始摆弄 Linux 命令,直到我想出了这个脚本。
它的作用非常简单,它将查找以下字符串:
declare -a badstrings=("Failed password for invalid user"
"input_userauth_request: invalid user"
"pam_unix(sshd:auth): check pass; user unknown"
"input_userauth_request: invalid user"
"does not map back to the address"
"pam_unix(sshd:auth): authentication failure"
"input_userauth_request: invalid user"
"reverse mapping checking getaddrinfo for"
"input_userauth_request: invalid user"
)
这些字符串用于识别失败的攻击日志。如果他们输入了错误的用户名或尝试了其他形式的攻击,就会出现这些字符串之一。
因此我们循环遍历该列表并搜索这些字符串,然后从该字符串所在的行中提取 IP 地址。
cat /var/log/secure | grep "$i" | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | awk '{print $0}' | sort | uniq >> "temp.txt"
然后它会把 IP 地址转储到一个temp.txt文件中。它会对我“坏字符串”列表中的所有消息都执行此操作。
该文本文件中有大量重复项,因此我删除了重复项,只将唯一的 IP 放入文件中:
# grab unique ips from temp and put them in a file
cat "temp.txt" | sort | uniq > "badguyips.txt"
# remove the temp file
rm "temp.txt"
太棒了,现在我已经准备好了 IP 地址列表。
哎呀,我这里有1,141 个IP 地址。
阻止他们
现在我想屏蔽这些 IP 地址。因为我正在运行 iptables,所以我可以用这个简单的脚本来删除它们:
#!/bin/bash
input="badguyips.txt"
while IFS= read -r line
do
iptables -A INPUT -s $line -j DROP
done < "$input"
service iptables save
太棒了!现在攻击者已经被我的服务器屏蔽了。
然后我就好奇了。这些攻击到底是从哪里来的?
获取他们的位置数据
因为我有一份 IP 地址列表,所以我想用Maxmind之类的数据库来查找一些位置信息。所以我就这么做了。
我编写了一个名为“find the bad guys”的 Golang 程序,它会遍历 IP 地址的文本文件,查找他们的位置信息,然后将其写入一系列文本文件中。
我根据以下内容写出了地点:
- 大陆
- 国家
- 城市
- 城市细分
我想了解攻击来自哪里并分享这些信息。所以我运行了我构建的程序,现在有一些有用的位置信息列表:
大洲
所以现在我想看一下 continents.txt。
嗯,这将是一个问题,有一些重复。
我可以运行一个快速命令并获取唯一值:
cat continents | sort | uniq
如果你曾经观察过地球仪,那么结果就不应该令你感到惊讶:
但我想看看每个大洲的攻击次数。所以我请我的老朋友uniq帮忙:
awk -F '\n' '{print $0}' continents.txt | sort | uniq -c
很棒吧?所以我会删除前面的空格,在计数后插入一个逗号,然后将其拖放到文本文件中。
awk -F '\n' '{print $0}' continents.txt | sort | uniq -c | awk '{$1=$1};1' | sed -r 's/\s+/,/' > contintent-totals.txt
现在我可以将其放入 Google 表格中。
并得到这个漂亮的图表:
我已经在其他地点(国家、城市、分区)重复了这个过程,所以就不再赘述了。结果如下:
国家
以下是攻击者来自的十大国家:
- 中国 (304)
- 美国(138)
- 法国 (95)
- 印度 (46)
- 新加坡 (43)
- 韩国(38)
- 德国 (37)
- 俄罗斯 (37)
- 巴西 (35)
- 英国(29)
城市
每个城市的袭击事件更加集中。
- 北京 (57)
- 上海 (53)
- 合肥 (25)
- 阿姆斯特丹 (21)
- 班加罗尔 (16)
- 伦敦 (14)
- 新浦 (14)
- 克利夫顿 (10)
- 北卑尔根 (9)
但仍然很有趣。
细分
这份报告的汇总程度更高,但深入程度更高。以下是攻击者来自的十大细分领域:
- 北京 (145)
- 上海 (61)
- 安徽 (26)
- 英格兰 (22)
- 江苏 (22)
- 新泽西州 (22)
- 北荷兰 (22)
- 加利福尼亚州 (18)
- 圣保罗 (18)
- 卡纳塔克邦 (16)
结论
伟大的事情总是源于好奇心。我很好奇还能从中提取出哪些其他类型的模式和数据,所以我会继续尝试和探索。
如果您决定要为您的网站执行此操作,请尝试以下步骤,如果您需要任何帮助请告诉我。
文章来源:https://dev.to/jeremycmorgan/analyzing-the-attacks-on-my-website-30jf