【セキュリティ基礎】IPA抜粋の脆弱性10選と開発時の対処法

インターネットやWebアプリの普及に伴い、セキュリティの重要性は増すばかり。

そもそもWebアプリ開発の現場で最低限知っておくべきセキュリティ知識とは!?

TaNA
現状を鑑みれば、当然セキュリティの重要性は理解出来ますが、一口にセキュリティと言っても範囲が広いし上、奥が深いし、日々新たな脆弱性が生まれてるしで、一体どこから手をつければ良いのやら分からず、ちょっと敬遠気味…

そこで最初の一歩として、IPAで抜粋されてる10種類の脆弱性に関する概要と対策の理解!!

今回はざっくりレベルで脆弱性の特徴+対応策をまとめてみました。

SQLインジェクション

SQLインジェクションとは、データベースを利用したWebアプリで、問い合わせ命令文の組み立て方に問題がある場合、悪意のある細工が施されたSQLを埋め込まれて不正操作されてしまう問題。

例えば以下のようなコードで考えてみます。

「OR ‘a’=’a’」を追加するとWHERE句がTrueとなり、常にアクセス可能になってしまう。

POINTこの脆弱性の問題点は、データの閲覧・盗難・変更・消去などが行われる可能性.

結果的には情報漏えいの事故、盗み出された情報を悪用される二次被害、またデータを削除されるとビジネスを継続出来なくなったり、また最も深刻なのは、サーバ自体を乗っ取られる事で、莫大な損害賠償になる可能性を孕んでいます.

◼️SQLインジェクション対策

1.サーバーでの対策(エスケープ処理と入力内容のバリデーション).

2.ネットワークでの対策(WAF導入や脆弱性攻撃を検知するソリューション導入).

3.WEBの脆弱性対策(脆弱性診断サービスなど活用して定期的にチェック)

主にアプリ開発者が気に掛けるのはサーバーでの対策。

最近の言語では大体バインド機構が用意されているので、独自にエスケープする処理が不要。

バインド機構はSQLに変数の場所を示す記号を置いた後、実際の値を割り当てる仕組み。

+αで入力値にはしかるべきバリデーションを実装しておけば良いかなと。

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

クロスサイトスクリプティング(XSS)とは、サイト内検索を行うユーザー投稿型のWebアプリケーションで、悪意あるスクリプトが埋め込まれ、偽ページの表示が可能になってしまう問題。

頭文字はCSSですが、Cascading StyleSheetsと被るのでXにしてXSSとした模様。

◼️ 悪意を持つユーザーの攻撃手順

1.攻撃者がBさんの掲示板に罠を仕掛ける.

2.AさんがBさんの掲示板を見る.

3.Aさんが罠のリンク(X社)が入ったページを表示し、リンクをクリック.

4.Bさんの掲示板からX社のサイトに移動し、悪意のあるスクリプトを送ってしまう.

5.悪意のあるスクリプトをブラウザで実行し、偽のページが表示される.

6.偽ページにユーザが騙され、個人情報などを攻撃者に送ってしまう.

具体的に掲示板のようなユーザーが入力できるWebアプリケーションを考えてみます。

例えば入力内容を何もバリデーションが実行されていない場合、入力者は何でも入力出来てしまい、悪意のある攻撃者が悪意のスクリプトを含んだHTMLコードを入力して投稿すれば、一覧表示時に悪意のあるスクリプトを表示させる仕組みを作ることが可能です。

POINT偽ページに誘導後、個人情報を盗まれ、Cookie奪取でアカウントを乗っ取られる可能性.

まあ脆弱性のあるWebアプリケーションを管理する企業は社会的な信用を失います。

XSSの対策には以下が考えられます。

◼️XSSの対策

1.入力値のバリデーション.

2.サニタイジング.

SQLインジェクションと同じく入力値に対するバリデーションを行い、スクリプト実行に必要な特殊文字(&,<,>,”,’)は画面上に文字列として表示されるようエスケープ処理を施します。

スクリプトのソースが表示されるだけで、攻撃者が意図する画面が表示されません。

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

クロスサイトリクエストフォージェリ(CSRF)とは、ユーザがログイン状態を保持したまま、悪意のあるURLなどをクリックさせ、本人が意図しない情報・リクエストが送信されてしまう問題。

◼️ 悪意を持つユーザーの攻撃手順

1. 攻撃者がBさんの掲示板に罠を仕掛ける.

2. ログイン済みのAさんがBさんの掲示板を閲覧.

3. Aさんが罠のあるリンクをクリック.

4. Bさんの掲示板からW社のウェブサイトに移動し.

5. 本人の要求と偽り悪意あるリクエスト送信.

側から見れば、あたかも本人が操作しているように見えます。

POINTユーザ権限で出来る範囲の全操作を、攻撃者に実行される可能性がある.

TaNA
例えば経済版サイトに対して、悪意のある書き込み(殺人予告)を本人の意思とは関係なくされる危険性があり、酷いケースだと誤認逮捕される可能性もあります。実際問題そのようなケースで逮捕される方は結構いるらしい。

