Clamd Protocol
TL;DR
man 8 clamd
に書いてある
socket
デフォルトだと/var/run/clamav/clamd.ctl
にUNIX Domain Socketがある
なので、nc -U /var/run/clamav/clamd.ctl
とかで試せる
clamav/clamav
のDocker imageの場合は/tmp/clamd.sock
にソケットがあるほか、3310番ポートでTCP接続できる。
prefixでdelimiterを指定する。
z
をコマンドのprefixにつけるとNUL文字がdelimiterとして使用され、n
の場合は改行が使用される
commands
ping
$ nc -U /var/run/clamav/clamd.ctl
nPING
PONG
version
$ nc -U /var/run/clamav/clamd.ctl
nVERSION
ClamAV 0.103.9/27118/Sat Dec 9 18:38:20 2023
reload
dbのリロードを行う
$ nc -U /var/run/clamav/clamd.ctl
nRELOAD
RELOADING
shutdown
/ # nc localhost 3310
nSHUTDOWN
SCAN
~ # nc localhost 3310
nSCAN /tmp
/tmp/eicar.org.com: Win.Test.EICAR_HDB-1 FOUND
CONTSCAN
こちらはSCANとは違って、マッチした(マルウェアが見つかった)場合でもスキャンを続ける。
nCONTSCAN /tmp
/tmp/eicar.org.com: Win.Test.EICAR_HDB-1 FOUND
MULTISCAN
マルチスレッドでスキャンを行う
nMULTISCAN /tmp
/tmp/eicar.org.com: Win.Test.EICAR_HDB-1 FOUND
ALLMATCHSCAN
SCANと基本的には同じだが、ファイル内で一致が見つかった場合もスキャンを続行する
nALLMATCHSCAN /tmp
/tmp/eicar.org.com: Win.Test.EICAR_HDB-1 FOUND
/tmp/eicar.org.com: Win.Test.EICAR_HSB-1 FOUND
/tmp/eicar.org.com: Eicar-Signature FOUND
INSTREAM
streamで渡されたデータに対してスキャンを行う。
データをチャンクに分けて送信し、チャンクのフォーマットは<length><data>
みたいな感じ
lengthが0のチャンクを送るとスキャンが始まる
FILEDES
UNIX domain socketでのみ動作する。
ファイルディスクリプタのスキャンを行う。使い道がよくわからん
STATS
~ # nc localhost 3310
nSTATS
POOLS: 1
STATE: VALID PRIMARY
THREADS: live 1 idle 0 max 10 idle-timeout 30
QUEUE: 0 items
STATS 0.000099
MEMSTATS: heap N/A mmap N/A used N/A free N/A releasable N/A pools 1 pools_used 1301.338M pools_total 1301.382M
END
IDSESSION
SESSIONを作成し、そのなかで複数のコマンドを実行できる
~ # nc localhost 3310
nIDSESSION
nPING
1: PONG
nVERSION
2: ClamAV 1.2.1/27112/Sun Dec 3 08:45:07 2023
nSCAN /tmp
3: /tmp/eicar.org.com: Win.Test.EICAR_HDB-1 FOUND
nEND
VERSIONCOMMANDS
~ # nc localhost 3310
nVERSIONCOMMANDS
ClamAV 1.2.1/27112/Sun Dec 3 08:45:07 2023| COMMANDS: SCAN QUIT RELOAD PING CONTSCAN VERSIONCOMMANDS VERSION END SHUTDOWN MULTISCAN FILDES STATS IDSESSION INSTREAM DETSTATSCLEAR DETSTATS ALLMATCHSCAN
おわりに
この記事はn01e0 Advent Calendar 2023の9日目の記事です。
明日はあるかわかりません
また、IPFactory OB Advent Calendar 2023の9日目の記事も兼ねています。
Comments