作者:SRE运维博客
博客地址:https://www.cnsre.cn
文章地址:https://www.cnsre.cn/posts/210419130919/
相关话题:https://www.cnsre.cn/tags/shell/
一、服务器被入侵的前夕
- 何时被入侵的?
- 入侵者使用哪个账号登录的?
- 入侵者身在何处?
- 入侵者做过什么操作?
- 如何避免服务器中毒,被入侵"
- 所谓知己知彼,方能百战不殆
二、剖析问题并解决
针对上面 前3个问题,开发了一个企业微信二次验证码的安全功能,详细内容如下:
1、企业微信配置
1.1 获取AgentId(AppID)、Secret
创建一个企业微信应用
1.2 获取 CropID
点击我的企业
–企业信息
2、监控用户登录,发送通知给微信
放到/etc/profile.d/ 登录自动触发
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#!/bin/bash
#WeiXin ENV-------------------------------------------------------------------------------------
CropID='ww022bebbed74xxxx'
Secret='RauJ_-t-LxBhfEN7g1sh4OhVB_vREBWvqeFaaxxxxx'
APIURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
TOKEN=$(/usr/bin/curl -s -G $APIURL | awk -F\" '{print $10}')
POSTURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$TOKEN"
##WeiXin body--------------------------------------------------------------------------------------
function body() {
local int AppID=1000004
local UserID=xuewenlong
local PartyID=2
printf '{\n'
printf '\t"touser": "'"$UserID"\"",\n"
printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'"$AppID"\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$Msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
Status=`who am i | awk '{print $NF}' | sed 's/(//g' | sed 's/)//g'`
if [ -n "$Status" ]; then
Msg="有用户上线请注意:\n主机名:`hostname`\n主机ip:`ifconfig ens33 | grep "inet" | awk 'NR==1{ print $2}'`\n登录用户:`whoami`\n地址来源:"$Status""
/usr/bin/curl -s --data-ascii "$(body guozhiheng0123 $2)" $POSTURL 2>&1 > /dev/null
fi
|
3、登录用户需要二次验证码 验证
read 读入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#!/bin/bash
############################################
#通过微信发送验证码
#cnsre 2020-4-26 V1
#
#修改者:xxx
#修改时间:2020-xx-xx
#修改内容:修改内容描述
############################################
##WeiXin ENV-------------------------------------------------------------------------------------
CropID='ww022bebbed749xxxx'
Secret='RauJ_-t-LxBhfEN7g1sh4OhVB_vREBWvqeFaaxxxxx'
APIURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
TOKEN=$(/usr/bin/curl -s -G $APIURL | awk -F\" '{print $10}')
POSTURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$TOKEN"
##WeiXin body--------------------------------------------------------------------------------------
function body() {
local int AppID=1000004
local UserID=xuewenlong
local PartyID=2
printf '{\n'
printf '\t"touser": "'"$UserID"\"",\n"
printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'"$AppID"\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$Msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
Status=`who am i | awk '{print $NF}' | sed 's/(//g' | sed 's/)//g'`
if [ -n "$Status" ]; then
RANDOM=$(date +%s)
echo $RANDOM >/tmp/pass.txt
PASS=`tail -n 1 /tmp/pass.txt`
Msg="你的验证码是:"$PASS""
/usr/bin/curl --data-ascii "$(body xuewenlong $2)" $POSTURL > /dev/null 2>&1
trap "" 2
read -p "请输入验证码:" A
if [ "$A" != "xuewenlong" ] && [ "$A" != "$PASS" ]; then
echo "Verification Code Fail, Now Exit!!!"
sleep 1
logout
else
echo " Welcome to BSH-GC11 System "
fi
fi
|
三、入侵者做过什么操作
一般通过几种手段去做:
- 全站md5指纹识别,确认哪些文件被修改过
- jumpserver 视频录像
- 普通用户sudo操作日志
- 系统日志
1、钉钉配置
钉钉的配置与微信大致相同,具体不在说明,下面直接展示脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
DDcode.sh
#!/bin/bash
###############################
# 2020-4-26 #
# by wenlong #
# 通过钉钉接口发送验证码二次验证 #
###############################
trap "" 1
read -p "请输入你的钉钉手机号:" user
if [ ${#user} -ne 11 ]; then
echo "请出入有效手机号码"
sleep 1
logout
fi
##dingding ENV-------------------------------------------------------------------------------------
Dingding_Url="https://oapi.dingtalk.com/robot/send?access_token=732b97ff63d6bce620025c3eb973ca39c668847260e7d2c9f0b43cf780be0c83"
Status=`who am i | awk '{print $NF}' | sed 's/(//g' | sed 's/)//g'`
if [ -n "$Status" ]; then
RANDOM=$(date +%s)
echo $RANDOM >/tmp/pass.txt
PASS=`tail -n 1 /tmp/pass.txt`
Msg="你的验证码是:"$PASS""
curl "${Dingding_Url}" -H 'Content-Type: application/json' -d "
{
'msgtype': 'text',
'text': {'content': '${Msg}\n'},
'at': {'atMobiles': [ '${user}' ], 'isAtAll': false}
}" > /dev/null 2>&1
trap "" 2
read -p "请输入验证码:" code
if [ "$code" != "xuewenlong" ] && [ "$code" != "$PASS" ]; then
echo "验证码验证失败!!!"
sleep 1
logout
else
echo " Welcome to shvm01 System "
fi
fi
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
login.sh
#!/bin/bash
###############################
# 2020-4-26 #
# by wenlong #
# 通过钉钉接口发送用户登录信息 #
###############################
Dingding_Url="https://oapi.dingtalk.com/robot/send?access_token=732b97ff63d6bce620025c3eb973ca39c668847260e7d2c9f0b43cf780be0c83"
Status=`who am i | awk '{print $NF}' | sed 's/(//g' | sed 's/)//g'`
if [ -n "$Status" ]; then
Msg="有用户上线请注意:\n主机名:`hostname`\n主机ip:`ifconfig eth0 | grep "inet" | awk 'NR==1{ print $2}'`\n登录用户:`whoami`\n地址来源:"$Status""
curl "${Dingding_Url}" -H 'Content-Type: application/json' -d "
{
'msgtype': 'text',
'text': {'content': '${Msg}\n'},
'at': {'atMobiles': ['${user}' ], 'isAtAll': false}
}" > /dev/null 2>&1
fi
|
作者:SRE运维博客
博客地址:https://www.cnsre.cn
文章地址:https://www.cnsre.cn/posts/210419130919/
相关话题:https://www.cnsre.cn/tags/shell/