Category Archives: security

[メモ] clamav先生、悪意のあるソフトウェア削除ツールにトロイを見つける(誤検出)

Pocket

Windows xp用にと、大昔に取得していたMicorosoftの”悪意のあるソフトウェア削除ツール”をclamavでチェックしたらトロイを見つけおって真っ青になりました。
わたくし、トロイの入った削除ツールをいろんなxpマシンにインストールしたのかと。
しかしまあ、結論から言うと、誤検出でした。

ファイルやURLを登録すると各種アンチウイルスソフトウェアでのチェック結果を表示してくれるVirusTotalというサイトがあります。
ググったところ、このVirutsTotalでの結果がヒットしました。
結果、55のアンチウイルスソフト中、Clamavのみがトロイを検出。
おそらくClamavの誤検出と判断してよいと思います。
ただ、念のため該当ファイルは削除しました。

参考情報として記録を残します。
Clamavのエンジンは以下の通り。

ClamAV 0.98.4/19317/Sun Aug 31 14:18:51 2014

誤検出(と思われる)したトロイは以下のもの

Win.Trojan.Swrort-12784

最新の Windows-KB890830-V5.15.exe (ただWindows7用ですが)では検出なし。

Sambaの汚物(ウイルス)は消毒だ。samba-virusfilter編

Pocket

 

Sambaの汚物(ウイルス)は消毒だ。哀愁のsamba-virusfilter編である。
virusfilterはsambaのvfs。
samba上ファイルを開くときにclamavでスキャンしてくれる。
そういうタイプのvfsはvscan-clamavが有名だが、FreeBSDのportsやpkgには見当たらない。
そこでvirusfilterで試してみた。
試してみた、というのは、ファイルの開け閉めの際にスキャンするのはどうもいただけなく感じるので、本運用には至らなかったから。
なお、clamav、sambaはインストール済みの前提。

samba-virusfilterのインストール

security/samba-virusfilterからインストールできる。
設定ファイルの説明は以下を参照。ただしclamdが動いている前提。
https://github.com/fumiyas/samba-virusfilter/blob/master/etc/smb.svf-clamav.conf.tmpl

設定例

  vfs objects = svf-clamav
  svf-clamav:socket path = /var/run/clamav/clamd.sock # clamavのソケット
  svf-clamav:can on open = yes # ファイルを開くときにスキャンする
  svf-clamav:can on close = no # ファイルを閉じるときにもスキャンする
  svf-clamav:max file size = 100000000 # スキャンするファイルのサイズ上限
  svf-clamav:min file size = 0 # スキャンするファイルのサイズ下限
  ## What to do with an infected file
  ## nothing: Do nothing (default)
  ## quarantine: Try to move to quantine directory
  ## delete: Delete infected file
  svf-clamav:infected file action = nothing
  ## Where to move infected files
  svf-clamav:quarantine directory = @SAMBA_LOCKDIR@/svf/quarantine
  ## Prefix for files in quarantine directory
  svf-clamav:quarantine prefix = svf.

ウイルスを見つけたき「何もしない」を選択した場合、感染ファイルはそのまま共有ディレクトリ上に残るし見える。
しかしユーザは当該ファイルを開くことはできない。
ウイルスを発見したとき、ログとしては/var/log/samba下のログに、以下のように記録される。

[2014/03/22 22:51:19.578805,  0] ../include/svf-vfs.h:668(svf_scan)
  Scan result: Infected: /usr/home/vanilla/share/testvirus.txt: Eicar-Test-Signature

 

Sambaの汚物(ウイルス)は消毒だ。scannedonly編。

Pocket

sambaのvfs, scannedonly

scannedonlyとは、sambaのvfs。
その名前の通り、スキャン済みのもののみ開いたりダウンロードできるようになる。

scannedonlyのインストール

scannedonlyのvfsは、実はSambaに含まれる。
あれ?じゃあすぐ使えるの?と思ったのだが、それは間違いで、実際にスキャンを行うdaemonを別にインストールする必要がある。
その代わりと言っては何だが、clamdを立ち上げる必要はない。
security/scannedonlyからインストールできる。
以下はインストール例。sysctl.confに一行追加しとけよ、と言われるのでその通りにしておく。

