SAKURUG TECHBLOG

WEB開発で注意すべきサイバー攻撃(クロスサイトスクリプティング編)

timestampauthor-name
Takumi

はじめに

こんにちは、SAKURUGのTakumiです。

今回は、Web系の開発で注意すべきサイバー攻撃の一つである「クロスサイトスクリプティング」について、初めて聞いた方も理解できるよう、なるべく分かりやすい説明ができたらなと思っております。

少しでもお役に立てたらと思います。

クロスサイトスクリプティングの概要

クロスサイトスクリプティングとは?

クロスサイトスクリプティング(XSS)

WEBサイトやアプリケーションの脆弱性を利用し、サイト利用者の個人情報盗難などの被害を及ぼすサイバー攻撃のことです。

もう少し分かりやすく...

攻撃者が罠を準備したWebサイトをユーザーが閲覧し、設置した罠に触れるようなことをしてしまうと、自動的に悪意のあるスクリプトが実行され、罠にはまったユーザーの個人情報を盗んだり、マルウェアに感染させたり、悪意のあるサイトにリダイレクトさせたりします。

 

こうしたサイバー攻撃は、Webサイトの信頼性を低下させるため、もしくはユーザーの個人情報を盗むために行われます。

どのような被害にあうのか

1.偽のWebページ表示による、情報漏洩や金銭被害のリスク

 偽のWebページに個人情報を入力することにより、情報漏洩や金銭的な被害にあってしまう

 

 <被害事例>

 ・通販やSNS等のアカウントへ不正ログイン・乗っ取られる

 ・住所やカード情報などが流出・ばらまかれる

 ・ネットバンキングを装った悪質なWebページより、不正送金を行う

2.Cookie情報の窃盗によるセッションハイジャック

 Cookieに含まれるセッションIDが、悪意のある第三者に取得されてしまう危険性がある。

 セッションハイジャックが行われた場合、アカウントに登録していた情報の漏洩やクレジットカードの不正利用などが起きる可能性がある。

クロスサイトスクリプティングの攻撃の流れ(一例)

今から説明する流れは、「掲示板サイト」での攻撃の流れです。

  1. 攻撃者は入力フォームにスクリプト付のリンクを含む内容を入力してWebアプリケーションに罠を仕掛ける
  2. 罠の仕掛けられたWebアプリケーションをユーザが利用
  3. リンクをクリックしてスクリプトが実行されると、別のWebに繊維(クロスする)して悪意のある内容(スクリプト)が実行される
  4. 「3」でスクリプトを実行したことにより、情報漏洩やマルウェア感染してしまう。

クロスサイトスクリプティング(XSS)の攻撃手法

反射型(Reflected-XSS)

攻撃者は偽造したWebサイトやメールに攻撃用のスクリプトがあり、ユーザーが罠を踏んでしまうことで標的サイトを介してスクリプトが実行されてしまう手法

 

以下のように、URLのパラメータに悪意のあるプログラムを仕込むことができる

https://test.com?name=<script>悪意のあるプログラム</script>

※攻撃者の仕掛けた罠に引っかからなければ被害を受けることはないため、攻撃者にとってはユーザーを罠サイトへ誘導するというステップが必要になる。

蓄積型(Stored XSS)

標的のWebサーバに対して悪意のあるスクリプトを保存しておき、その攻撃内容が保存されているところにアクセスしてしまうとスクリプトが実行されてしまう手法。

イメージとしては掲示板サイトで、他の人が投稿した内容を開いただけで悪意のあるスクリプトが実行されてしまうといったイメージです。

 

もう少し具体的に言うと...

 

普通の投稿内容の中に悪意のあるスクリプトを記載した場合に、投稿内容と悪意のあるスクリプトがDB内に保存されていて、サイトを見に来たユーザーが被害にあうといったものになります。

DOMベースXSS

JavaScriptがDOMを操作する時に発生する攻撃手法。

そもそもDOMとは?

Document Object Modelの略。

Webページ(各種タグ)を木構造で表現したもの。

 

先ほど説明した「反射型XSS」はWebサーバにアクセスし、Webサーバからのレスポンス内に悪意のあるスクリプトが含まれるものが実行される。

それに対して「DOMベースXSS」は、Webサーバにアクセスせずにクライアントのブラウザ上でスクリプトが動作する手法。

クロスサイトスクリプティングの対策

サニタイジング

Webアプリケーションやシステムに入力されたデータ内の文字列を、スクリプトコードとして意味を持たない無害な状態にするために、他の文字列に置き換える・特定の文字を削除する処理。

<script type="test/javascript">●●●</script>

 ↓サニタイジング処理

&lt;script type="test/javascript"&gt;●●●&lt;/script&gt;

主要なサニタイジングの種類

エスケープ文字

置き換え後の文字

名称

<

&lt;

小なり

>

&gt;

大なり

&

&amp;

アンパサンド

¥

&yen;

円マーク

(半角スペース)

&nbsp;

半角スペース

入力値の制限

ユーザーの入力できる値を制限するのも対策の一つです。

  • 郵便番号を入力するフォームでは、数字以外の入力を許可しないことで、スクリプトの挿入が出来なくなる。
  • 入力値の長さに制限を設けることで、攻撃が可能となるスクリプトの挿入をある程度抑止できる可能性がある。
  • 文字コードの指定(文字コードによってはサニタイジングの効果がなくなるため)

<script>alert("xss")</script>

  ↓上記のスクリプトをUTF-7で記載

+Adw-script+AD4-alert(+ACL-xss+ACL-)+Adw-/script+AD4-

WAF(Web Application Firewall)で防御する

Webアプリケーションの脆弱性を狙った攻撃からWebサイトを守るファイアウォール。

WAFでネットワーク通信を監視して、攻撃と判断した通信を遮断することで、XSS攻撃から自社・自組織のWebサイトを守ることができる。

ECサイトのように、ユーザーの入力を受けたり、クレジットカード情報をはじめとする個人情報を取り扱ったりする動的サイトの保護に適したセキュリティ対策。

※Webサイトの脆弱性自体を修正できるわけではないので、根本的な解決方法にはならない。

記事をシェアする

ABOUT ME

author-image
Takumi
2024年入社。Javaを主としたweb系システムの開発を行っています。