世間で配布されている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の方がフォントが見やすい.
ひとまずパッケージを最新版に更新する.
yum update
なお,プライベートな話だが私が住む大学の寮の回線では,RTX1210で”ppstream”というキーワードを含むリクエストをブロックするという設定がなされている.そのため,Windows側で一時的にopenvpnとVPN Gate(公開VPNサーバ)に接続して制限を回避する必要がある.うちの寮は基本的に大学1,2年が入居するので,こういった意味のわからん制限はやめてほしいものだ.
2.Apache,CGIの準備
Apacheが入っているのか以下のコマンドで確認したが,入っていなかった.
yum list installed|grep httpd
そのため,ApacheとPerlのインストールを行う.
yum -y install httpd perl perl-CGI
systemctlで様子を見てみるとinactiveだったので,起動.
systemctl status httpd systemctl start httpd
その後firewall-cmdで80番に穴を空ける.
firewall-cmd --add-service=http --permanent firewall-cmd --reload
その後,Windows側からデフォルトページにアクセスし,正しくアクセスできることを確認する.
次に,/var/www/cgi-bin/index.cgiを作成して以下の内容を記述して,権限を705に設定する.
#!/usr/bin/perl print "Content-type: text/html\n\n" print "Hello World\n"
chmod 705 index.cgi
ブラウザから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は使いやすいので,正直ここに書くことは特にない.