セキュリティテストは、システムやソフトウェアを安全に利用するために欠かせないものです。サーバーやアプリの欠陥または脆弱性を見つけ出し、改修することで情報漏洩やウイルス感染、悪質な攻撃を防げます。また、システムを快適に使用するためだけではなく、会社の社会的信用を損なわないためにも重要な工程です。セキュリティテストの目的や種類、問題点などを解説します。
セキュリティテストとは
セキュリティテストとは、サーバーやシステム、アプリなどの不具合、欠陥などを検知する工程をいいます。脆弱性管理や脆弱性検査などと呼ばれる場合もあります。
サーバーやシステム、Webサイトなどの不具合や欠陥を放置すると社内のPCがウイルスに感染し情報が盗まれたり、サイバー攻撃を受けたりします。攻撃を受けるとWebサイトやデータの改ざん、情報漏洩、システムダウンなどの被害に加え、企業の社会的信用も失われる可能性があります。
セキュリティテストは、OSやWebのアプリケーション、ミドルウェアなどを対象として行います。不具合や欠陥が発見された場合は、その緊急度に合わせてすぐに対策を取らなければなりません。
セキュリティテストの目的
セキュリティテストの目的は大きく分けると2つあります。
・導入したセキュリティシステムの正常稼働を確認する
サーバーやシステムに導入されたセキュリティソフトなどが正常に実装され、設計した通りに機能するかを確認します。
自社においてセキュリティ対策が万全なつもりでも、いざウイルスの感染やサイバー攻撃を受けたときに正常に機能しなければ重要なクライアント情報や社内の機密情報の漏洩につながります。
・脆弱性の発見
セキュリティテストを実施することで、アプリの開発中やシステム稼働中に発生する脆弱性をいちはやく見つけられます。脆弱性を見つけられずそのまま放置した状態が続くと、ウイルスの侵入を許すことになり被害が拡大する恐れがあります。
アプリケーションやシステムの開発・稼働中においては、常に脆弱性が発生します。そのため1度きりのセキュリティテストではなく、定期的に実施する必要があります。
セキュリティテストの種類・手法は4つ
セキュリティテストの種類には、システムや内部規定、設計のチェック、脅威の検出、プログラムのソースコードの確認、システムの攻撃耐性を確認するテストなど、さまざまなものがあります。
また、コンピューターで行うものばかりではなく、人員を回して行うテストもあります。その他にもシステムやサーバーが正常に稼働するかをチェックするために、設計者やシステムの管理者へのヒアリングなど関連部署との連携が必要なものもあります。
ここでは、代表的なセキュリティテストの方法を4つ紹介します。
1.手動検査とレビュー
手動検査は、セキュリティの担当者が人力でレビューを行います。手動検査はシステムなどを使用せず、マンパワーで実施するため、より柔軟な対応が可能です。高いスキルをもった検査員であれば、システムよりも緻密な検査ができる場合もあります。
業務仕様設計書やソフトウェア設計書、セキュリティ定義書、テスト計画書などを確認し、セキュリティ対策の漏れがないか、またすでに判明している脆弱性のパターンに陥っていないかを確認していきます。検査を行う中で万が一対策漏れが判明した場合は、設計者やシステム管理者にフィードバックし、修正や改善を行います。
2.脅威モデリング
脅威モデリングは、システムの構成図やデータフローなどを分析し、脅威の洗い出しをする作業です。設計初期の段階でデータの入力・出力方法やデータの蓄積方法、システム内部のデータの流れなどがある程度構築されてから実施します。
まず、システム全体の構造を把握し、データフローに沿ってデータの入力、検査、伝達、保管がされているかをチェックします。脅威の検出は、意図的に不正なデータを入力してシステムに任意のコードを実行させ、情報の改ざんや漏洩がないかや、脆弱性の有無を確認していきます。
検出した脅威はリストアップし、どのような脅威があり攻撃を受ける可能性が高いのかを可視化します。潜在的な脆弱性が分かるため、より効率的に脅威を排除できます。
リストアップした脅威は、緊急性や優先順位の高いものから対応していけるようレベルごとに分類して対策を実施します。レベルを振り分けるときは、被害の深刻度とそれに付随する緊急性、攻撃の実行性の難易度、攻撃可能なタイミングの多さ、攻撃できる者の数などを基準にすると良いでしょう。
3.ソースコードレビュー
ソースコードレビューは、プログラム開発者のソースコードを目視で検査する方法です。ソースコードにセキュリティの問題がないか、対策がされているかを読み取っていきます。
ソースコードレビューは、ソースコードを新たに書いたときや既存のプログラムを改修し、ソフトウェアの中のひとつの機能のソースコードが揃ったときに行います。ソースコードレビューは、開発者本人以外にも開発部のチームのメンバーやセキュリティ対策部署の担当者などが対応する場合もあります。
ソースコードレビューを行う際は、ビューの担当者の名前と日付、どの部分のソースコードに対するレビューか、開発のコーディング標準から逸脱している部分、初期機能から逸脱した動作、コードのどの部分にどんな脆弱性の疑いがあるかなどを記録します。
ソースコードレビューを実施することで、多くの脆弱性を改善でき悪意を持った第三者が攻撃しにくい強固なシステムを構築できます。
4.侵入テスト(ペネトレーションテスト)
侵入テストはペネトレーションテストとも呼ばれ、テストツールを使用して実際にシステムにサイバー攻撃を試し、脆弱性が無いかを確認する作業です。ペネトレーションテストは脆弱性診断と違い、システムに侵入して脆弱性を利用し、セキュリティ機能が無効にならないか、回避されないかを探ります。
脆弱性診断の場合は、脆弱性を悪用されたときにシステムが意図的もしくは意図的ではなくても侵害される可能性のある既知の脆弱性の特定を行い、その脆弱性をランク付けします。
脆弱性診断の方が網羅性は高いですが、攻撃を受けたときにセキュリティ機能が作動するかの検査は行いません。以下にペネトレーションテストと脆弱性診断の違いをまとめましたので、参考にしてください。
|
ペネトレーションテスト |
脆弱性診断 |
目的 |
システムに侵入し、セキュリティ機能が回避または無効化される可能性があるかを特定 |
システムの意図的または意図的ではない侵害につながる可能性のある既知の脆弱性の特定とランク付けを行う |
手法 |
脆弱性スキャンやその他自動ツールを使い、手動プロセス中心で検証 |
自動化ツールと手動プロセスを組み合わせて検証 |
期間 |
数日から数週間 |
数分程度 |
代表的なセキュリティテストツール
セキュリティテストツールは、手動診断よりもスピーディるかつ短期間で多様なチェックが可能です。しかし、あらかじめ設定された機能のみになってしまうため、ペネトレーションテストより柔軟性は劣ります。
ここでは、代表的なセキュリティテストツールをいくつか紹介します
OWASP ZAP
OWASP ZAPは、自動診断型Webアプリケーションの脆弱性テストツールです。指定したURLの中に虚弱性がないかを自動で診断する機能があり、Webアプリケーションの脆弱性を幅広く調査できます。
操作が簡単な上に日本語に対応しているため、初心者でも利用可能です。Windows、Mac、Linuxなどに対応しています。
Nikto
Niktoは、Webアプリケーションおよびミドルウェアに対応した脆弱性診断ツールです。WebサーバーとWebアプリケーションに既知のセキュリティホールやセキュリティの問題がないかをスキャンして調査します。Windows、Mac、Linuxなどに対応しています。
Burp Suite
Burp Suiteは、Webサーバーとブラウザの間の通信を確認できるローカルプロキシツールです。Webサイトに送るリクエストを改ざんして脆弱性の有無を測定する機能や、脆弱性診断対象のリンクたどり、対象URLに脆弱性診断を行う機能などがあります。
上記のような代表的なツールは、どれも企業レベルで使用するには十分に脆弱性を網羅できるとは言い切れません。セキュリティテストを代行するサービスなどもあるので、外部に委託する方法なども検討してみると良いでしょう。
セキュリティテストの課題点
手動やツールを組み合わせてセキュリティテストを行えば、より幅広く精度の高いセキュリティ対策が可能となります。しかし、どんなセキュリティテストを実施したとしても、100%完璧なセキュリティ対策を保証するものではありません。ここではセキュリティテストの課題点を紹介します。
・専門的な知識を持つ人材の不足
社内にセキュリティ部門やセキュリティ対策の知識を持つ担当者がない企業の場合、IT部門やエンジニアだけではなどでは脆弱性問題への対応に限界があります。
だからといって、脆弱性やセキュリティテストの知識を持つ人材を育成には一定以上の時間とコストがかかります。外部に依頼する場合も、IT部門やエンジニアが窓口に立つとなると、開発業務以外のタスクが増えてしまい大きな負担となります。
・セキュリティテスト実施に関する認識の違い
Webアプリケーションなどを開発する場合に、開発者側でセキュリティテストや脆弱性診断を必ず実施する、といったセキュリティ要件が定義されていないケースがあります。発注者は、開発行程内の脆弱性診断やセキュリティテスト実施は当然と考えており、依頼書などには記載せずに発注した結果、開発側は依頼書に記載されていなかったため不要と考え、セキュリティテスト未対応のまま開発が進んでいた、というケースも散見されます。
開発側はシステム開発とセキュリティテストの料金を別途で請求する場合もあるため、発注を行う側は依頼時に必ずセキュリティテストの実施の確認や、依頼書に明記することをおすすめします。
・コストと時間
専門的な知識と技術のある企業へセキュリティテストを依頼すると、1度の費用で100万円を超える場合があります。その結果、脆弱性診断の費用が捻出できないことがあります。
また、リリース直前に深刻な脆弱性が見つかった場合は修正に時間がかかりリリース日の遅延や、リリース自体が延期になってしまうこともあります。
(まとめ)定期診断と検査で万全なセキュリティ対策を
セキュリティテストは、開発中だけでなくリリース後も追加開発などを行うたびに実施する必要があります。専門的な知識・技術が求められるため、社内の開発者やIT部門で対応できない場合は、外注で行うことも検討しましょう。
開発費用の見積もりを依頼する際は、セキュリティテストが必要であることも明記した上で算出してもらうと安心です。定期的にメンテナンスを行うことで、高い安全性が維持できシステムを快適に利用できるだけでなく、サイバー攻撃や情報漏えい等のリスク回避にもつながります。