2006年3月18日土曜日

(FreeBSD) portauditでportsのセキュリティチェック

Winnyを利用するウイルスに感染して、あちこちから情報が流出。あ~あ、やっちゃった。覆水盆に帰らず。There is no use crying over spilt milkということわざを思い出すと、なぜか、小学校のころの給食の時間、床に牛乳をこぼし、それをふいたゾウキンが、あとになって、カピカピに固まっていて、ものすごい臭いを発していたことまで思い出しちゃいました。



というわけで、Winny関係のウイルス(あれってウイルスなのか?って気もしますが、まあ悪意のあるソフトウェアの総称って意味でウイルスとしときましょう)、あれって別にWinnyにセキュリティホールがあるから情報が流出・・・ってわけじゃないんですよねぇ。テレビのニュースで一生懸命解説していますが、まあ、理解している人は、少ないでしょう。



どんなにソフトウェアのセキュリティホールをふさいだとしても、人間のほうがコロっとだまされてしまう、ってことを実証したわけでして、オレオレ詐欺・振り込め詐欺と同様に、痛い思いをした教訓として肝に銘じておくべきですね。



当分の間は、人間自身のセキュリティホールは自分が気をつける、ってことで対処するしかないわけですが(Windows Vistaでもまだダメかな)、ソフトウェアにセキュリティホールがあることがわかっているのなら、それを放置しておくわけにはいきません。そういえば、先日、3月分のWindowsUpdateがでてましたね。



☆ ☆ ☆ ☆ ☆



FreeBSDでも、WindowsUpdateのように、脆弱性のあるソフトウェアを簡単にアップデートする仕組みがあればいいのになぁ、と思うわけですが・・・とりあえず、脆弱性が発見されたソフトウェアがありますよ~、と教えてくれる「portaudit」というツールがあります。



portauditは、portsになっています。場所は、/usr/ports/security/portaudit です。



■ portauditのインストール



いつもportsを使うときと同じで、こんなかんじでインストール。

# cd /usr/ports/security/portaudit
# make install clean
===>  Vulnerability check disabled, database not found
===>  Extracting for portaudit-0.5.10
===>  Patching for portaudit-0.5.10
===>  Configuring for portaudit-0.5.10
===>  Building for portaudit-0.5.10
===>  Installing for portaudit-0.5.10
===>   Generating temporary packing list
===>  Checking if security/portaudit already installed



===>  To check your installed ports for known vulnerabilities now, do:



      /usr/local/sbin/portaudit -Fda



===>   Compressing manual pages for portaudit-0.5.10
===>   Registering installation for portaudit-0.5.10
===>  Cleaning for portaudit-0.5.10

■ portauditを実行する



上に書かれているメッセージのとおりに従い、「portaudit -Fda」というコマンドを実行してみます。

# /usr/local/sbin/portaudit -Fda
auditfile.tbz                                 100% of   33 kB   30 kBps
New database installed.
Database created: Fri Mar 17 22:10:12 JST 2006
Affected package: gnupg-1.4.2.1
Type of problem: GnuPG does not detect injection of unsigned data.
Reference: <http://www.FreeBSD.org/ports/portaudit/948921ad-afbc-11da-bad9-02e081235dab.html>

portauditは、まずソフトウェアの脆弱性を記録したデータベース(auditfile.tbz)をネットワークからダウンロードします。



つぎに、そのデータベースと、portsでインストールされたソフトウェアのバージョン番号などとを照合します。



そして、不具合のあるソフトがインストールされていることが見つかると、それを報告します。上の例では、gnupg-1.4.2.1がインストールされているけど、これには問題が見つかっているよ、と報告しています。



portauditが、自動でソフトをアップデートしてくれたりはしません。自分で、portupdateコマンドを使って、アップデートする必要があります。上の例の場合では、「portupgrade gnupg-1.4.2.1」と実行すれば、アップデートできます。



portauditでレポートされるけど、まだソフトウェアの修正ができていなくて、portupdateしても更新されない、ということも、たまにあります・・・そういうときは度胸で切り抜けます。ウソです。



■ portauditは、毎日自動実行されます



portauditをインストールすると、
/usr/local/etc/periodic/security/410.portaudit
というファイルが作られ、これにより、cronでdailyが実行されるときに、ついでにportauditも実行されるようになります。



cronでdailyが実行されると、rootあてにメールが届きますが、そのなかに、以下のような、portauditが実行されたときのログが含まれているはずです。

Checking for a current audit database:



Downloading fresh database.
auditfile.tbz                                           33 kB   62 kBps
New database installed.
Database created: Thu Mar 16 02:40:16 JST 2006



Checking for packages with security vulnerabilities:



Affected package: gnupg-1.4.2.1
Type of problem: GnuPG does not detect injection of unsigned data.
Reference: <http://www.FreeBSD.org/ports/portaudit/948921ad-afbc-11da-bad9-02e081235dab.html>



1 problem(s) in your installed packages found.



You are advised to update or deinstall the affected package(s) immediately.



-- End of security output --

なお、知っていいる人はわかっていると思いますが・・・dailyは、普通、真夜中に実行されます。/etc/crontabを見ると、

# Perform daily/weekly/monthly maintenance.
1       3       *       *       *       root    periodic daily
15      4       *       *       6       root    periodic weekly
30      5       1       *       *       root    periodic monthly

とあるので、夜中の3時1分に、FreeBSDが動いていない場合は、dailyは実行されません。昼間だけFreeBSDを動かしている人は、/etc/crontabを編集して、3を13とかに変えて、昼間実行されるようにするとよいでしょう。

# Perform daily/weekly/monthly maintenance.
1       13      *       *       *       root    periodic daily
15      14      *       *       6       root    periodic weekly
30      15      1       *       *       root    periodic monthly

■ portauditでプロキシーサーバを指定する



portauditは、ネットワークから情報をダウンロードして、不具合のあるソフトがあるかどうかをチェックします。そのためファイアウォールで守られた中で動いているFreeBSDでは、portauditが情報をダウンロードできるようにするために、プロキシーサーバ(http proxyとかftp proxy)を指定する必要があります。



/usr/local/etc/portaudit.confというportaudit用の設定ファイルがあります。



設定ファイルのサンプルが、/usr/local/etc/portaudit.conf.sampleにあるので、これをportaudit.confという名前でコピーし、その中のportaudit_fetch_envで指定します。



こんな感じで記述例が書かれているので、すぐ気がつくでしょう。

# specify a proxy if needed, see fetch(3)
#portaudit_fetch_env="FTP_PROXY=
http://ftp.proxy.sample/  HTTP_PROXY=
http://http.proxy.sample:80/"

手でportaudit -Fdaを実行するときはファイルがダウンロードされるのに、cronのdailyからportauditが実行されるときは、ファイルがダウンロードされない・・・そんなときは、portaudit.confでのプロキシーサーバの指定を疑ってみるとよいでしょう。手で実行するときは、環境変数のHTTP_PROXYが設定されているのでダウンロードできてたけど、cronから実行されるときはプロキシーサーバを指定する環境変数は、ふつうは設定されていません。たぶんそれが原因。



0 件のコメント:

コメントを投稿