Webのセキュリティを✅

ブシトラさんの話を生で聞き、さらにエンジニアになりたい欲が増した23期中野昴です。

ZEROKEN(ポートフォリオ)作成中にでたエラーに見慣れない文字がありました。

Image from Gyazo

XSS、、?WEB技術の基本でなんと無く聞いたことあったけど、、

どうやらセキュリティの脆弱性をついた攻撃の一つだそうです。

このままだと面接の時にセキュリティの知識がないという僕の頭の脆弱性を突かれた時に撃沈しそうなので、今回はWebのセキュリティに関して学習していきたいと思います。

 

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

悪意のあるユーザーが脆弱性のあるサイトへ誘導するjavascriptを使ってユーザーの個人情報を盗む目的の攻撃をすること。

ざっくりとクロスサイトスクリプティングの流れを理解する。

  1. 攻撃者が掲示板の入力フォームなどに脆弱性のあるサイトへ誘導するスクリプトを含んだリンクを設置する。
  2. このリンクを踏んだユーザーは不正なサイトへ飛ばされ、マルウェアへの感染やなりすまし被害が発生する。

この攻撃が看過されてしまう原因は以下の通り。

  • 入力値が制限されていない
  • 入力したスクリプトをそのまま実行できる状態にあり、攻撃者が容易に不正なスクリプトを入力できてしまう

どんな種類があるのか

下記3つの種類がある。

  • Reflected XSS(反射型XSS
  • Stored/Persistent XSS(格納型/蓄積型/持続型XSS
  • DOM Based XSS

non-persistent/Reflected XSS(反射型XSS

不正サイトにアクセスさせて個人情報を盗む攻撃。リクエストした者にスクリプトが返ってくることから、「反射型XSS」と呼ばれている。

Stored/Persistent XSS(格納型/蓄積型/持続型XSS

攻撃者があらかじめwebアプリケーションに罠を設置しておくタイプの攻撃。

ユーザーがそのサイトにアクセスするたびに罠が発動し、ユーザーに対して攻撃を行うことができるため、非常に効率的に個人情報を搾取することができる。

DOM Based XSS

Webブラウザで動作するJavaScript上のコードの脆弱性を悪用した攻撃で、サーバ側で攻撃用スクリプトが実行されるのではなく、クライアントのWebブラウザ上で不正なスクリプトが実行されます。また、DOM Based XSSの場合では、静的なHTMLにおいてもJavaScriptが利用されていれば攻撃対象となります。

DOMは、「Document Object Model」の略で、HTMLやXMLを取り扱うためのAPIやデータ構造を定義したもの。

具体的な事例

実際に起きている事例を三つあげてみる。

セッションハイジャック

>Webサイト上のIDやCookieをなんらかの方法で不正に入手し、セッションを乗っ取るサイバー攻撃のこと。

セッションハイジャックをされてしまうと、サーバ内への侵入や機密情報の搾取、不正出金、クレジットカードの不正利用などの被害に遭う可能性がある。

対策として、プライベートモードでブラウザを立てるという方法がある。

個人情報の流出

重要な住所、名前、誕生日、カード情報などが搾取された結果、ダークウェブサイトなどで情報リストとして売却され、パスワードリスト攻撃の標的になったり、情報漏えいを示唆し、金銭要求の脅迫をされてしまうこともある。

多くのXSSが個人情報を使って利益を生もうとする悪意のある攻撃であるため、不用意にサイト上で個人情報の登録をしないことを推奨する。

Webページの改ざん

実行させる攻撃用のスクリプト次第では、表示させるWebページを改ざんすることもできる。

過去にはクロスサイトスクリプティングXSS)攻撃で公式サイトを改ざんし、トロイの木馬を設置した結果、ユーザーの個人情報を抜き取るといった被害も起こっている。

具体的にどのようにして防げば良いのか

サニタイジングエスケープ)処理をする

サニタイジングエスケープ)処理とは、「<」や「“」といった区切りやタグなどの意味を持つ文字を、意味を持たない文字列に置き換え無害化する行為を指す。サニタイジングエスケープ)処理をすることで、スクリプトが意図せずに挙動してしまうことを防ぐことができる。

