脆弱性について
主にウェブアプリケーション、サイトについての脆弱性について記載しています。
A 概要
各 内容の説明に関しては 弱性対策情報のデータベー を参照
対策に関しては 安全なウェブサイトの作り方 を参照
- 対策に関しては、「 脆弱性対策 」と 「 保険的な対策 」がある。
B 脆弱性を自分で体験する診断ツール
脆弱性診断ツール OWASP ZAP vs 脆弱性だらけのWebアプリケーションEasyBuggy
Owasp Top 10なども参考に
セキュリティ・脆弱性診断無料ツール・有料サービスの比較と選び方
C 区分
1 認証
- [ ] 1-1 パスワードポリシー
- [ ] 1-2 不適切な認証
- [ ] 1-3 脆弱なパスワードリマインダ
2 承認
- [ ] 2-1 セッションの推測
- [ ] 2-2 不適切な承認
- [ ] 2-3 セッションの固定
[ ] 2-4 クロスサイトリクエストフォージェリ
[ ] 2-5 補足:Cookieで「secure 属性」を指定 保険的な対策
- [ ] 2-6 セッションハイジャック
3 クライアントがわでの攻撃
- [ ] 3-1 クロスサイトスクリプティング
- [ ] 3-2 コンテンツの詐称
4 コマンドの実行
- [ ] 4-1 バッファオーバーフロー
- [ ] 4-2 書式文字列攻撃
- [ ] 4-3 LDAP インジェクション
- [ ] 4-4 OS コマンドインジェクション
- [ ] 4-5 SQL インジェクション
- [ ] 4-6 SSI インジェクション
- [ ] 4-7 XPath インジェクション
5 情報公開
- [ ] 5-1 ディレクトリインデクシング
- [ ] 5-2 ソース記載による情報漏えい
[ ] 5-3 推測可能なリソース位置
[ ] 5-4 ディレクトリトラバーサル
6 ロジックを狙った攻撃
- [ ] 6-1 機能の悪用
- [ ] 6-2 パス・トラバーサル
- [ ] 6-3 リダイレクタ
- [ ] 6-4 不適切なプロセスの検証
7 その他、概念的にまとめた物
- [ ] 7-1 ヌルバイト攻撃
- [ ] 7-2 メールヘッダ・インジェクション、メール第三者中継
- [ ] 7-3 HTTPヘッダインジェクション、HTTPレスポンス分割攻撃
- [ ] 7-4 スクリプトインサーション
D それぞれの詳細、対策
1 認証
1-1 パスワードポリシー
簡易なパスワードにしないなどのポリシー
1-2 不適切な認証
1-3 脆弱なパスワードリマインダ
パスワードを忘れた場合に、QAなどでログインできてしまうやつ
2 承認
- 対策コード
// HTTPS限定の物を含む設定
session_name("randamunasuujinadonado"); // A) sessionidを任意の物に変更
ini_set('session.cookie_secure', 1); // B) secureな状態でのみcookieの通信を行う。
//有効期限を設定、例えば1日
$exipires__dd = 60*60*24 ;
ini_set('session.gc_maxlifetime', $exipires__dd);
ini_set('session.cookie_lifetime', $exipires__dd);
session_start();
補足: session.cookie_secureを設定するとhttp環境ではアクセス毎にクッキーが更新されてしまう。 https下で使うのが望ましい。
補足: session,cookie それぞれの有効期限の話 https://teratail.com/questions/33522
2-1 セッションの推測
- PHPSSEIDのように推測しやすいやつ
- 連番によるセッションID
- 桁数の少ないセッションID
- ユーザ情報を単純にハッシュしたセッションID
2-2 不適切な承認
cookieの書き換えでログイン状態になるとか・・・
2-3 セッションの固定
セッションの中身までが固定で決まってる・・・・
2-4 クロスサイトリクエストフォージェリ
csrf対策用のhiddenキーを仕込むのも一般的
2-5 補足:Cookieで「secure 属性」を指定 保険的な対策
2-6 セッションハイジャック
3-1 対応
# 対策系
# 全てsページの場合での注意は必要
Header always append X-Frame-Options SAMEORIGIN
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header set Strict-Transport-Security "max-age=315360000; includeSubDomains; preload"
3 クライアントがわでの攻撃
- HTTP リクエストの作成などに / chrom extension REST Client https://qiita.com/KAZ0225/items/354b7726e650e9bda45d
上記でTRACEを送る方法で405で返ってくれば対策はされてると考えて良い。
3-1 クロスサイトスクリプティング
テンプレートエンジンを使う事により、対策となる物も
3-2 コンテンツの詐称
4 コマンドの実行
4-1 バッファオーバーフロー
4-2 書式文字列攻撃
4-3 LDAP インジェクション
4-4 OS コマンドインジェクション
http://senmon.cfc.ac.jp/studentreport/report2/OS.html
4-6 SSI インジェクション
http://securitychecklist.net/security/cyber-attack/SSL-injection.html
4-7 XPath インジェクション
ユーザの入力に基づき、XMLドキュメントに対してクエリーを発行するようなWebシステムで発生 http://www.soi.wide.ad.jp/class/20040011/slides/18/33.html
5 情報公開
5-1 ディレクトリインデクシング
ディレクトリリスティングの危険性と対策方法 https://securitynavi.jp/1501
5-2 ソース記載による情報漏えい
5-3 推測可能なリソース位置
http://www.soi.wide.ad.jp/class/20040011/slides/18/38.html
6-1 機能の悪用
6-2 パストラバーサルについて
https://www.websec-room.com/2013/03/20/675
6-3 リダイレクタ
6-4 不適切なプロセスの検証
7 その他、概念的にまとめた物
7-1 ヌルバイト攻撃
7-2 メールヘッダ・インジェクション、メール第三者中継
7-3 HTTPヘッダインジェクション、HTTPレスポンス分割攻撃
7-4 スクリプトインサーション
E 補足,未整理
- telnet
Windows telnet コマンドで入力文字を表示する方法
HTTP/TELNETを利用してHTTPレスポンスヘッダを確認する
※ ただしtelnetはhttpsなどに非対応