-
Notifications
You must be signed in to change notification settings - Fork 0
Chapter 3
hal0taso edited this page Aug 7, 2017
·
1 revision
第3章の事前学習課題について説明します。第3章では ClamAV に触れてもらいます。
最初の事前課題は、 FUSE を使って clamfs を試してもらおうと思っていたのですが、 そろそろ期末試験&他の講義の事前学習と重なって忙しいと思いますので省略し、余裕が ある人はチャレンジしてもらうという形にしようと思います。ちなみに、この事前課題では 特定の名前のファイルにアクセスしようとすると拒否される( clam コマンドインジェクションの 一歩手前)という clamfs のバグがあり、それを発見することを通じて、気を付けるべきことに ついて考えてもらおうと思っていました。
2番目/3番目の事前課題では、 ClamAV の API 呼び出し方法を習得してもらおうと思います。
以下に CentOS 7 での手順例を示します。 ex2.c は自力で書けるようになって欲しいのですが、
どうしても解らない場合には、ダウンロードしたものをご利用ください。
CentOS 7 を CentOS-7-x86_64-Minimal-1611.iso を用いてインストールする。
インストールして再起動した後、 root ユーザで以下の操作を行う。
- 最新のパッケージにアップデートする。
yum -y update
- ClamAV は EPEL レポジトリにあるので、 EPEL レポジトリを追加する。
yum -y install epel-release
- ClamAV の動作を試すために、バイナリのパッケージをインストールする。
yum -y install clamav
- ソースから再コンパイルするために、 yum-utils パッケージと rpm-build パッケージをインストールする。
yum -y install yum-utils rpm-build
- ClamAV をソースのパッケージからビルドする。(バージョン部分はディストリビューションにより
異なっている可能性がある。また、 CentOS 7 でもアップデートにより変化している可能性がある。)
yumdownloader --source clamav
rpm --checksig clamav-0.99.2-1.el7.src.rpm
rpm -ivh clamav-0.99.2-1.el7.src.rpm
yum-builddep -y ~/rpmbuild/SPECS/clamav.spec
rpmbuild -bb ~/rpmbuild/SPECS/clamav.spec
- ビルドした際に生成された検体を用いてテストを行う。
clamscan ~/rpmbuild/BUILD/clamav-0.99.2/test/*
- この講義ではLSMフックからの通知を受けて、スキャンを行って、LSMフックに返事を
返すようなユーザ空間プログラムを使用するが、 clamscan のソースをベースにするのは負担が
大きいと考える。そのため、ソースパッケージに含まれている API の使い方サンプルである
ex1.c をベースにする。まずは、 ex1.c をコンパイルしたものを用いてテストを行う。
yum -y install clamav-devel
cd ~/rpmbuild/BUILD/clamav-0.99.2/examples/
gcc -Wall ex1.c -o ex1 -lclamav
for i in ~/rpmbuild/BUILD/clamav-0.99.2/test/*; do ./ex1 $i; done
- ex1.c が何をしているのか(どのように API を呼び出せばよいのか)を理解する。
ex1.c から参照される他のファイル(つまり API の実装部分)の処理内容までは
理解しなくても構わない。
less ex1.c
- ex1 はコマンドライン引数として1個のファイルしか指定できないため、毎回初期化処理を
呼ぶことになってしまい、効率が悪い。そのため、 ex1.c をベースにしながら、
コマンドラインで指定された全てのファイルを1回の実行でできるように修正した ex2.c を
作成する。そして、作成した ex2.c をコンパイルしたものを用いて再度テストを行う。
(以下ではエディタとして emacs を使っているが、好きなものを使ってよい。)
yum -y install emacs-nox
emacs ex2.c
gcc -Wall ex2.c -o ex2 -lclamav
./ex2 ~/rpmbuild/BUILD/clamav-0.99.2/test/*
最終的には ex2.c をコマンドラインで指定された数だけ繰り返す(有限ループ)のではなく
イベントドリブンでいつまでも繰り返す(無限ループ)ように変形して使うことになる。
どのように修正するかは、LSMモジュールとのインタフェース(通信プロトコル)を
決めないと決められないため、現時点ではまだ修正しない。