バリデーション処理(入力値の制限)

例えば、パスワード入力欄に「全角英数字の6文字」と入力制限をかけたり、電話番号の入力欄で、数字以外の入力データを弾いたりするなどして、不正なスクリプトを入力されないようにする。

JavaScriptを使い、ブラウザ側で入力値の制限を行ってしまうと、ユーザー側がJavaScriptをオフにし不正スクリプトの入力ができてしまうため、必ずvalidates :presence trueなどを記述してサーバーサイドに制限をかける必要がある。

WAFを設置する

WAFとは、「Web Application Firewall」の略称で、Webアプリケーションを対象とした攻撃を検知・防御するセキュリティ製品を指す。自社でオープンソースのシステムを利用していたり、CMSフレームワークを使ってシステムやWebサイトを構築していたりする場合、全ての脆弱性修正に対応するには限界がある。修正漏れによるセキュリティリスクを防ぐためにもWAFの導入が必要。

SECU LABO(セキュ ラボ)|株式会社網屋

その他のセキュリティアタック

CSRF(クロスサイトリクエストフォージェリ)

攻撃者がユーザーに罠が仕掛けてある他のサイトを踏ませてセッション情報を盗む攻撃。

次の技術を利用してセッション管理を実装しているウェブサイトが、CSRF攻撃による影響を受ける可能性がある。

- Cookieを用いたセッション管理 - Basic認証 - SSLクライアント認証

クロスサイトリクエストフォージェリ - Wikipedia

SQLインジェクション

入力フォームなどにSQL文を入力して脆弱性のあるサイトを攻撃すること。

会員しか入れないページにアクセスために、入力フォームもしくはURLのクエリにwhere user_id: adminのようなSQLを書き込んでサイトを攻撃する事例もある。

安全なウェブサイトの作り方 - 1.1 SQLインジェクション:IPA 独立行政法人 情報処理推進機構

パスワードクラッキング

パスワードクラック(password crack)とは、データ分析によって他人のパスワードを割り出すこと

パスワードクラックとは?攻撃の種類や防御対策を解説|ITトレンド

DoS攻撃

DoS攻撃は、攻撃者が1台の機器から対象の機器(サーバーなど)に過剰な攻撃をしかけるサイバー攻撃です。

DDoS攻撃とは?攻撃の目的や種類から実例と対策までを解説|コラム|クラウドソリューション|サービス|法人のお客さま|NTT東日本

セッションハイジャック

セッションハイジャックとは、何らかの手段でこれらの情報を窃取し、本人に成り代わって通信を行うというサイバー攻撃です。言わば「なりすまし」行為なので、盗んだ免許証を使って悪事を働く様子を想像すると、イメージしやすいかと思います

セッションハイジャックとは?その原因と対策を徹底解説

ディレクトリトラバーサル

ディレクトリトラバーサルとは、Webサーバーの非公開ファイルにアクセスを行う攻撃手法です。ディレクトリトラバーサルの呼称は、閲覧可能な公開ファイルが存在するディレクトリから、非公開ファイルのあるディレクトリ階層に「横断する(トラバーサル)」かのように移動して不正にファイルを閲覧することに由来します

ディレクトリトラバーサルとは?4つの有効な対策を解説

セキュリティホール

セキュリティホールとはその名の通り、セキュリティに空いた穴のことを指します。

 

ゼロデイ攻撃

ゼロデイ攻撃とは発見されたセキュリティホールの修正パッチが公開されるまでのタイムラグをついた攻撃の総称です。

ゼロデイ攻撃とは?その仕組みや特徴と対策方法、被害事例 - 株式会社インテリジェント ウェイブ(IWI.)

まとめ

  • XSS対策のために、サーバーサイドにバリデーションをかけると良い。