ビルトイン・セキュリティとは?


スピード開発・デリバリーのジレンマ

330px-Pair_programming_1開発の現場は、いつもスケジュールとコストに追われています。それを実現するのに歓迎されがちなスキルは、主に「早く作ること」です。

昨今の開発コンセプト「DevOps」「アジャイル開発」「継続的デリバリー(CI)」では、共通して「タイミング」「リズム」が重要です。それなのに、セキュリティについては「開発者が責任を持って高品質な開発を行えること」が前提となっており、開発者は自己矛盾(ジレンマ)を抱えます。きちんとしたものを作るべきなのか、それとも手早く動いてさえいれば良いものを作るのか。後者の評価が高すぎるのです。

しかし、現実には大変困難な問題であり、動作を保証するのが精一杯である現場も多いことでしょう。誰しもが問題のあるコードを書きたいとは望んでいませんが、どうすれば良いかについての情報や、トレーニングの機会は不足しています。

たいていの場合、クリティカルなセキュリティ問題を見つけることについては、開発プロセスの後のほうの工程で実施されています。放置のリスクはさらに高いので、発見された問題を短期間で修正しなければならず、修正するための手戻りのため時間もコストも負担が大きく結果的に高くつきます。

Kevin Soo Hooの論文 “Tangible ROI through Secure Software Engineering”によると、上流工程でセキュリティのことを意識した対策を行っていた場合に比べ、運用後にセキュリティ対策を実施しなければならなくなった場合のコストについて、設計段階よりも60倍から100倍、開発段階からでも10倍から20倍ものコストがかかります。

セキュリティ問題の解決プロセスに好循環をもたらすには

monitor現状では、とにかく要求にしたがって定期的なペネトレーションテスト(脆弱性ブラックボックステスト)を行う方法が主流だといえます。

このアプローチの目的は、セキュリティ問題を発見(Find)することですが、悪いことにその原因となるコードなど修正すべき箇所を特定することはスコープにありません。

また、改善のためのアドバイスは想像の範囲を超えず、たいてい存在しないか、あっても本質的な改善方策を付されていることはまれでしょう。(あるよ!という方は、ぜひお見せください。)

治療より予防。ReactiveよりProactiveなアプローチが必要

OWASP(The Open Web Application Project)は、OWASP Top 10という脆弱性問題の理解を促進するドキュメントを公開しています。このドキュメントは、非常に広く知られており、多くの開発者がセキュリティ問題を学ぶスタートポイントに用いられています。しかし、脆弱性は包括的に、10個にまとめることはできません。このドキュメントは、網羅性を示すためのものではありません。

こうした問題を事前に起きないようにするにはどうしたら良いのでしょうか。そうです、事前に、どうすれば良いのかについてのガイドが必要です。OWASPでは、その部分を、ASVSや、Proactive Controlsというドキュメントで示しています。

風邪をひいてしまってから、薬を飲むアプローチよりも前に、衛生面でのケアなどの予防的なアプローチが必要だ、ということです。

開発プロセスの前段階で行えることは何か

脆弱性テストだけではダメだということを経験から理解している現場では、品質管理部門があり、静的解析を実施しています。そこでは、バグや脆弱性の大量に含んだコードを検査しなければなりません。現状では、品質管理チームは基本的な脆弱性が大量に存在することを指摘するために時間を浪費しなければならない状況でしょう。

この場合、ビジネス・ロジックや全体設計の視点など、よりクリティカルな問題(Priority)のテストに十分の時間を割くことができません。またツールはたいてい高額で、ライセンスの都合で開発者に自由に使ってもらうことはできないようになっています。

いずれのケースでも、開発チームは改善するようにとレポートを受け取っても、手に負えない量と内容にうんざりすることになり、たいていの場合、実際にコードまでブレイクダウンして原因となるコードを特定し、それを修正するのは膨大な作業となります。システムの動作結果の不具合を、どのコードで起きないようにするのかを決めることは易しいことではないからです。

