Open2
chkrootkit の誤検知
Linux.Xor.DDoSの誤検知
hourlyで動かしてるchkrootkitから不穏なメールが・・・
/etc/cron.hourly/chkrootkit:
Searching for Linux.Xor.DDoS ... INFECTED: Possible Malicious Linux.Xor.DDoS installed
いや、これは誤検知でしょう!?
root@pi4:/tmp# ls -lt
total 16
drwx------ 2 ryo ryo 4096 Dec 13 19:48 tmp.rD8pVvNrRw
drwx------ 3 root root 4096 Nov 26 18:07 systemd-private-55087da03c6d4dce9df911dab8feeeda-systemd-timesyncd.service-m3XV
mG
drwx------ 3 root root 4096 Nov 7 06:03 systemd-private-55087da03c6d4dce9df911dab8feeeda-redis-server.service-cQ3MtP
drwx------ 2 root root 4096 Oct 26 09:23 pulse-PKdhtXMmr18n
root@pi4:/tmp# cd tmp.rD8pVvNrRw/
root@pi4:/tmp/tmp.rD8pVvNrRw# ls
rustup-init
root@pi4:/tmp/tmp.rD8pVvNrRw# ls -l
total 13076
-rwxr--r-- 1 ryo ryo 13388740 Dec 13 19:48 rustup-init
rustup-init って実行可能ファイル、これがひっかかってるね
rustのインストールを公式通りにしようとしたけど、ラズパイ4のリポジトリにrustcとcargoがあったので、インストールを途中でやめてそっちを使うことにしたのです
root@pi4:/tmp/tmp.rD8pVvNrRw# rm rustup-init
root@pi4:/tmp/tmp.rD8pVvNrRw# cd ..
root@pi4:/tmp# rmdir tmp.rD8pVvNrRw
これで良いはず・・・
root@pi4:/tmp# /usr/bin/nice /root/chkrootkit-0.55/chkrootkit | /bin/grep INFECTED
root@pi4:/tmp#
オッケーでした!
bindshellの誤検知
またある日、
Checking `bindshell'... INFECTED PORTS: ( 465)
という検知が・・・
とりあえず確認すると
root@rtiny:~/chkrootkit-0.55# ./chkrootkit.org | grep INFE
Checking `bindshell'... INFECTED PORTS: ( 465)
何が465みてるんだろ?ということで確認するも
root@rtiny:~/chkrootkit-0.55# netstat -pan | grep ":465 "
root@rtiny:~/chkrootkit-0.55#
無いし・・・謎すぎる・・・
ググるとpostfixで誤検知してるパターンがあるというが、postifxで456をlinstenしてないし、謎・・・
ざっくりソースを確認すると
bindshell () {
PORT="114|145|465|511|600|1008|1524|1999|1978|2881|3049|3133|3879|4000|4369|5190|5665|6667|10008|12321|23132|27374|29364|30999|31336|31337|37998|45454|47017|47889|60001|7222"
OPT="-an"
_chk_netstat_or_ss;
[ "$netstat" = "ss" ] && OPT="-a"
PI=""
if [ "${ROOTDIR}" != "/" ]; then
echo "not tested"
return ${NOT_TESTED}
fi
if [ "${EXPERT}" = "t" ]; then
expertmode_output "${netstat} ${OPT}"
return 5
fi
for P in `echo $PORT | ${sed} 's/|/ /g'`; do
if ${netstat} "${OPT}" | ${egrep} "^tcp.*LIST|^udp" | ${egrep} \
"[.:]${P}[^0-9.:]" >/dev/null 2>&1
then
PI="${PI} ${P}"
fi
done
if [ "${PI}" != "" ]
then
echo "INFECTED PORTS: ($PI)"
else
if [ "${QUIET}" != "t" ]; then echo "not infected"; fi
fi
}
どうやらnetstatじゃなくてssってのが使われてるみたいな・・・
root@rtiny:~# ss -a | grep [.:]465[^0-9.:]
udp ESTAB 0 0 [xxxx:xxx:xxxx:xxxx:xxxx:465e:xxxx:xxxx]:33495 [xxxx:xxxx:xxxx:xxx::xxxx]:443
...
IPv6アドレスの一部が :465e: ってなってて、ここに引っかかってしまってる、なんという誤検知!
正規表現修正するほうが良い気がしたけど、とりあえず
#
# NETSTAT OR SS
#
_chk_netstat_or_ss()
{
netstat="netstat"
#CMD=`loc ss ss $pth`
#[ ${?} -eq 0 ] && netstat="ss"
}
ssをやめてnetstatを使ってIPv4しかチェックしない方向で対応しました