$ sudo pkg install scannedonly
Updating repository catalogue
The following 1 packages will be installed:

Installing scannedonly: 0.21

The installation will require 61 KB more space

24 KB to be downloaded

Proceed with installing packages [y/N]: y
scannedonly-0.21.txz 100% 24KB 24.3KB/s 24.3KB/s 00:00
Checking integrity... done
[1/1] Installing scannedonly-0.21... done
**************************************************
* WARNING! *
* *
* Make sure you've enough socket buffer size. *
* Consider increasing kern.ipc.maxsockbuf adding *
* at least the following sysctl setting to *
* /etc/sysctl.conf: *
* *
* kern.ipc.maxsockbuf=589824 *
* *
**************************************************
[vanilla@yaryka ~]$

 

scannedonlyの設定の流れ

scannedonlyの設定には、前章のとおりにsysctl.confを修正することに加え、①vfsとしてのscannedonlyの設定、②daemonとしてのscannedonlyの設定が必要

まず③のdaemonとしての設定から。

scannedonly daemonの設定

/etc/rc.confで行う。
設定例は以下のとおり。

scannedonly_clamav_enable="YES"
scannedonly_clamav_flags=" --scanroot /usr/home/vanilla/share --big 20 -t 8 -m 20"

おなじみの一行目はシステム起動時にdaemonも起動させる指定。
二行目でdaemonに与えるオプションを指定する。
上記の–scanrootは、スキャン対象のファイルが置かれるトップディレクトリを指定する。
daemonは、ここで指定されたディレクトリ外のファイルのウイルススキャンを要求されても無視する。

その他のオプションには;

-p --portnum: ポート番号。ネットワークソケット経由でスキャンするならこちら。
-s path --socket=path : UNIX domainソケット。デフォルトは/var/run/scannedonlyd.sock
-t 4 --maxthreads=4 : ウイルススキャンを行うスレッドの数。デフォルトは4。
-b 10 --big=10 : 「大きいファイルだ」と認識するサイズをメガバイト単位で指定。後ほど触れる。
-q 1000 --queuelen=1000 : スキャン待ちできる数。これを超えて要求されたウイルススキャンは無視される。
-m 20 --time=20 : ここで指定された分ごとにステータスメッセージをログに吐く。

scannedonlyのスレッドと「大きいファイル」について

scannedonlyはデフォルトでスキャン用に4スレッドを用意する。
複数のスキャン要求が来たとき、scannedonlyは「大きいファイル」を特定の1スレッドのみに割り当てる。残りのスレッドは「小さいファイル」をざくざくスキャンする。
こうすることでスキャンの待ち行列をスムーズに解消しようと試みる。
「大きいファイル」は前述の–bigで指定するサイズで決まる。
この値は、共有ファイルにどんなファイルがあるかを前提に変えたらよい。
デフォルトの10MBはちょっと小さいので、20MBにした。

scannedonly vfsの設定

smb.confに書く。
shareごとに設定できる。
以下が設定例。
最後の行だけ特殊。後述。

[share]
(略)
vfs objects = scannedonly # scannedonlyを有効に。
scannedonly:domain_socket = True # domain socketを使うよ
scannedonly:socketname = /var/run/scannedonlyd.sock # domain socketの指定
scannedonly:hide_nonscanned_files = True # 未スキャンファイルを隠し、(下の行に続く)
scannedonly:scanning_message = is being scanned for viruses # スキャン中である旨表示する。
scannedonly:allow_nonscanned_files = True # Officeドキュメントを共有するならTrueに。後述。

 

起動

scannedonly daemonを起動し、そのあとsambaを(再)起動。

$ sudo service scannedonly start
Starting scannedonly_clamav.
$ sudo service samba restart
Performing sanity check on Samba configuration: OK
Stopping smbd.
Stopping nmbd.
Waiting for PIDS: 4847.
Removing stale Samba tdb files: ....... done
Starting nmbd.
Starting smbd.
$

このとき、/var/log/messagesには以下の表示があるはず。

