授業資料/12 の変更点


#contents

* 脆弱性検査 [#qfb0d93e]

ネットワークサーバとしての脆弱性がどれくらいのものか,定量的に把握するのはなかなか難しい.
しかし,難しいからといって放置しておくとますます状況は悪くなりかねないので,こうした把握について役立つツールを積極的に使おう.

こうした目的には(ネットワーク)スキャナと呼ばれるツールがある. 
以下,有名なものを挙げておこう.

| SAINT (旧 SATAN) | 脆弱性を知るためのスキャナとしての老舗的ツール. SATAN として登場したときは物議をかもした. |
| Nessus | SAINT よりも使いやすい,レポートが分かり易い,スキャナ機能をプラグイン化してあるなどが特徴. ただし,ver.3.0 から GPL でなくなった(個人的利用は無料でできる). |
| OpenVAS | Nessus のライセンスが変更になったので開発された,Nessus の後継ソフトェア. |

** OpenVAS のインストール, 設定 [#u46aff6f]

さて,今回はライセンス的に問題の生じないツールとして OpenVAS を利用しよう.
OpenVAS は脆弱性チェックを実際に行うサーバと,それに指示を出すクライアントのサーバクライアント方式なので,サーバとクライアントを各々インストールする.

その前にまず,いつもの準備
  portsnap fetch; portsnap update

をしておこう.

*** インストール [#s872df2c]
&ref(./notes.png); まずサーバと,それに必要なライブラリ3つをインストールしよう(psearch openvas とすれば,これらがリストアップされるので分かるはず). 

本来ならいつものように portinstall などでサーバをインストールするだけで必要なライブラリも自動的にインストールされるのでそうするのだが,今回はライブラリの一つに問題があり,手で修正を施す必要があるので順番にライブラリを入れていこう.
pkg_info で依存関係を調べると,
+ openvas-libraries
+ openvas-libnasl
+ openvas-server
+ openvas-plugins

の順序でインストールする必要があることが分かる(これ以外の順序ではできない).
そこで,上の順序でインストールする.

  portinstall openvas-libraries
  rehash

次に openvas-libnasl をインストールするが,このライブラリの動作に問題があるので,以下のように対処しておく.
ちなみに,この対処は
http://wald.intevation.org/tracker/download.php/29/220/1079/350/10_fix_gpgme.dpatch
でパッチの形で提供されている.

  cd /usr/ports/security/openvas-libnasl
  make configue
  cd work/openvas-libnasl-2.0.1
  make configure
  cd work/openvas-libnasl-2.0.1/nasl
  cp nasl_signature.c nasl_signature.c.ORG

としてから,emacs や vi で nasl_signature.c を読み込み,173行あたりを以下のように編集する. 
具体的には,赤字の行を書き足す.

>   gpgme_ctx_t ctx = NULL;
>   char * gpghome = determine_gpghome();
> &br; 
> &color(red){gpgme_check_version (NULL);};
> &br;
>  err = gpgme_engine_check_version(GPGME_PROTOCOL_OpenPGP);
> &br;
>   if (err)
>     {
>       print_gpgme_error("gpgme_engine_check_version", err);

これで修正が済んだので,あとはインストールの続き.

  cd ../../..
  make
  make install
  rehash

さて,後は残りのものをインストールしよう.

  portinstall openvas-server
  rehash
  portinstall openvas-plugins
  rehash

libnet, coreutils, rsync, jbigkit などの,他に必要なものもこの過程でインストールされる.
なお,rsync のオプションを選べといわれたら,
&ref(./rsync-options.png);
デフォルトのまま(SSH のみチェック)でよいだろう.

次に,クライアントをインストールしよう.
こちらはいつものように簡単に

  portinstall openvas-client
  rehash

とすればよい.

*** 設定 [#l1fc5cb3]

まずはインストールログに目を通そう.
とりあえずインストールした openvas 系のもの全てについてチェックする.


*** openvas-libraries のインストールログより抜粋 [#yef65b17]

(ライブラリのリンク云々の他に)
> openvas-libraries has been sucessfully installed.
> Make sure that /usr/local/bin is in your PATH before you
> continue

*** oepnvas-libnasl のインストールログより抜粋 [#v58271f5]

> openvas-libnasl has been sucessfully installed.
> Make sure that /usr/local/bin is in your PATH before you
> continue

*** openvas-server のインストールログより抜粋 [#q3066d32]

>  openvas-server has been sucessfully installed.
>  Make sure that /usr/local/bin and /usr/local/sbin are in your PATH before
>  you continue.
>  openvasd has been installed into /usr/local/sbin

*** openvas-plugins のインストールログより抜粋 [#r27d9608]

(特に注目すべき出力はない)

*** openvas-client のインストールログより抜粋 [#wc9e5d87]

(特に注目すべき出力はない)

以上のログをみると,特に注意点は無さそうだ.
そこで,次に正式な情報を頼りにしよう.

*** 公式 web の情報を頼りに設定 [#f06d83b6]

http://www.openvas.org/compendium/configuring-openvas-server.html
を見ながら,次のように設定しよう.
まず

  openvas-mkcert

として,サーバの証明書を作ることになる.
すると,SSL 関係で以前にもやった次のようなやり取りをすることになる.
青字が対応/入力である.

> -------------------------------------------------------------------------------
>                         Creation of the OpenVAS SSL Certificate
> -------------------------------------------------------------------------------
> &br;
> This script will now ask you the relevant information to create the SSL certificate of OpenVAS.
> Note that this information will *NOT* be sent to anybody (everything stays local), but anyone with the ability to connect to your OpenVAS daemon will be able to retrieve this information.
> &br;
> &br;
> CA certificate life time in days [1460]: &color(blue){そのまま enter を押してよいだろう};
> Server certificate life time in days [365]: &color(blue){そのまま enter を押してよいだろう};
> Your country (two letter code) [FR]: &color(blue){JP};
> Your state or province name [none]: &color(blue){Osaka};
> Your location (e.g. town) [Paris]: &color(blue){Toyonaka};
> Your organization [OpenVAS Users United]: &color(blue){Osaka Univ.};
> &br;
> &br;
> -------------------------------------------------------------------------------
>                         Creation of the OpenVAS SSL Certificate
> -------------------------------------------------------------------------------
> &br;
> Congratulations. Your server certificate was properly created.
> &br;
> /usr/local/etc/openvas/openvasd.conf updated
> The following files were created:
> &br;
> . Certification authority:
>    Certificate = /usr/local/openvas/lib/openvas/CA/cacert.pem
>    Private key = /usr/local/openvas/lib/openvas/private/CA/cakey.pem
> &br;
> . OpenVAS Server :
>     Certificate = /usr/local/openvas/lib/openvas/CA/servercert.pem
>     Private key = /usr/local/openvas/lib/openvas/private/CA/serverkey.pem
> &br;
> Press [ENTER] to exit &color(blue){← enter を押す};

次に,openvas サーバに接続できるユーザの設定を行えということなので,

  openvas-adduser

とする. すると,以下のようなやり取りをすることになる.
前半はユーザ名とパスワードの設定で,後半はそのユーザが調べることができるターゲットのサーバを制限する設定である.

> 0: not found
> Using /var/tmp as a temporary file holder.
> &br;
> Add a new openvasd user
> ---------------------------------
> &br;
> &br;
> Login : &color(blue){ユーザ名を入れる. FreeBSD のユーザ名などと関係なくてよい};
> Authentication (pass/cert) [pass] : &color(blue){今回のような使い方では pass のままでよい};
> Login password : &color(blue){パスワードを入れる. 画面には出ない};
> Login password (again) : &color(blue){パスワードを再度入れる. これも画面には出ない};
> &br;
> User rules
> ---------------
> openvasd has a rules system which allows you to restrict the hosts that paoon has the right to test.
> For instance, you may want him to be able to scan his own host only.
> &br;
> Please see the openvas-adduser(8) man page for the rules syntax.
> &br;
> Enter the rules for this user, and hit ctrl-D once you are done:
> (the user can have an empty rules set) &color(blue){ここから,このユーザのターゲット制限を設定する};
> &color(blue){accept 192.168.125.0/24};  &color(red){← 今回はこうしておく};
> &color(blue){accept 127.0.0.0/24}; &color(red){← 今回はこうしておく};
> &color(blue){default deny}; &color(red){← 今回はこうしておく};
> &color(blue){^D}; &color(red){← ctrl キーを押しながら d キーを押す};
> &br;  &color(blue){以下,確認のために入力情報が出力される};
> Login             : &color(blue){ユーザ名};
> Password          : ***********
> &br;
> Rules             :
> &color(blue){accept 192.168.125.0/24};
> &color(blue){accept 127.0.0.0/24};
> &color(blue){default deny};
> &br;
> &br;
> Is that ok? (y/n) [y] &color(blue){問題がなければ y と答えよう};
> user added.

これで openvas サーバを使うユーザ設定が済んだ.

ちなみに,このユーザ設定は
/usr/local/openvas/lib/openvas/users/
の下にファイルが置かれる.
設定を変更したいときは,このファイルを書き換えれば良い.

次に,スキャナプラグイン(様々な機能がプラグインになっていて,日々更新されている)を更新しておこう.

  openvas-nvt-sync

とすればよい. 少し時間はかかるが.

** OpenVAS サーバの起動 [#b03aec92]

ここまで問題がなければ,

  openvasd -D

としてサーバをデーモンとして起動しよう. スキャナプラグインを読み込むのに初回だけ結構時間がかかるのでしばらく待とう.
確かに起動したかどうかを,

  lsof -i4

として確かめよう. port 9390 で openvasd が待ち構えているならば OK だ.

** OpenVAS クライアントの起動 [#ycd8b5c3]

さて,OpenVAS クライアントを起動しよう.
これは X window をつかうので X を立ち上げてからだ. 
ちなみに gnome ライブラリがあれば, gnome そのものを動かさなくてもよい.

以下のコマンドを打ち込もう(大文字小文字は区別する).

  OpenVAS-Client &

すると,
&ref(./OpenVAS-Client.png,50%);
のような画面でクライアントが起動するはずだ.

** 脆弱性検査の準備 [#yec3d059]

どのマシンにたいして,どのような検査を行うのかという内容の設定が準備として必要である.
そのあと,サーバに接続して,サーバに検査を行わせることになる.

具体的には,設定はクライアントで以下のようにする.

*** task, scope を設定する [#r0941108]

task, scope とは検査内容の設定単位と思えばよい.
まずはこれを作る.

具体的には,以下のようにすればよい.
まず,メニューの Task -> New を選んで,新しいタスクを作る.
&ref(./task-new.png);
このとき,新しく作ったタスクに名前がついていないので,適当に名前をつけておこう.
&ref(./task-name.png);

次に,メニューの Scope -> New を選んで,今作ったタスクの中に新しいスコープを作る.
&ref(./scope-new.png);
このとき,新しく作ったスコープにも名前がついていないので,適当に名前をつけておこう.
&ref(./scope-name.png);

*** 最小限の設定 [#qb02f70a]

あとはこのスコープに対して設定を行う.
といってもまずはほぼ標準でよいので,以下のようにすればよい.

まず,非破壊検査(ターゲットサーバへの影響無し)を行うのか,破壊検査(ターゲットサーバのサービスが落ちる可能性あり.再起動すれば影響は消える)を行うのかを決める.
非破壊検査は副作用がないが,厳しい検査はできない.
破壊検査は,サーバのデーモンが落ちる可能性があるが(落ちるかどうかを検査する),厳しく検査できる.

今回はまあ非破壊にしておこう.
具体的には,右側の Options タブ中の General を選択すると,やや下側に "Safe checks" という項目があり,これがチェックされていれば非破壊,チェックされていなければ破壊ということになる.
&ref(./safe-check.png);

次に,ターゲットを決める.
最初は自分自身がよいだろう.
そこで,右側の Options タブ中の Target selection を選択すると,"Target(s):" という項目があるので,ここで設定すればよい.
おそらくデフォルトで "localhost" (自分自身のこと)と書かれているだろうから,その場合はそのままでよい.
&ref(./target-localhost.png);

これで最小限の設定が完了だ.

** クライアントをサーバに接続する [#hcd79ecb]

次に,クライアントをサーバに接続する. そうしないとクライアントからサーバに指令が出せないし,結果も受け取れない.
具体的には,(設定したスコープが選択されていることを確認した上で), メニューの File -> Connect を選択する.
&ref(./file-connect.png);

すると,接続先と認証方法の設定画面が出る. 接続先はデフォルトの localhost, port 9390 で問題ない. 認証は,先ほどパスワード方式を選択したので,先ほど設定したユーザ名とパスワードを入力して,右下の OK を押そう.
&ref(./connect-server.png);

初めて接続するときは SSL 証明書の扱いについて尋ねられるが,一番上を選んで,あとは OK で良い.
&ref(./ssl-one.png);

これで接続されることになる. ただし,初回のみプラグインのダウンロードで少し待たされるのでゆっくり待とう.
しばらくすると
&ref(./openvas-connect-and-downloaded-plugin.png);
となり,ダウンロード終了の通知が出るはずなので,ここで OK を押せばよい.

** 脆弱性検査を行う [#r12bbef1]

これであとは検査を実施するだけである.
これはもう簡単で,メニューの Scope -> Execute を選択すればよい.
&ref(./scope-execute.png);

すると,しばらくして検査がはじまり進捗度が表示されるので,あとはじっと待てばよい.
&ref(./openvas-scanning.png);

** 検査結果をチェック [#ue6a7148]

検査結果はクライアントで "report" 項目をダブルクリックするなどすればそのまま見られるようになっている.
危険度が高いと思われる報告ほど警告色が使われたアイコンがついていたりするので,状況は一目瞭然だろう.
&ref(./report.png);

&ref(./notes.png); 自分のマシンの検査結果を見て,危険と思われる報告に目を通そう(特に Apache の mod_proxy_ftp に関しての部分).
&ref(./notes.png); その上で,どうすべきか判断せよ.
&ref(./notes.png); 対策が必要と判断した場合は,対策を施そう.

なお,検査結果はメニューで Report -> Export を選択することでファイルに出力することもでき,形式はいろいろ選べる.
&ref(./report-export.png);
&ref(./report-export-form.png);

** 他のサーバをターゲットとして検査をしてみる [#w1e72014]

&ref(./notes.png); 一通り対策などができた,と感じたら,同じ部屋の人に協力して貰って,御互いに相手の人のサーバをターゲットとして検査を再び行ってみよう.
&ref(./notes.png); 破壊検査も試してみよう("safe check" の項目のチェックを外す).
&ref(./warning.png); 脆弱性検査は「アタックの一部」と見なされるので,相手の許可無しには絶対に行わないこと!!

* 模擬アタック [#xdb2f537]

さて,セキュリティについての総合的な感覚を養うために,これまでの知識などを利用して,サーバへのアタックを模擬的に行ってみよう.
これにより逆に「防御するにはどうしたらよいか」がよりよく理解できるはずである.

なお「模擬的に」というのは,PC を破壊してハードディスクを抜き出す,内部のファイルを壊すなどしてアタックを成功させる,などの「後に支障が残りそうな」方法は避けておく,というていどの意味である.
具体的には,以下のように行おう.

** パスワードを失念したと想定して自分のマシンにログイン [#m440b5f1]

&ref(./notes.png); 自分のパスワードを全て失念したが,どうしても読みたいファイルが存在するのでなんとかしたいという想定のもとで,自分のマシンにログインないしはファイルアクセスが可能な状態にまでもっていってみよう.
ここにはあえて方法は書かないので,よく考えて行おう.
手間をかけても良ければ,(原理的には)何通りか思いつくだろう.

** パスワードを失念したと想定して他人のマシンにログイン [#fcff93b3]

&ref(./notes.png); 上と同様の試みを,他人のマシンに対して行ってみよう. もちろん,事前にそのマシンの管理者に許可を得手から行うこと.

&ref(./warning.png); 管理者の許可ナシにこうした行為を行うことは絶対にしないように.

* レポート [#c5e236b4]

脆弱性検査の結果およびその対策等と,模擬アタックの結果について報告せよ.
また,実際に行わなかったものも含め,アタックの方法について思いつくものを解説せよ.
そして,アタックの方法に対し,各々防御方法を考察せよ.

もちろん各自の

+ 所属(学部,学科)
+ 学籍番号
+ 学年
+ 氏名
+ 日時
+ 肝心のレポート内容(得た知見,作業について気づいたこと等)

を書くのを忘れないように. 

* about Icons [#r5fcaef7]
Some icons in this page are downloadable at [[ICONFINDER:http://www.iconfinder.net/]].
The "note" icon &ref(./notes.png); designed by [[Marco Martin:http://www.notmart.org/]] is distributed with the LGPL licence
and the "warning" icon &ref(./warning.png); designed by [[Alexandre Moore:http://nuovext.pwsp.net/]] with the GPL licence.
Thank you Marco and Alexandre!

// 入力はブランクで始める行として入力.
// 出力は > で始める行として入力.

// 実習アイコン
// &ref(./notes.png); 

// 注意アイコン
// &ref(./warning.png);