「イントラWebアプリケーションのセキュリティ」、大丈夫ですか?:システムインテグレーションとセキュリティ(3)(1/3 ページ)
“SI視点”でセキュリティのポイントを解説する本連載。第3回は、「アプリケーション開発」の観点から、特に見逃されがちな「イントラ環境のWebアプリケーションのセキュリティ」について注意すべきポイントを紹介します。
システム開発・運用担当者向けにセキュリティの勘所を解説する本連載。第1回、第2回では「データベースセキュリティ」を扱ってきましたが、第3回となる今回からは、「アプリケーション開発」の視点から考慮すべきセキュリティ上のポイントについて、2回にわたり解説します。
「イントラ環境のWebアプリケーション」のセキュリティ上のポイント
読者の皆さまの中には、情報システム部門が構築、運用している環境を利用し、自部門向けの「予実管理アプリケーション」などを自分たちで開発しているという方も多くいらっしゃるのではないでしょうか? いわゆる「EUC(End User Computing)」と呼ばれる開発方式ですが、筆者は普段、こうしたユーザー部門(経営管理部、営業部、経理部など)が開発したアプリケーションの保守・運用や改修を主な業務としています。
一口にEUCと言ってもさまざまなアプリケーションがありますが、よく見られるのは先に述べた「予実管理アプリケーション」のようなものを含む、「社内システムから出力される元データ(CSVファイル、Excelファイルなど)を『Oracle Database』『Microsoft SQL Server』『MySQL』などのデータベースに取り込み、Webアプリケーションや『Microsoft Access』『Windows Forms』などを利用してレポートを作成する」といったものです。
しかし、社内の限られた人だけが利用するアプリケーションだからといって、こうしたアプリケーションの開発・改修時に、セキュリティに配慮することを忘れてはいけません。そこで本稿では、筆者自身の経験も踏まえつつ、社内(イントラ環境)でのWebアプリケーション開発におけるセキュリティ上のポイントを解説します。
Webアプリケーションが抱えるリスク
始めに、一般にWebアプリケーションにどんな脆弱(ぜいじゃく)性が存在し得るのかについて確認しておきましょう。下表は、情報処理推進機構(IPA)やOWASPが公開している資料と、@ITの記事に記載されている情報をまとめたものです。各資料の公開時期はそれぞれ2015年、2013年、2003年と開きがありますが、「SQLインジェクション」や「セッション管理の不備」など、いくつかの脆弱性については、昔から継続的に警告、啓発が行われていたことが分かります。
IPA(2015年) | OWASP(2013年) | @IT(2003年) | |
---|---|---|---|
SQLインジェクション | A1-Injection | Buffer Overflow | |
OSコマンドインジェクション | A2-Broken Authentication and Session Management | Cross Site Scripting | |
パス名パラメータの未チェック/ディレクトリトラバーサル | A3-Cross-Site Scripting (XSS) | Parameter Manipulation | |
セッション管理の不備 | A4-Insecure Direct Object References | Backdoor & Debug Options | |
クロスサイトスクリプティング | A5-Security Misconfiguration | Forceful Browsing | |
CSRF(クロスサイト・リクエスト・フォージェリ) | A6-Sensitive Data Exposure | Session Hijacking/Replay | |
HTTPヘッダ・インジェクション | A7-Missing Function Level Access Control | Path Traversal | |
メールヘッダインジェクション | A8-Cross-Site Request Forgery (CSRF) | SQL Injection | |
クリックジャッキング | A9-Using Components with Known Vulnerabilities | OS Command Injection | |
バッファオーバーフロー | A10-Unvalidated Redirects and Forwards | Client Side Comment | |
アクセス制御や認可制御の欠落 | Error Codes | ||
参考:『安全なウェブサイトの作り方』(IPA)、『2013 Top 10 List』(OWASP)、『サーバのファイルが丸見え?!』(@IT) |
以下は、これら3つの資料で共通して挙げられている脆弱性をピックアップしたものです。
- インジェクション(SQLインジェクション、OSコマンドインジェクション)
Webアプリケーションでは、ユーザーから受け取った情報を基に、データベースからデータを取得したり、データベース上のデータを変更したりすることがあります。また、OSのコマンドを利用してメールを送信したり、ファイルを取得したりすることもあります。このとき、ユーザーから受け取った情報を適切に処理していなければ、その情報に含まれる不正なSQL文やOSコマンドが実行されてしまい、データベース上のデータやOS内のファイルなどに対して、不正な操作を行われてしまう可能性があります。 - セッション管理の不備
Webアプリケーションでは、ユーザーを識別するために、セッションIDという一意のIDを発行することがあります。このセッションIDを何らかの方法で窃取されてしまうと、悪意のあるユーザーが正当なユーザーになりすまし、不正な操作を実行できてしまいます。セッションIDが容易に推測可能なもの(連番、名前の結合など)であることなどが代表的な原因となります。 - クロスサイトスクリプティング(Cross-Site Scripting)
個人情報を入力した後や、掲示板への投稿を行った後の確認画面などで、ユーザーから受け取った情報をそのまま画面上に表示することがあります。このとき、ユーザーが入力した情報を適切に処理していないと、ユーザーのブラウザ上でスクリプトが実行され、セッション管理に利用される情報などを盗まれてしまう可能性があります。 - クロスサイト・リクエスト・フォージェリ(Cross-Site Request Forgery)
ログイン機能を持つWebアプリケーションにおいて、操作を行っているユーザーが正規のログインユーザーかどうかを適切に判断していない場合に、悪意のある外部サイトを使って不正なリクエストを対象のアプリケ―ションに向けて送信されてしまう可能性があります。その結果、例えば、個人情報が意図せず変更されたり、銀行への不正送金が行われたりしてしまう可能性があります。 - ディレクトリトラバーサル
外部に公開されているURLからアクセス可能な場所に重要なファイルが置かれているときに、適切にアクセス制限が設定されていないと、重要な情報を窃取されてしまいます。例えば過去には、Subversionで管理しているWebアプリケーションの“開発中のコード”が盗み取られ、公開されてしまったケースなどがあります。
このように、Webアプリケーションにはさまざまなリスクが存在します。これらに対処するにはどうすればよいのでしょうか? 次ページ以降では、イントラ環境に存在するWebアプリケーション開発において特に注意すべきポイントを紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.