Mar 21 21:13:35 yaryka scannedonlyd_clamav[5741]: Starting with socket /var/run/scannedonlyd.sock and 8 threads
Mar 21 21:13:47 yaryka scannedonlyd_clamav[5741]: Finished building databases. Ready for scanning with 8 threads


実験:未スキャンのファイルはどう表示されるか。

さっそく共有フォルダにファイルを放り込んでみよう。
小さいファイルだと変わらないようにみえるが、ちょっと大きいファイルになると、コピーが終わってからスキャンが終わるまで、以下のような表示になるはず。
beingscanned

なお、hide_nonscanned_filesをFalseにした場合、コピーが終わった瞬間にファイルは表示される。
スキャンが終わってなくても表示される。
されるのだが、開こうとしたりコピーしようとすると、「アクセス権がない」旨のメッセージが表示されて蹴られる。
ユーザからしてみれば、ファイルが見えるのに開けないのはストレスでしかない。
hide_nonscanned_filesはTrueをお勧めする。
しかし。

Officeドキュメントを共有する場合

scannedonlyの仕組みで困るのは、Officeドキュメント。
というのも、Officeはファイルを頻繁に開け閉めするから。
その都度、スキャンが走り、終わるまでファイルを開けなくなる。
要するに、使い物にならん。
そこで下記の行を追加して、未スキャンファイルも開けるようにするほかない。
うーん…。

scannedonly:allow_nonscanned_files = True

まあ、仕方ないよね。

バックヤードでは

さて。scannedonlyのバックヤードはどうなっているのだろうか。
実ディレクトリを見てみると、このようになっている。

$ ls -la
total 84360
drwxrwxrwx  2 vanilla  clamav        512 Mar 21 01:17 .
drwxr-xr-x  3 vanilla  vanilla       512 Mar  3 22:40 ..
-rwxr--r--  1 vanilla  clamav          0 Mar 21 21:17 .scanned:Sophos Virus Removal Tool.exe
-rwxr--r--  1 vanilla  clamav   86325064 Mar 17 23:35 Sophos Virus Removal Tool.exe
$

ディレクトリに置かれたファイルと同じファイル名、ただしファイル名の先頭に「.scanned:」と付いたサイズ0バイトのファイルができる。
このファイルでスキャン済みかどうかを、scannedonlyは判断している。
ちなみに、オリジナルのファイルを消すと.scannedの方も消える。
.scannedだけが残るということはないからご安心めされよ。
もちろん、ファイルを更新した際には再スキャンが行われる。

大きなファイルを共有フォルダにコピーしはじめ、そのあとに小さなファイルを共有フォルダに置くと、小さいファイルはすぐに表示される。
複数スレッドで処理していることと、大きいファイルは1スレッドでしか処理しないことからこのような動作になる。

また、しばらくすると、/var/log/messagesにはログが増えているはず。

Mar 21 21:33:47 yaryka scannedonlyd_clamav[5741]: Status: scanned 3 files and 0 large files in 20 minutes; min 0/max 4 requests on small queue, min 0/max 0 requests on large queue


実験: virusが見つかったらどうなる?

試してみた。
testvirus.txtというファイルを突っ込んでみると、コピーが終わっても共有フォルダには表示がされない。
代わりに、同じファイル名、ただしファイル名先頭に「VIRUS_found_in_」、末尾に「.txt」と付いたサイズ0のファイルが作られ表示される。
virusfoundscann

このとき、実ディレクトリはこのようになっている。
つまりオリジナルのファイルは「.virus:」と頭に付けられて、ユーザからは見えなくなっている。

$ ls -la
total 12
drwxrwxrwx  2 vanilla  clamav   1024 Mar 21 01:44 .
drwxr-xr-x  3 vanilla  vanilla   512 Mar  3 22:40 ..
-rwxr--r--  1 vanilla  clamav     68 Mar 21 21:44 .virus:testvirus.txt
-rwxr--r--  1 vanilla  clamav      0 Mar 21 21:44 VIRUS_found_in_testvirus.txt.txt
$

さらにこのとき、/var/log/messagesには以下のように。
1,2行目がウイルス発見時のもの、3行目はstatus report時のものである。

