プロジェクト

全般

プロフィール

KippoBrinker » kippoBrinker.sh

突然100個のssh起動シェル - kanata, 2025/04/13 13:55

 
#!/bin/bash

# kippoBrinker ver 0.4
# 2015/10/24 kanata

MY_IP_ADDR=`hostname -i|head -1|cut -d' ' -f2` # 自分のIPアドレスを設定(このIPでBINDする)
PROC_NUM="25" # ダミーsshdを何個立ち上げるか
EXEMPT_PORT_LIST="80 443" # ダミーsshdの対象外ポート
DUMMY_ENTRY_PORT="22" # ダミー待ち受けポート

#------------------#
# シグナルハンドラ #
#------------------#
kippoDeploy () {
# 既にプロセス生成されている場合は、何もしない
NOW_PROC_NUM=`ps -ef | grep twistd|wc -l`
if [ "${PROC_NUM}" -le "${NOW_PROC_NUM}" ]
then
return 0
fi

for i in `seq ${PROC_NUM}`
do
# ダミー用ポートの生成 (1~5000番のポートをランダムに設定する)
#SSH_KIPPO_PORT=`echo $(( $(od -vAn -N4 -tu4 < /dev/random) % 5000 ))`
SSH_KIPPO_PORT=`expr $RANDOM % 5000 + 1`
for WORK_PORT in ${EXEMPT_PORT_LIST}
do
if [ "${WORK_PORT}" = "${SSH_KIPPO_PORT}" ]
then
#SSH_KIPPO_PORT=`echo $(( $(od -vAn -N4 -tu4 < /dev/random) % 5000 ))`
SSH_KIPPO_PORT=`expr $RANDOM % 5000 + 1`
fi
done
# ダミー用シグネチャの生成 (kippoBrinker.txtからランダムに選択する)
L=`cat kippoBrinker.txt|wc -l`
L=`echo $(( $(od -vAn -N4 -tu4 < /dev/random) % ${L} ))`
L=$(( L + 1 ))
SSH_KIPPO_SIG=`sed -n ${L}p kippoBrinker.txt`
# configファイル生成
sed -e "s/ssh_version_string = SSH-2.0-OpenSSH_5.1p1 Debian-5/ssh_version_string = ${SSH_KIPPO_SIG}/" kippo.cfg.dist |sed -e "s/ssh_port = 2222/ssh_port = ${SSH_KIPPO_PORT}/" > kippo.cfg
# 起動
#echo "Debug: dummy sshd port ${SSH_KIPPO_PORT}"
rm -f kippo.pid
twistd -y kippo.tac -l log/kippo.log --pidfile kippo.pid
rm -f kippo.pid
done
# 30分後にダミーsshdは全部落とす
sleep 30m
pkill twistd
}

noexit () {
:
}

#--------------#
# シグナル登録 #
#--------------#
trap kippoDeploy 14
trap noexit 1 2 3 4 15

#------------------------#
# メイン処理 #
# ダミーエントリーの制御 #
#------------------------#
while :
do
# ダミーエントリーの起動
if ps -ef | grep -v grep | grep "kippoBrinkerDummyEntry.py ${MY_IP_ADDR} ${DUMMY_ENTRY_PORT}" > /dev/null
then
:
else
python kippoBrinkerDummyEntry.py ${MY_IP_ADDR} ${DUMMY_ENTRY_PORT}
# 実行失敗した場合は、ポート未開放の場合あり、3分まって再接続する
if [ $? -ne 0 ]
then
pkill -9 kippoBrinkerDummyEntry.py
sleep 3m
fi
fi
done

exit 0

(1-1/5)