Webアプリケーションの脆弱性診断検査の一例
制作する上では必須かなと思われたので、抜粋掲載させていただきました。
下記サイト様より一部抜粋させていただきました。
@IT「星野君のWebアプリほのぼの改造計画」
Webアプリケーションの安全性を高めるためには、実際に攻撃パターン(脆弱性の可能性を示唆できるパターン)を試すことが必要となってくる。すべての攻撃パターンを網羅することは難しいが、各攻撃パターンで共通している部分を取り出して検査することで、ほとんどの攻撃を防ぐことが可能となる。
以下に、代表的な脆弱性4つに対する検査パターンおよび確認事項について示す。これらの項目を実施するだけで格段にセキュリティが向上する。
本番環境に近い環境で行うことが望ましいが、Webアプリケーションの作りによってはサーバの障害につながる恐れがあるのでテスト環境で実施することをお勧めする ●Cross-Site Scripting
[検査パターン例] 「’>”><s>test</s>」 [確認事項] 入力した文字がそのままレスポンスの中に含まれていないか(含まれていたら脆弱) ※ただし、マルチバイト文字を利用したパターンのような特殊な例は対象外(参考:第10回)
[検査パターン例] 「’」(シングルクオーテーション) [確認事項] SQLエラーが出力されないか [検査パターン例] 「’||’」または「’%2b’」(連結を意味するSQL文) [確認事項] シングルクオーテーションのみの場合と同じ挙動になるか(異なる場合は脆弱) ●OS Command Injection(参考:第7回)
[検査パターン例] 「||/bin/date|」(Linux系の場合) [確認事項] 時刻が表示されないか ●Directory Traversal(参考:第5回)
[検査パターン例] 「../../../../../../../etc/passwd」(Linux系の場合) [確認事項] 「/etc/passwd」の中身が表示されないか
【参考リンク】 ITmedia エンタープライズ:
脆弱なWebアプリケーションから脱却する5つのコツ
https://www.itmedia.co.jp/enterprise/articles/0602/02/news001.html
一部上記と内容がかぶりますが、
下記サイト様より抜粋、掲載させていただきました。
ITmedia:脆弱なWebアプリケーションから脱却する5つのコツ
Buffer Overflow
操作:5000バイトの長さの文字列を入力
確認:言語処理系やDBドライバなどが直接エラーを出力したりしないか? 誤動作しないか?Cross Site Scripting
操作:「’>”><script>alert()</script>」を入力
確認:アラートボックスが表示されるか?
操作:任意の文字列(例:abc)を入力
確認:次に表示される画面内のフォームに含まれるか? 含まれるなら、value属性がしっかりとクォートされているか?Parameter Manipulation
操作:数値パラメータの場合、(元の値-1)、(元の値+1)としてみる
確認:異なる機能が実行されたり、本来アクセスできるべきでない情報が表示されたりするか?Session Exploitation
操作:連続してセッションIDを発行させてみる
確認:それらのセッションIDに規則性はあるか? 発行されるセッションIDが推測できる場合、推測したセッションIDを使ってアクセスし、他人になりすますことができるか?SQL Injection
操作:シングルクォート「’」を入力
確認:DBドライバのエラーメッセージが表示されるか?
操作:「’ or 1=1–」を入力
確認:認証バイパスや、テーブル内の全レコードへアクセスできたりするか?OS Command Injection
操作:「||/bin/date|」(Unix系のサーバを想定)
確認:時刻が出力されるか?Cross Site Request Forgeries
操作:処理をコミットするリクエストで送信されるパラメーターの一覧を見る
確認:Cookie以外のパラメータに、他人が推測できないパラメーターを含んでいるか? Cookie以外のパラメータがすべて推測可能であれば脆弱だ。