Warning: Declaration of FeedWordPie_Item::get_id($hash = false) should be compatible with SimplePie_Item::get_id($hash = false, $fn = 'md5') in /home/nekyo/nekyo.wp.xdomain.jp/public_html/wp-content/plugins/feedwordpress/feedwordpie_item.class.php on line 0

Warning: Declaration of FeedWordPress_Parser::parse(&$data, $encoding) should be compatible with SimplePie_Parser::parse(&$data, $encoding, $url = '') in /home/nekyo/nekyo.wp.xdomain.jp/public_html/wp-content/plugins/feedwordpress/feedwordpress_parser.class.php on line 0
セキュリティ | 日々のできごと

「セキュリティ」タグアーカイブ

Webサイトの脆弱性をチェックする「skipfish」

「Web サイトの脆弱性をチェックして。」と頼まれた。
一般的にはクロスサイトスクリプティングやSQLインジェクションのチェックをすれば良いけれど
面倒だし、人力では抜け漏れが発生するので Google Code で公開されているセキュリティ調査ツール
skipfish」を試してみた。

検出できる脆弱性については SkipfishDoc を参照。

インストール

ディレクトリ内に skipfish が生成される。

使い方

で実行。ただし無茶苦茶時間がかかる。祝日を中一日挟んでも終わっていない。
このままだと年越えてしまう。冬休みに入る前に終わってくれないと困るなあ。

オプションで高速化できるらしい

非推奨のオプションとして

  • -L:サイトコンテンツからのキーワードの抽出を行わない
  • -W-:抽出したキーワードを辞書へと書き込まない

などを指定すると高速化できるらしいが総当たり攻撃のチェックが不十分になるらしい。

プリセットの辞書を使うことでも高速化できるらしい。以下を引数に追加して実行する。
-S dictionaries/extensions-only.wl -W [作成する辞書ファイル]
-S dictionaries/complete.wl -W [作成する辞書ファイル]
ちなみに dictionaries ディレクトリに用意されている辞書は、

  • 最小限の「minimal.wl」
  • 中程度のキーワードを含む「medium.wl」
  • 多くのキーワードを網羅した「complete.wl」
  • 拡張子に対するチェックのみ行う「extensions-only.wl」

の4つ。
もちろん時間があれば、辞書指定せず全件チェックをお勧め。

終わった

とりあえず年内中には終わった。トータルタイムは 47 hr 5 min 13 sec 245 ms。
これからレポートの見方を調べなきゃ(笑)


ssh のセキュリティ強化

su コマンドで正しく root になった時に、身に覚えのない「最後の正しいログインの後に xxx 回の失敗ログインの試行があります」とメッセージが表示されたらアタックを疑った方が良い。

ログの確認

/var/log/secure ログを確認する。(Raspberry Pi なら /var/log/auth.log)
以下の様なエラーが出ていたら間違いない。

1行目:IPアドレスから sshを使って、rootユーザでログインしようとして失敗した。
2行目:IPアドレスから sshを使って、adolfoユーザでログインしようとした。

どこから来たか確認

「IP 国 確認」 などでググるとIPアドレスから国コードを調べるサービスが出てくる。
IPアドレスの国を調べると、Bahrain、Botswana、Brazil、Bulgaria、Canada、China、Czech Republic、France、Hong Kong、India、Iran, Islamic Republic of、Italy、Japan、Korea, Republic of、Moldova, Republic of、Netherlands、New Zealand、Nigeria、Poland、Romania、Russian Federation、Serbia、Singapore、Somalia、Suriname、Ukraine、United States

とりあえずサービス作ってみた。


国を判別したいIPアドレスまたはホスト名を入力してをクリック

対策1

/etc/ssh/sshd_conifg

1行目:リモートからのrootログインを不許可にする。リモートからは別のユーザでログインしてから su コマンドで root になる。
2行目:パスワードの間違えを何回まで許すかの設定。
設定した後は、sshd をリスタートする。
/etc/rc.d/init.d/sshd restart (CentOS6≧)とか
systemctl restart sshd (CentOS7)とか

対策2

特定の IP からの ssh アクセスを拒否る。
/etc/hosts.deny に以下の様に追記する。

でも、はっきりいってキリがない。

対策3

特定の IP からの ssh アクセスのみ許容
/etc/hosts.allow に以下を記述

1行目:イントラからのアクセスを許可。172.16.x.x 系のネットワークなら 172.16 と記述
2行目:ローカルループバック接続を許可
3行目:外部からアクセスを許可する IP アドレスを記載。職場とか学校とか

/etc/hosts.deny

全て拒否
その後 sshd をリスタート
※ 設定を失敗するとターミナルからしか接続できなくなる。
また、DHCP とかで振り直されてIPアドレスが変わっても接続できなくなる。(イントラからはOKだけど)

ちなみに、上記の設定で refused connect すると、アタックスクリプトの仕様的に4回であきらめるみたい。