「セキュリティ」タグアーカイブ
Webサイトの脆弱性をチェックする「skipfish」
「Web サイトの脆弱性をチェックして。」と頼まれた。
一般的にはクロスサイトスクリプティングやSQLインジェクションのチェックをすれば良いけれど
面倒だし、人力では抜け漏れが発生するので Google Code で公開されているセキュリティ調査ツール
「skipfish」を試してみた。
検出できる脆弱性については SkipfishDoc を参照。
インストール
1 2 3 4 |
wget https://skipfish.googlecode.com/files/skipfish-2.10b.tgz tar xvzf skipfish-2.10b.tgz cd skipfish-2.10b make |
ディレクトリ内に skipfish が生成される。
使い方
1 |
./skipfish -o [レポートを出力するディレクトリ] [調査するURL] |
で実行。ただし無茶苦茶時間がかかる。祝日を中一日挟んでも終わっていない。
このままだと年越えてしまう。冬休みに入る前に終わってくれないと困るなあ。
オプションで高速化できるらしい
非推奨のオプションとして
- -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 2 |
Oct 27 13:08:31 サーバ名 sshd[3304]: Failed password for root from IPアドレス port 13069 ssh2 secure-20151025:Oct 24 10:03:15 サーバ名 sshd[22948]: Invalid user adolfo from IPアドレス |
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
とりあえずサービス作ってみた。
対策1
/etc/ssh/sshd_conifg
1 2 |
PermitRootLogin no MaxAuthTries 6 |
1行目:リモートからのrootログインを不許可にする。リモートからは別のユーザでログインしてから su コマンドで root になる。
2行目:パスワードの間違えを何回まで許すかの設定。
設定した後は、sshd をリスタートする。
/etc/rc.d/init.d/sshd restart (CentOS6≧)とか
systemctl restart sshd (CentOS7)とか
対策2
特定の IP からの ssh アクセスを拒否る。
/etc/hosts.deny に以下の様に追記する。
1 2 3 |
sshd : 拒否するIPアドレス1 sshd : 拒否するIPアドレス2 : |
でも、はっきりいってキリがない。
対策3
特定の IP からの ssh アクセスのみ許容
/etc/hosts.allow に以下を記述
1 2 3 |
ALL: 192.168 ALL: 127.0.0.1 sshd: 許可するIPアドレス |
1行目:イントラからのアクセスを許可。172.16.x.x 系のネットワークなら 172.16 と記述
2行目:ローカルループバック接続を許可
3行目:外部からアクセスを許可する IP アドレスを記載。職場とか学校とか
/etc/hosts.deny
1 |
ALL: ALL |
全て拒否
その後 sshd をリスタート
※ 設定を失敗するとターミナルからしか接続できなくなる。
また、DHCP とかで振り直されてIPアドレスが変わっても接続できなくなる。(イントラからはOKだけど)
ちなみに、上記の設定で refused connect すると、アタックスクリプトの仕様的に4回であきらめるみたい。