Mar 21 21:42:51 yaryka scannedonlyd_clamav[5741]: 0:0: WARNING: /usr/home/vanilla/share/testvirus.txt contains virus Eicar-Test-Signature!
Mar 21 21:42:51 yaryka scannedonlyd_clamav[5741]: 0: moving /usr/home/vanilla/share/testvirus.txt to /usr/home/vanilla/share/.virus:testvirus.txt
Mar 21 21:44:59 yaryka scannedonlyd_clamav[6836]: Warning: 1 files failed to scan in 1 minutes (error or virus found)

 

以上

Sambaの汚物(ウイルス)は消毒だ。あるいはsambaのvfsでウイルススキャン

Pocket

Samba上のファイルをウイルススキャンするには。

Samba上のファイルをウイルススキャンするならどんな方法があるだろうか。
一つは、cronで定期的にスキャンする方法である。
もう一つは、Sambaにスキャンを組み込む方法である。

クライアントにアンチウイルスソフトウェアがインストールされており、定義ファイルも更新されているなら、前者のcronがおすすめである。
理由にはあとで触れる。
クライアントを信用できないなら、後者のsamba側スキャンが候補に挙がる。

Sambaのウイルススキャンvfs

Sambaにはvfsスタッカブルモジュールという仕組みがある。
Sambaに追加機能をもたらすものだが、ウイルススキャン機能を追加するvfsもいくつかある。
http://www.samba.gr.jp/project/translation/Samba3-HOWTO/VFS.html

これらのvfsには、大きく分けて以下二つのアプローチがある。

  1. ファイルをオープンするときにスキャン
  2. スキャン済みのファイルのみオープンを許可

1には、vscan-clamavやvirusfilterとがある。
2には、scannedonlyがある。それ以外には知らない。

以下、二つのアプローチの特徴を、たいへん大まかに記す。

アプローチ1: ファイルオープン時スキャン法

Samba上ファイルを開くときに外部のウイルススキャナへファイルを渡し、スキャンするというもの。
まあ普通に考えるとそうなるわな、という方法。
ただ短所はある。
ファイルに変更があろうがなかろうが、開くたびにスキャンする。
ユーザはスキャンが終わるまで待たされる。
仮にファイルがとてつもなく巨大だと、待たされる時間も長くなる(スキャン対象とするファイルサイズ上限は決められる)。
同時接続ユーザが増えても問題になるだろう。

アプローチ2: あらかじめスキャン法

②、すなわちscannedonlyは、ファイルが共有ディレクトリ上に置かれたとき、あるいは更新があったときにスキャンする。
スキャン済みのファイルであれば、ファイルオープン時に再スキャンは行われない。
ファイルオープン時にオーバーヘッドがないこと、ファイルのサイズが大きくてもまったく影響のないこと、ユーザ数の増加による負荷への影響が少ないことは長所である。

もちろん、こちらにも短所がある。
当該ファイルがスキャン済みであることを示す「しるし」が必要である。
scannedonlyは、この「しるし」として、.scannedというサイズ0バイトのファイルを作る。
つまり、共有ディレクトリに置かれるファイルの数が倍になる。
サイズが0バイトであるものの、iノードの残量には懸念の生じることがあるかも。
当然、①にはこの懸念はない。

やっぱりcronで定期スキャンだよね

ご覧のとおり、1,2ともに短所がある。
クライアント側のウイルス対策が保証できるなら、cronで定期的にスキャンしたほうがよいだろう。
しかしクライントが信用ならないのなら、アプローチの1,2いずれかを選んで、Sambaでウイルス対策を講じるべき。
ということで、アプローチ1,2のインストール、設定方法については記事を改めて示す。

[メモ] テスト用のウイルスはEICARで

Pocket

 

アンチウイルスソフトのテストには、実際にウイルスを食わせるのが一番である。ただまあウイルスなんて物騒なものは、そうそう手には入らない。
どうしたもんかと思ってんだが、やっぱりあるとこにはあるんですなあ。

The Anti-Malware Test file
http://www.eicar.org/86-0-Intended-use.html

上記ページの下部にある文字列をテキストファイルに貼り付ければテスト用ウイルスの出来上がり。手軽。
アンチウイルスソフトにはウイルスとして判定されるが実害なし。