開発者が考慮すべき対策として、リクエストの照合や脆弱性の排除が考えられます。

例えばよく利用されるのがトークン認証。

画面表示のタイミングでサーバからランダムなトークンが発行され、hidden要素に値が埋められ、画面上ではAjaxなどでPOSTされる際、他の入力値と共にトークンをサーバに送信し、自サイトのサーバから連携したトークンか照合する方法です。

CakePHPなどのフレームワークは、規定formタグを書くだけで自動的にCSRF対策をしてくれます.

CakePHP3.6のコントローラでのPHPUnitの使い方メモ

TaNA
最近はSPA案件も多く、APIはCakePHP、フロント周りは別途react・vueで作られるケースもあり、私が関わっていた案件はhtml・js等はS3ストレージに配置、アクセス時はAmazonCloudFront経由に設定してました。

ログイン時にAWS側でランダムなトークン値を発行してクライアントで保持、API呼び出し時には他データと一緒にトークン値も送信し、サーバ側でAWS側へトークン値が妥当か問い合わせ(チェック)して接続可能かを判断していました。

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

ディレクトリ・トラバーサルとは、本来アクセスされては困るファイルやディレクトリに対して、相対パス指定などでプログラムを表示させ、不正アクセスをする攻撃手法。

POINT本来アクセス権限がない情報へのアクセスなので、データの漏洩や流出する可能性有り.

また閲覧されたファイル内にID・パスワードが記載されていると、システムを乗っ取られる可能性もあり、場合によっては不正アクセスでwebページの改ざんや削除もあり得ます。

◼️ディレクトリ・トラバーサルの対策

1.外部からのパラメーターでファイル名を直接指定しない.

2.ファイルを開く場合は、固定ディレクトリ+ファイル名にする.

3.ファイルのアクセス権を正しく設定.

4.ファイル名のチェックを行う.

OSコマンドインジェクション

OSコマンドインジェクションとは、ユーザからデータを受けつけるWebアプリケーションにて、プログラムに与えるパラメータ中にOSへの命令文を組み込ませて不正に操作する攻撃。

PHPの場合、OSコマンド関数にはsystem()やexec()があります。

例えば脆弱性のあるシステムでメールアドレスを入力させる場合、不正値を入力。

宛先にメール送信された後、rm -rfコマンドを実行される可能性があります。

◼️OSコマンドインジェクションの対策

1.OSコマンド呼び出し関数を極力使わない.

2.利用する場合、ユーザからの入力値に対してエスケープ処理を行う.

セッション管理の不備

セッション管理の不備とは、利用者がWebアプリケーションにアクセスしセッション発行され、悪意のある攻撃者が盗聴したり、類似性を推測して利用者のセッションを乗っ取る攻撃。

POINT利用者のみが利用可能なサービスの悪用、情報の閲覧、改ざんが行われる可能性.

◼️ セッションハイジャックの対策

1.推測困難なセッションIDを利用.

2.セッションIDをURLに含めない.

3.HTTPS通信で利用するCookieにはsecure属性付与.

4.ログイン後にセッションを新規に開始.

HTTPヘッダインジェクション

HTTPヘッダインジェクションとは、動的にヘッダ生成されるWebページに対して、改行コードをヘッダ内に挿入することで、任意の文字列を生成し不正な動作を行わせる攻撃手法。

◼️ 悪用された際に考えられる被害

1.Cookieの値を任意の値に変更可能.

2.キャッシュ汚染によるWebページ差し替え.

3.別URLへのリダイレクト.

4.任意の文字列やスクリプトを表示させる.

HTTPレスポンスを改ざんされるので対策必須。

◼️ HTTPヘッダインジェクションの対策

1.改行コードの「%0d」をエスケープ.

2.APIを利用.

3.レスポンスヘッダにリクエストボディの値を使用しない.

HTTPの不適切な利用

HTTPS化のために証明書を発行後、期限が切れたり、偽造された証明書が使われていたり。

今なぜHTTPS化?インターネットの信頼性のため技術者が知っておきたいTLSの歴史と技術背景

DoS

DoSとはウェブサイトのサービスの運用や提供を妨げる攻撃。

悪用されると以下の事が起きます。

◼️ 悪用された場合に考えられる被害

1.サーバやシステムのダウン.

2.サービス停止による被害や損害.

3.情報資源や信頼を失う可能性.

対策が難しいですが、一応以下が考えられます。

◼️ DoSの対策

1.IPS/IDSの導入.

2.各種システムやソフトウェアの最新化.

3.攻撃を受けた場合の考慮(復旧手段など)

メール不正中継

問題のあるウェブサイトを中継してメールを不正に送信される攻撃手法。

とりあえず大量にメールが送られてくるのでうっとおしい。

昨今のWeb開発では、何かしらのフレームワークを使った開発になると思いますが、第一に公式マニュアル等をしっかりと読み込み、入力値や連携データにはしかるべきバリデーションを行い、バインド機構やエスケープ処理を心掛ける事で最低限は対応できそうです。

参考文献

安全なウェブサイトの作り方

IPA情報セキュリティ

McAfee Blog

Cybersecyrity TIMES