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日目の記事も兼ねています。