結果的に泥縄式で場当たり的な対応となってしまうことも少なくないでしょう。スケジュールのプレッシャーから、ソフトウェア資産が脆弱性を多く含んだままリリースされることにつながっており、さらに悪いことに、開発済みとなってしまったそれらの脆弱なコードの流用を止めることができません。

SecureAssist-Supports-Developers開発段階でできることを最大化する、高品質かつ高効率なセキュア開発支援ツール

SecureAssist(セキュアアシスト)は、ソフトウェア統合開発環境(IDE)を拡張するツールです。コードに潜むセキュリティ脆弱性(セキュリティ上の弱点)のある箇所をリアルタイムかつ網羅的に摘出する機能を提供します。

これにより、開発者はコーディング中のソフトウェアに潜む脆弱性につながる可能性のある問題箇所を調べ、具体的な参照情報とともに改善を促す優秀なスペルチェッカーを得ることになります。

このたび、統合開発環境として普及しているEclipse、VisualStudioに加え、最近人気が上がっているIntelliJ IDEA に対応しました。開発言語としては、Java、.NET(ドットネット)、PHP、そしてそれぞれの設定ファイルを調べることができます。このツールは、開発者全員が手元で使うためのツールです。

コーディングする際にファイルを開くたびにスキャンし、Issueウィンドウに問題を表示します。また、プロジェクト全体を指定して「レビュー」をさせることができます。このように、開発段階で脆弱性のもとになるプログラムコードをビルド前に見つけ、修正可能です。その結果をチームでも確認することができます。

これは、ソフトウェア開発プロセスの品質(Quality)かつ効率(efficiency)を確保し、ソフトウェアにセキュリティ保護をあとから付け足すのではなく、最初からビルトイン・セキュリティ(セキュリティを組入れる)するためのソリューションです。

このソリューションは、皆さんの企業にはどんな意味があるのでしょうか。なぜ、開発段階におけるセキュリティ – ビルトイン・セキュリティなのでしょうか。

SecureAssistのコンセプトビデオ(日本語字幕あり)

参考資料:JNSAが発表したインシデント調査(2012年)によると、情報漏えいの原因別の一件あたりの漏えい人数トップは設定ミス、ついで不正アクセス、です。まとまった量のファイルやデータを対象にできるからですね。個人情報流出が起きた場合、データ1件あたりの賠償費用は平均5万円程度、全体の平均対応費用は1億円弱と試算されています。
また、不正アクセスの代表格、標的型攻撃においては水飲み場型攻撃(watering hole attack)でマルウェアダウンロードをさせるためにXSS(クロスサイトスクリプティング)脆弱性を用いてフィッシングを仕掛けることがあります。顧客が集まる脆弱ウェブサイトは格好の踏み台として使われます。また社内システムの脆弱性も悪用されます。いずれも、顧客や取引先に大きな損害を与えることになりかねません。

ソフトウェア開発者が最も生産性が高いのはコーディングする段階であり、当然、ビルドしたあとではありません。ですから、コーディングの最中に、コードに潜む問題を発見し、すぐに修正することが最も効率が良いのです。開発者によるセキュリティ確保、これがスピード開発時代のジレンマを解決する、たった一つの方法です。

SecureAssistの豊富なチェックルールには、入出力チェック、データの取り扱い、弱い暗号関数の利用、設定の不備など含んだ200以上のテスト項目があり、これらをリアルタイムに活用することにより、効率よくセキュリティレベルを確保することができます。このツールによって、人によるチェックや、後工程でのあらゆるテストが一切要らなくなるわけではないでしょう。

というのは、ソフトウェアのリスクの中には、同じデータアクセスでも重要度の違いによるものがあります。また、稼働環境と結合してはじめて出てくるものがありますし、プラットフォームや他のシステムとの連携に起因するものもあります。しかしながら、これまでやってきた後工程でのテスト品質は、開発時のセキュリティ確保により、大幅に質が向上することでしょう。よくある脆弱性を指摘する工数は大幅に削減され、むしろ他のリスクに注意を向けることができるからです。結果として、開発したソースコードを信頼できる資産として、再利用可能な資産として生産性を高めていくことができます。

