開発者が知っておくべきセキュアコーディングプラクティス
安全性の高い優れたソースコードの記述でソフトウェアに対する攻撃を防ぐ
相互に接続されたソフトウェアに依存する現代社会では、安全なアプリケーションのリリースが開発者の最優先事項となっています。それでも、悪用や攻撃の多くは、優れた、安全性の高いソースコードの記述で防ぐことが可能です。
ソースコードとは、アプリケーションの動作を定義し、その機能を実装するための命令の集合体であり、本質的にアプリケーションの DNA です。ソースコードは命令に変換され、それをコンピューターが読み取って実行します。
セキュアコーディングとは
セキュアプログラミングとも呼ばれるセキュアコーディングでは、潜在的な脆弱性 (対象システムでデータを公開したり害を及ぼしたりする可能性) の防止を目指して、厳格な原則に従い、高レベルの言語でコードを記述します。
セキュアコーディングは、単にコードを記述してコンパイルし、アプリケーションにリリースするだけではありません。セキュアプログラミングを本格的に導入するには、セキュアなハードウェア、ソフトウェア、サービスやプロバイダーを利用した信頼性の高いセキュアな IT インフラ上に構築されたセキュアな開発環境の構築も必要です。
セキュアコーディングが重要となる理由
金融取引でもオンライン化が進んでいます。多くの場合、セキュリティインシデントはアプリケーションを駆動するソフトウェアの奥底で発生し、企業や個人に大きな影響をもたらします。金融、医療、エネルギー、輸送など、重要な産業でコードが保護されていないと、金銭的または財産的な損害、市場の操作や盗難、さらには身体的損害や死亡事故につながる可能性もあります。
そして、危険はすでに現実のものとなっています。近年のメディア報道は、私たちが使用するソフトウェアの多くがいかに安全でないかを浮き彫りにしています。リソースも知識も自由に使える大企業であっても、脆弱性に起因する重大なインシデントを経験しています。消費者や企業にソフトウェアを提供する企業にとって、顧客の信頼はもちろん非常に貴重であり、その信頼を失うことは収益に影響を与える可能性があります。したがって、これらの組織ではセキュアコーディングプラクティスを最優先事項として扱う必要があります。
セキュアコーディング技術を導入する
セキュアプログラミングプラクティスや一般的なセキュリティに関しては、プロセス全体をできるだけシンプルに保つこと (KISS) が有効です。手順が複雑だと、結果に一貫性がなくなったり、最悪の場合、完全に無視されることもあります。車輪の再発明は避け、実績のあるセキュリティとセキュアコーディングのベストプラクティスを遵守する必要があります。OWASP Foundation は多くの貴重なリソースを提供しています。なかでも、OWASP Top 10 は最も一般的なセキュリティリスクを取り上げており、出発点として最適です。
アクセス制御には認証と承認が含まれ、システムを保護するための基本的な構成要素の一つとなります。
強力な暗号化の実装も、システムを安全に保つための重要なポイントです。暗号化の実装を支援する多くのライブラリが容易に利用できるため、最小限のカスタムコードを記述するだけで済みます。ただし、標準のアルゴリズムとライブラリのみを使用することが重要です。また、FIPS 準拠が求められる場合は、検証済みのライブラリのみを使用する必要があります。
シークレットの管理もセキュリティ対策として重要です。シークレットの管理に役立つ多くの利用可能なツールを使うかどうかにかかわらず、パスワードやアクセスキーなどのシークレットをコードリポジトリにハードコードしたり、アップロードしたりしないでください。
セキュリティ対策でシステムを保護することは、防御の最前線となりますが、コード自体の安全性を高めることも重要です。
セキュアコーディングチェックリストの 5 つのベストプラクティス:
コードを圧縮して難読化する: コードへのアクセスを難しくし、さらに読みにくくすることで、潜在的な攻撃を抑止できます。JavaScript の世界では、コードを圧縮することが一般的です。圧縮により、コードから空白と改行が削除されます。本来の目的はコードファイルのフットプリントを減らすことでパフォーマンスを向上させることですが、公開されたコードが非常に読みづらくなるという副次的な利点もあります。また、似たような手法でもっと効果的なのが、人が読めるコードを理解しにくいテキストに変えるコード難読化という手法です。
近道を取らない: 開発者は、コードを早く本番環境にリリースしようとして近道を取りたくなるかもしれませんが、このことでセキュリティに重大な影響が及ぶ可能性があります。たとえば、ハードコードされた認証情報やセキュリティトークンがコメントに残されている場合、攻撃が発生することがよくあります。このような情報は、アプリのリリースよりずっと以前にクリーンアップしておく必要があります。それでも、コードベースが大きくなり、ますます厳しいリリーススケジュールで機能するコードを提供しなければならないというプレッシャーが大きくなると、セキュリティギャップの可能性が高まります。
スキャンとコードレビューを自動化する: クロスサイトスクリプティング (XSS)、SQLインジェクション、およびその他の種類の攻撃は、コードのセキュリティの脆弱性を悪用するものです。XSS 攻撃と SQL インジェクション攻撃はいずれも、データとコマンドを区別できないコードの弱点に起因します。XSS により、自分のドメインの中で悪意のあるコードが実行されてしまいます。SQL インジェクション攻撃は、内部のデータストアにあるデータを盗んだり、操作したりしようとするものです。定期的なセキュアコードレビューと脆弱性をスキャンする自動化ツールを組み合わせることで、このような攻撃を防ぐことができます。
既知の脆弱性を持つコンポーネントを使用しない: 多くの場合、パッケージとして使用されるオープンソースのコンポーネントとライブラリは、開発者の時間と手間を省きますが、悪意のある攻撃者にとって一般的なエントリーポイントとなり、脆弱性と潜在的な攻撃の大きな原因になります。既知の脆弱性があるコンポーネントは使用しないようにし、使用するコンポーネントの開発プロセスを通じて常に新しい脆弱性をモニタリングすることで、コードの完全性を保つことができます。
監査とログの記録を行う: 十分なログ記録とモニタリング機能を備えたソフトウェアを使用することで、コードが本番環境にデプロイされたときに潜在的なインシデントを検出できます。
Snyk は、コードセキュリティをスキャンしてモニタリングするための最高の無料ツールの一つです。開発者は操作性の高い環境でオープンソースの脆弱性スキャナーや Snyk コードを使ってコードの脆弱性を見つけて修正できます。
全体を俯瞰する
基本を理解したら、コードをさらに保護するためにいくつかの追加手順を実行できます。最初のステップは、マルチレイヤ―セキュリティアプローチです。ベストプラクティスを遵守し、安全なコードを記述することは、その一部にすぎません。
また、組織内にセキュリティ文化を醸成することも重要なポイントです。そのために、開発者部門、IT 部門、経営管理部門、そして社内外の利害関係者への教育が必要です。また、脅威モデルを積極的に構築し、潜在的なリスクの管理と修正を計画する必要があります。これには、OWASP や Have I Been Pwned など、役立つソースを活用できます。
安全なソフトウェア開発ライフサイクル (SSDLC) を構築することは、セキュアプログラミングプラクティスとコード品質をソフトウェア開発プロセスに統合するためのもう一つの重要なステップです。これには、新しいアプリケーションの要件を収集する (または既存のアプリに機能を追加する) 初期段階から、開発、テスト、導入、およびメンテナンスに至るまで、あらゆる段階でアプリケーションを開発してメンテナンスすることが含まれます。この最初期の「収集」段階で、プロジェクトの利害関係者は要件の見直しを開始し、潜在的なセキュリティリスク、特にソースコードに関連するリス クについて指摘する必要があります。
SSDLC やその他のセキュアコーディングの取り組みの一環として自動化ツールを使用することで、時間と労力を節約できます。SAST はその一例で、開発サイクルの非常に早い段階で導入できます。
従来の静的アプリケーションセキュリティテスト (SAST) ツールは、スキャン時間が長く、精度が低いため、誤検出が多く、開発者の信頼が損なわれていました。Snyk Code は、開発者の作業効率と実用性を高めています。リアルタイムのセマンティックコード解析によって、コード記述の時点で実用的な提案がなされ、開発者のワークフローのスピードと品質が高まります。
実証済みのセキュアコーディングガイドライン
ソフトウェアが日常生活に欠かせないものとなっているため、基盤となるソースコードのセキュリティと完全性が重要になっています。ここで説明するセキュアコーディング手法の多くは新しいものではなく、経験豊富な開発者にはなじみのある概念です。ただし、業界で認められているシンプルなセキュアコーディングスタンダードと手順に従うことで、エントリーポイントの数を含め、全体的な攻撃サービスを削減でき、安全なソフトウェアを提供できるようになります。
セキュアコーディングについてのよくある質問
セキュアコーディングプラクティスとは
セキュアコーディングプラクティスとは、潜在的なセキュリティの脆弱性を防ぐ方法でコードを記述することをいいます。これには、ソースコードとサードパーティライブラリの両方を安全な状態に保つことが含まれます。
OWASP セキュアコーディングとは
OWASP セキュアコーディングとは、オープンソース Open Source Foundation for Application Security が発表した一連のセキュアコーディングのベストプラクティスとガイドラインのことを指します。ここでは、一般的なソフトウェアセキュリティの原則と、セキュアコーディングの要件の両方について説明しています。
セキュアコードレビューとは
セキュアコードレビューとは、コードに潜在する脆弱性を特定し、修正するプロセスをいいます。これは、自動化されたツールを使用して手動で行うことも、組み合わせて行うこともできます。
Snyk を使用して、既知の脆弱性についてコードを継続的にスキャンしてテストしましょう。また、無料のコードチェックツールもお試しください。