CGI検証用Linux環境構築メモ

世間で配布されているCGIには脆弱性がないのか.

もし配布されているCGIに脆弱性があった場合,多くのサイトで影響が出る可能性がある.そのため,Windows10 Pro上にHyper-VでCentOS8を立て,その上にCGIを載せる.そして,Windows側からOWASP ZAPによる脆弱性検査を行う.

 

1.CentOS8の準備

公式サイトのダウンロードページからISOをダウンロードする.今回は普通にダウンロードしようとしたら1日かかると見積もりが出たため,一瞬torrentのクライアントを入れ,torrentによりダウンロードを行った(40分ほど).

 

Hyper-V クイック作成を起動し,[ローカル インストール元]から[インストール元の変更]で,ダウンロードしたISOを選択する.

 

また,[この仮想マシンではWindowsを実行します]のチェックを外す.その後,[仮想マシンの作成]を押下する.

 

一瞬で「仮想マシンが正常に作成されました」と表示される.[接続]をする.

 

[起動]する.

 

[Test this media 8 install CentOS Linux 8]で進める.

 

言語はCGIのソースコードに日本語が含まれること,キーボードレイアウトを考慮し,日本語とする.

 

タイムゾーンも東京に変更しておく.

 

ソフトウェアは「サーバー」とした.別に「最小限のインストール」でも構わない気がする.

 

インストール先は127GiBのディスクが1つしかないので,それを選択.

 

ネットワークはデフォルトで[オフ]なので,これを[オン]とする.

 

ひとまずこれで[インストールの開始]を行ってみる.SMTの警告は一旦無視.

 

インストールが進むので,rootのパスワードや,新規ユーザーの作成を行う.

 

数分待って完了.

 

ひとまずログインし,IPアドレスを調べ,Windows側からTere Termで接続し,Hyper-Vのウィンドウは閉じる.Tera Termの方がフォントが見やすい.

 

ひとまずパッケージを最新版に更新する.

なお,プライベートな話だが私が住む大学の寮の回線では,RTX1210で”ppstream”というキーワードを含むリクエストをブロックするという設定がなされている.そのため,Windows側で一時的にopenvpnとVPN Gate(公開VPNサーバ)に接続して制限を回避する必要がある.うちの寮は基本的に大学1,2年が入居するので,こういった意味のわからん制限はやめてほしいものだ.

 

2.Apache,CGIの準備

Apacheが入っているのか以下のコマンドで確認したが,入っていなかった.

 

そのため,ApacheとPerlのインストールを行う.

 

systemctlで様子を見てみるとinactiveだったので,起動.

 

その後firewall-cmdで80番に穴を空ける.

 

その後,Windows側からデフォルトページにアクセスし,正しくアクセスできることを確認する.

 

次に,/var/www/cgi-bin/index.cgiを作成して以下の内容を記述して,権限を705に設定する.

 

ブラウザからhttp://[VMのIP]/cgi-bin/index.cgiにアクセスし,”Hello World”と表示されることを確認する.

 

3.配布CGIの導入

具体名出して書くと各所に迷惑がかかりそうなので,ハマるようなポイント.

3.1.文字コード

文字コードをCR+LFからLFにすること.#!/usr/bin/perlにCRがつくため,No such file or directoryのエラーが/var/log/messagesや/var/log/httpd/error_logに出力される.

 

3.2.パーミッション

これは基本的に配布元の支持に従い設定を行う.

 

3.3.AddHandler

.txtや.jpg,.png,.gifを使用する際,/etc/httpd/conf/httpd.confにAddHandlerを追加しないとCGIとして解釈された.

 

3.4.SELinux

変な挙動が現れたら一時的にsetenforce 0で様子を見てみる.あとはエラーメッセージを読むと,指示が出ていたりする.

 

4.OWASP ZAPの導入

公式サイトからダウンロード,インストールする.その後,対象とするURLを入力し,コンテキストに含め,動的スキャンまでを行う.その後アラートのタブを見て,なにか出てないか見てみる.

OWASP ZAPは使いやすいので,正直ここに書くことは特にない.