システム開発現場でのセキュアプログラミング試験および改修
SQLインジェクション脆弱性
攻撃内容
アプリケーションが想定しないSQL文を実行させることにより、データベースを不正に操作(不正にデータを取得等)する攻撃
脆弱性有無の確認方法
ログインできたユーザであれば、誰でも容易にデータ不正取得が可能なため、想定外の入力をされてもデータの不正取得ができないことを確認する。
OSコマンドイジェクション脆弱性
攻撃内容
例えば、メールアドレス入力項目とメール送信ボタンがある場合、「/usr/lib/sendmail test@mail.com; rm -rf/」と入力して送信ボタンを押下すると、test@test.comにメール送信した後に、”rm -rf /”を実行してしまい、想定していないコマンドが実行されてしまいます。※rmコマンドはファイル/ディレクトリを削除するコマンド
脆弱性有無の確認方法
Runtime.execメソッドを使用していないかを確認する。
確認不要な理由
以下の理由からセキュリティ試験・対策は不要と考えます。
・入力された値をコマンドとして実行する画面はない
ディレクトリトラバーサル脆弱性
攻撃内容
入力項目やアドレスバーURLに「../」を利用してディレクトリを遡り、本来はアクセスが禁止されているディレクトリにアクセスする攻撃
確認不要な理由
以下の理由からセキュリティ試験・対策は不要と考えます。
・ファイル名を入力させる画面はない
・アドレスバーURLにファイル名が表示されることはない
セッション管理の脆弱性
攻撃内容
セッションハイジャックなど
脆弱性有無の確認方法
攻撃される可能性と攻撃された場合の影響度は共に低いと考えられるが、推奨される設定内容になっていることを確認する。また、セッションID固定化等されていないことを、いずれかの画面をピックアップして確認する。
アクセス制御欠如と認可処理欠如の脆弱性
攻撃内容
通常の画面遷移では到達できない画面への、URL直叩きによる不正アクセスを試みるなど
脆弱性有無の確認方法
本来アクセス権限のない画面のURLをブラウザ直接入力した場合、アクセスできないことを確認する。※結合試験でも実施済み
クロスサイトスクリプティング(XSS)脆弱性
※ブラウザ上で動く
攻撃内容
XSSでできる悪いことは、主にJavaScriptでできること(偽のアンケートポップアップ画面を表示するなど)であって、攻撃対象のCookieを盗み出すことや、意図しないURLにアクセスさせることが攻撃の目的である。
脆弱性有無の確認方法
ログインできたユーザであれば、誰でも容易に不正スクリプトの実行を試みることができるため、不正スクリプトが実行できないことを確認する。
クロスサイトリクエストフォージェリ(CSRF)脆弱性
※サーバ上で動く
攻撃内容
リクエスト強要(CSRF:Cross-site Request Forgery)とは、別のサイトに用意したコンテンツ上の罠のリンクを踏ませること等をきっかけとして、インターネットショッピングの最終決済や退会等Webアプリケーションの重要な処理を呼び出すようユーザを誘導する攻撃である。
脆弱性有無の確認方法
springframeworkのtoken発行&チェックの仕組みを使用しているため、tokenが効いていることを確認する。※結合試験でも実施済み
クリックジャッキング脆弱性
攻撃内容
Webブラウザをターゲットとした攻撃手法の中で、クリックジャッキングの特徴はボタンやリンクなどを透明で見えない状態にして、通常のWebページの上にかぶせてしまうというものです。その結果、Webサイトの閲覧者は画面上に見えているボタンやリンクをクリックしたつもりで、意図しないまま見えないボタンやリンクを押すことで不正なプログラムを実行したり、意図しないWebサイトへ飛ばされたりしてしまいます。
インターネット上において「クリック」するという行為は、「同意する」「同意しない」「受け入れる」「拒絶する」といった、ユーザーによる積極的な意志を表す。したがって、その結果は、ユーザーの責任の下に選択されたという前提がある。ところがこの「クリックジャッキング」攻撃は、こうした前提に便乗して、意図しない操作(投稿、つぶやきなど)を実行するものである。
脆弱性有無の確認方法
ライブラリ等が最新にアップデートされていることを確認する。X-Frame-Optionsを使用していることを机上で確認する。
メールヘッダインジェクション脆弱性
攻撃内容
メールヘッダ・インジェクションは宛先(To)や件名(Subject)などのメールヘッダを外部から指定する際に、改行文字を使ってメールヘッダや本文を追加・変更する手法である。
脆弱性有無の確認方法
JavaMailのAPIを使用してコーディングしていることを机上で確認する。
HTTPヘッダインジェクション脆弱性
攻撃内容
HTTPヘッダインジェクションは、HTTPレスポンスヘッダの出力処理に関する攻撃です。この脆弱性が存在する場合、「任意のクッキーがセットされる」「任意のURLへリダイレクトされる」などの問題が発生する可能性があります。
脆弱性有無の確認方法
ヘッダ出力用API を使用していることを机上で確認する。
確認不要な理由
当システムは、ユーザ入力した値をCookieに設定する処理は存在しないため、試験不要と考えます。
evalインジェクション脆弱性
攻撃内容
与えられた文字列をスクリプトのソースとして解釈実行する攻撃
脆弱性有無の確認方法
evalの引数に外部からのパラメータを使っていないことを机上で確認する。
レースコンディション脆弱性
攻撃内容
排他制御が行われていない変数を複数スレッドが共有する場合など、他方のスレッドの実行によって予期せぬ値に変化する現象
確認不要な理由
Java言語を使用しているため、試験不要と考えます。
バッファオーバーフロー及び整数オーバーフロー脆弱性
攻撃内容
バッファを超える大きさのデータを入力し、データをあふれさせてプログラムを停止させることや、任意のプログラムを実行する攻撃
確認不要な理由
Java言語を使用しているため、試験不要と考えます。
以上です。