Payment Card Industry(PCI)データセキュリティ基準 (PCIDSS)対応、IoT時代の「セキュリティ・バイ・デザイン」に求められること

クレジットカード情報を取り扱うための基準を定めたPCIDSS 3.0のいくつかの項目、特に要件6には、脆弱性のないコード開発を厳格に実施することが求められています。SecureAssistのこのメカニズムは、クレジットカード情報を取り扱う標準であるPCI DSS 3.0の要件を満たすことに直接フィットします。

本製品のテスト項目には、HTTPプロトコルでのデータのやりとりにおける脆弱性や、弱い暗号化関数の利用はもちろんのこと、環境設定の不備を排除するためのチェック項目があるため、アプリのバックエンドAPIサーバをはじめ、IoT(Internet Of Things:モノのインターネット)の実装における「セキュリティ・バイ・デザイン」を実現するために有用です。スマートフォンアプリやデバイスなどのバックエンドAPIサーバや、スマートメーター、家電などの組み込みデバイス向けのソフトウェアそのものにもJavaや.NETが用いられています(実際、世界で最も使われている言語は…英語ではなく、Javaだそうですよ)。リスクの低いコードにするため、SecureAssistの出番です。

日本市場では開発を請け負う企業はもとより、製造・エンターテイメントなどの企業の利用から始まっていますが、米国市場では主要メガバンク、保険・金融機関の業務ソフトウェア開発における定番ツールとして圧倒的なシェアがあります。

 

Solution: Find, Fix, and Prevent Vulnerabilities

eye-catch_3ですから、開発チームにSecureAssistを使ってもらいましょう。導入は簡単です。Pluginをダウンロードし、対応するIDEにインストールします。それだけです。コーディング時のリアルタイムチェックにより、問題のもととなるコードを見つけ(Find)、その問題を修正(Fix)していきます。SecureAssistは、問題のあるコードを行レベルで指摘し、問題を特定し、修正するためのサンプルコードや、CWEやOWASP Top 10などの外部の参照資料へのポインターを示してくれます。それらはチームで共有でき、開発者は自身のコードをよりセキュアなものとしていく学習習慣(Educate)がつきます。

この好循環により、システムのセキュリティ問題の発生を80%程度削減でき、問題を未然に防ぐ(Prevent)するセキュリティ対策を導入することができると言われています。残りの20%は、個別性の高い問題や、ソフトウェアそのものとは限らない部分すなわちプラットフォームの環境や設定などに起因しています。さらに、開発コードの品質が確保されるようになりますと、コードを再利用しやすくなり、スピーディーにアップデートを繰り返すことができ、結果として継続的デリバリーするシステムの信頼性が向上します。

team_image_lSecureAssistのライセンスアクティベーションや検出ルールとガイドライン、すなわちルールパックは、チームで一台設置するSecureAssist Enterprise Portalというサイトを社内に設置し、そこから管理されることになります。このEnterprise Portalにより、プロジェクトごとの問題発生の状況などもレポートも見ることができ、そのデータをexportするとJenkinsなどの管理システムでも表示できます。プロジェクトの状況が可視化されることは、リリースまでの計画をたて、リスクをコントロールするのに大きな効果があります。

ご採用後すぐ効果を発揮します・お客様にもご提案ください。

 

logo_secureassistSecureAssistは、脆弱性スキャナやテストツールに比べて大幅にリーズナブルで、開発者用ツールであることから、導入したその日から役に立ちます。事実、Cigitalはセキュア・コード分析の最老舗であり、同社の理論が後発の主要なコード分析ツールに組み込まれています。ぜひお試しください

御社の開発プロジェクト促進、品質向上、開発者の評価-リクルーティング、またエンジニア教育にも有効です。ご相談ください。御社のお客様にもぜひお役立てください。継続的にお取り扱いいただけるためのパートナ制度もご用意しています。ぜひお声がけください。

製品の詳細・トライアルは-> https://secureassist.jp