Webに対しての攻撃手法とその対策について
どうもおはようございます
サイバー大学生のhumuです
今日は真面目にwebサイト上でよくある
サイバー攻撃について書いていこうと思います。
ありきたりですけど、よかったら見て見てくださいね!
攻撃手法の種類について
webアプリの入力データチェックの不備をついた攻撃として以下がある。
- XSS(クロスサイトスクリプティング)
- OSコマンドインジェクション
- SQLインジェクション
XSSとその対策
webアプリケーションの入力データを悪用したデータ攻撃の一つ
webサイトのプログラムの脆弱性を利用した攻撃である
特に、掲示板や情報検索サイト、登録情報確認画面などに対する攻撃手法
ユーザが入力したデータを元に、webアプリケーションが動的にHTMLを作成する仕組みになっているページにおいて、入力データのチェックに不備のある場合成立する。
つまり、悪意あるサイトを仲介させて、二つのサイトに跨って最終的にクライアント環境に不正なスクリプトを実行させることから名ずけられた
XSSの実行手順
1.悪意あるサイトにクッキー情報を盗まれる場合
例:
1.ユーザが悪意のあるwebサイトを閲覧
2.悪意のあるリンクをクリック
3.ウェブページを出力
4.そのサイトが自動的に悪意あるスクリプトをユーザに転送
5.ユーザのブラウザが悪意あるスクリプトを(クッキーを転送する)を実行
6.悪意のない(しかし、XSSの脆弱性のある)サイトにスクリプトを転送
6.そのターゲットサイトがwebページを出力し、クッキーを発行
7.それをクライアントに送信
8.クライアントがスクリプトを実行して、クッキーを悪意のあるサイトに転送
それにより、クッキーが漏洩する
クッキー漏洩により想定される被害
1,Cookiesに個人情報が入っている場合:IDやパスワードが流出
サイトへの勝手な登録。スパムメールの送信。
2,CookiesにセッションIDが入っている時
セッションハイジャック→ショッピングサイトで勝手に買い物されてしまう。
悪意あるスクリプトとは
- クッキーを盗む
- データ改ざん
- クライアントのディスクをフォーマット
- バックドア作成
- フィッシング。ユーザのID・パスワードを盗む
- 悪意あるサイトへの誘導
- ワンクリックサイトへの誘導
- etc
サイトの入力画面で実行可能なコードを入力する。
プログラムに入力データチェックの不備があるとそのコードが実行されてしまう。
例:住所入力欄に以下のコードを入力:
<script>alert('hello')</script>
もし、プログラムに不備があると上記のコードが解釈・実行され、アラートがポップアップする。
XSS対策
サニタイジング(無害化,sanitizing)
入力データを無害化する。
その手法の一つにエスケープ処理がある
エスケープ処理とは、入力データに含まれる、不正の原因となるような記号を特殊文字を適切な文字列に変換すること
OSコマンドインジェクション
OSコマンドインジェクションとその対策
OSコマンドインジェクションとは
ユーザの入力データを元に、OSコマンドを呼び出して処理するwebページにおいて成立する
不正なコマンドで以下のようなことを実行する攻撃手法
- 任意ファイルの読み出し、変更・削除
- パスワードの不正取得
OSコマンドの読み出しは、言語によって用意されている関数を用意て実行される。
これを実行されると任意のコマンドが実行可能になってしまう可能性がある。
OSコマンドインジェクション対策
- OSコマンドの呼び出し可能な関数を極力避ける
- 入力データに使用可能な文字種類や書式等のルールを明確にする。文字種を極力制限する
- 上記のルールにしたがって入力データをチェックする
- ルールに使わないデータをエラーとして扱う。 エスケープ処理は行わない。
SQLインジェクションとその対策
不正にSQL文を注入する攻撃手法
ウェブアプリの開発者が想定していないSQL文を実行することで、データベースシステムを不正に操作する攻撃手法である。
アプリケーションが入力値を適切にエスケープしないままSQLを展開することで発生する
例1
複数のSQL文を入力することによるデータの破壊や改ざん
例2
ストアドプロシージャを実行することによる情報の漏洩や改ざん
例3(ブラインドSQLインジェクション)
SELECTの条件式にデータベース内の情報を確認するようにサブクエリを含ませ、その抽出の有る無しによってい本来参照することのできないデータベース内の情報(テーブル名など)を知る方法。
SQLインジェクションの対策
・エスケープ処理をする。
・意図したデータ以外(数値など)を入力しないようにする。
正規表現などを使用して、意図したデータ以外のデータが送信されたらDELETEを 実行させないようにする。
・DELETEコマンドを含むクエリを実行できないようにする。
・意図しないタグを実行させないようにする。
SQLインジェクション対策2
・入力されたタグを取り除く仕組みを設定する。
・入力されたタグなどの特殊文字を別の文字列などに変換するPHPの関数「htmlspecialchars(文字列)」などを使用する。
まとめ
OSコマンドインジェクションとその対策:
不正にOSコマンドを呼び出して実行。
対策:OSコマンド呼び出し可能な関数を極力しようしない。
最後まで、読んでくださってありがございます。
みんなwebサイトを使用する際は注意して、
楽しく使って行きましょう!
また明日!