アプリケーション開発において重要な課題のひとつが「セキュリティ」です。近年では、Webアプリケーションの脆弱性を突くサイバー攻撃が増加しているため、堅牢な開発環境の構築が求められます。そこで本記事では、アプリケーション開発におけるセキュリティ対策について解説します。セキュアな開発環境を整備する参考にしてください。
アプリケーションを開発した際のセキュリティ対策とは
スマートフォンやタブレットの爆発的な普及に伴い、Webアプリケーションやモバイルアプリの市場も年々拡大傾向にあります。とくにモバイルアプリ市場は急成長の様相を見せており、総務省が発行した「令和3年版 情報通信白書」によると、2016年時点で約757億ドルだった市場規模が、2021年には約2,647億ドルにまで拡大しています。
しかし、そんなアプリケーション市場の拡大に比例するかのように、サイバー攻撃の脅威もまた高度化かつ多角化しています。たとえばWebアプリケーションは、クライアントからの要求に対し動的に応答するという性質上、特有の脆弱性が存在しています。Webアプリケーションは、SQL言語を用いてデータベースに命令文を送り、その命令に則ってサーバーサイドで情報を処理し、結果をクライアントに返します。このとき、SQL文のエラー処理が最適化されていない場合、不正なSQLコマンドの実行によって、データベースへの侵入を許してしまう可能性があるのです。このような脆弱性を突く攻撃を「SQLインジェクション」と呼びます。
セキュリティの脆弱性が存在しないアプリケーションの設計・開発は、現時点の技術では非常に困難であり、ほぼ不可能といっても過言ではありません。また、アプリケーションの設計段階からセキュリティリスクを想定し、セキュアコーディングを実践する場合、開発コストや開発期間の増大につながるため、早期リリースを優先して脆弱性を放置するケースもあります。
とはいえ、セキュリティインシデントは企業の信用失墜を招くのみならず、事業停止や損害賠償などの被害をもたらすおそれもあります。セキュアな開発環境の構築は、企業にとって避けては通れない重要課題といえるでしょう。
アプリケーションにおけるセキュリティの脆弱性
Webアプリケーション特有の脆弱性を突くサイバー攻撃は年々多様化しており、先述したSQLインジェクションや、悪質なWebサイトへ誘導する「クロスサイトスクリプティング」、セキュリティホールを狙う「ゼロデイ攻撃」など、さまざまな種類が存在します。
また、こうした外部からの攻撃だけでなく、設計やコーディング上の不備によって脆弱性が発見される事例も少なくありません。その一例として、具体的には以下のようなケースが挙げられます。
iOS向け公式アプリに脆弱性が発見された事例
2018年2月、国内で約8,000万人以上が利用する無料通信アプリのiOS版に脆弱性が発見され、大きな話題となりました。この無料通信アプリのiOS版には、SSLサーバー証明書の検証不備の脆弱性が存在し、信用できないネットワークを使用して特定の暗号通信を行った場合、その通信を窃取されるおそれがあると発表されたのです。
また同年9月には、世界最大のSNSを運営している企業において、ユーザーのアクセストークンが第三者の手に渡ってしまうというインシデントがありました。このインシデントによって大きな被害は明らかになっていませんが、被害を受けた危険性のある5,000万人分のアカウントに加え、予備的措置として4,000万人分のアカウントのアクセストークンをリセットする事態に陥りました。
プラグインの追加による脆弱性
近年、Webアプリケーションとネイティブアプリの利点を組み合わせた、ハイブリッドアプリの開発が増加傾向にあります。ハイブリッドアプリは、UI構築にマークアップ言語のHTMLとスタイルシート言語のCSSを利用できるため、Web技術でアプリケーションを開発できると同時に、ネイティブアプリと比べて自由度が高いというメリットがあります。
代表的な開発環境としては、「Monaca」や「Cordova」などが挙げられます。これらのプラットフォームでは豊富なプラグインが提供されているため、ネイティブアプリ並みの機能を備えたアプリケーションを簡単に開発できます。しかし、サードパーティ製のプラグインそのものに脆弱性が潜んでいる可能性もあり、そこからセキュリティインシデントに連鎖する危険性は否定できません。
アプリケーション開発でできるセキュリティ対策
アプリケーション開発におけるセキュリティ対策は、端末のパスワード設定やOSのパージョンを最新に保つといった基礎的な取り組みから、二段階認証やデータ暗号化の導入など、さまざまな施策が考えられます。また「Microsoft Azure」のように、WAFや多要素認証を搭載しているプラットフォームに開発環境を移行するのも非常に有効です。このようにさまざまなセキュリティ対策が挙げられますが、最も基本的な施策といえるのが以下の3つです。
- https経由でサイトを表示
- ソースコードを難読化する
- 認証の不備をなくす
https経由でサイトを表示
Webアプリケーションの開発やWebサイトの構築において、今や必須といえるのが「常時SSL化」です。常時SSL化とは、クライアントとWebサーバーの通信で用いられるプロトコルを、「http」から「https」に統一することを指します。
一昔前に主流だったhttpは、暗号化されていない通信プロトコルのため、個人情報やクレジットカード情報などを窃取されるリスクがありました。通信プロトコルをhttpsに統一することで、暗号化された安全な通信が可能になるため、セキュリティインシデントの発生リスクを最小限に抑えられます。
ソースコードを難読化する
Webアプリケーション開発には、PHP/Python/Ruby/Javaなどのさまざまな言語が用いられますが、最も幅広く活用されているのがJavaScriptです。JavaScriptは、Webブラウザから誰でも簡単にソースコードを解析できるため、悪意あるハッカー(ブラックハッカー)が攻撃を仕掛けやすいというデメリットがあります。そのため、文字列の暗号化や命令パターンの変換など、ソースコードを意図的に読みにくく記述する「難読化」が必須といえます。
認証の不備をなくす
認証の不備は、セキュリティインシデントを招く大きな原因のひとつです。パスワードやユーザーIDなど単一的な認証システムでは、多様化するサイバー攻撃の脅威からセキュリティを担保できません。認証の不備によるセキュリティリスクを最小限に抑えるためには、パスワードやユーザーIDのような知識要素だけでなく、スマートフォンやICカードでの所持要素、指紋や網膜による生体要素など、複数要素からユーザーの真正性を確認する「多要素認証」の導入が求められます。
DevSecOpsによる早期セキュリティ問題への対応
近年、ソフトウェア開発やアプリケーション開発の領域で主流となりつつあるのが「DevOps」です。DevOpsとは、「Development(開発)」と「Operation(運用)」を組み合わせた造語であり、開発担当者と運用担当者が相互協力するシステム開発手法を指します。そして、このDevOpsに「Security(セキュリティ)」の概念を組み合わせた開発手法が「DevSecOps」です。
具体的には、システムの「要件定義」「設計」「開発」「テスト」「リリース」「運用」に至るすべてのプロセスにおいて、各工程に応じたセキュリティ対策を組み込む開発手法のことです。DevOpsは、システム稼働までのコスト削減や開発期間の短縮、品質の向上が主な目的でした。一方DevSecOpsでは、要件定義・設計・開発の段階からセキュリティ上の課題に対処することで、テスト・リリースでの手戻りを防ぎ、さらに運用後の事業停止リスクを最小限に抑えられます。
まとめ
アプリケーション開発のハードルが下がる一方、セキュリティの重要性は高まっています。堅牢な開発環境を構築するためには、Microsoft AzureのようなIaaS・PaaS型のクラウドサービスが不可欠です。新しい時代に即したセキュアな開発環境を整備するためにも、Azureの導入を検討してみてはいかがでしょうか。