In this article
すべての開発者が知っておくべきセキュアコーディングの実践方法
より優れた安全なソースコードを書き、エクスプロイトや攻撃を防ぐ
ソフトウェアに依存し、相互につながった現代社会では、安全なアプリをリリースすることが開発者にとって最優先事項になっています。朗報なのは、より優れた安全なソースコードを書くことで、多くの潜在的なエクスプロイトや攻撃を防げることです。
ソースコードとは、アプリケーションの動作を定義し、その機能を実装する一連の命令です。いわば、アプリケーションのDNAです。ソースコードは命令に変換され、コンピューターによって読み取られ、実行されます。
セキュアコーディングとは?
セキュアコーディング(セキュアプログラミングとも呼ばれます)とは、潜在的な脆弱性(データの漏えいや、標的システムへの被害につながる可能性のあるもの)を防ぐため、厳格な原則に従って高水準言語でコードを書くことです。
セキュアコーディングは、コードを書き、コンパイルし、アプリケーションとしてリリースするだけではありません。セキュアプログラミングを実践するには、信頼性と安全性に優れたITインフラストラクチャを基盤として、安全なハードウェア、ソフトウェア、サービス、プロバイダーを活用したセキュアな開発環境を整える必要があります。
セキュアコーディングが重要な理由
金融取引のオンライン化もますます進んでいます。セキュリティインシデントは、アプリケーションの基盤となるソフトウェアの奥深くに原因があることが多く、企業にも個人にも深刻な影響を及ぼす可能性があります。金融、医療、エネルギー、運輸などの重要な業界で安全でないコードが使われると、金銭的・物的損害、市場操作や窃盗、さらには身体的被害や死亡につながるおそれがあります。

その危険は現実のものです。近年の報道では、私たちが使うソフトウェアの多くがいかに安全でないかが明らかになっています。豊富なリソースと知識を持つ大手組織でさえ、深刻なデータ侵害を経験しています。消費者や企業にソフトウェアを提供する企業にとって、顧客の信頼は非常に重要であり、その信頼を失えば業績に影響しかねません。そのため、セキュアコーディングの実践は、こうした組織にとって最優先事項でなければなりません。
開発を加速するアプリケーションセキュリティ
Snykのアプリケーションセキュリティソリューションについて詳しく知るか、開発者向けセキュリティツールのバイヤーズガイドをご覧ください。
セキュアコーディングの手法を始める
セキュアプログラミングの実践やセキュリティ全般では、プロセス全体をできるだけシンプルに保つ(KISS)ことが大切です。手順が複雑だと、結果にばらつきが出たり、最悪の場合は完全に無視されたりする可能性があります。車輪の再発明は避け、実績のあるセキュリティとセキュアコーディングのベストプラクティスに従いましょう。OWASP Foundationは多くの有用なリソースを提供しています。その一つであるOWASP Top 10では、最も一般的なセキュリティリスクを取り上げており、取り組みを始めるのに最適です。
認証と認可を含むアクセス制御は、システムを保護するための基本的な要素の一つです。
強力な暗号化の徹底も、システムの安全性を保つうえで重要です。暗号化の実装に役立つライブラリは数多く公開されているため、独自のコードを最小限に抑えられます。ただし、標準的なアルゴリズムとライブラリのみを使用することが重要です。また、FIPS準拠が必要な場合は、検証済みのライブラリだけを使用してください。
シークレット管理も重要なセキュリティ対策です。シークレットの管理に役立つ各種ツールを利用するかどうかにかかわらず、パスワードやアクセスキーなどのシークレットをコードにハードコードしたり、コードリポジトリにアップロードしたりしてはいけません。
これらの対策はシステムを保護する最初の防御線となりますが、コードそのものの安全性を高めることも欠かせません。
セキュアコーディングのチェックリスト:5つのベストプラクティス
コードの圧縮と難読化:コードへのアクセスや内容の把握を難しくすることで、攻撃者を遠ざけられる可能性があります。JavaScriptでは、コードの圧縮が一般的に行われています。圧縮では、コードから空白や改行を取り除きます。主な目的はコードファイルの容量を減らしてパフォーマンスを高めることですが、公開されたコードを読みづらくする効果もあります。さらに効果的な類似の手法として、コードの難読化があります。これは、人が読めるコードを理解しにくいテキストに変換する方法です。
近道を避ける:開発者は、コードをより早く本番環境にリリースするために、手順を省きたくなることがあります。しかし、セキュリティに深刻な影響を及ぼすおそれがあります。たとえば、ハードコードされた認証情報やセキュリティトークンがコメントとして残されていると、攻撃につながることがあります。アプリをリリースするずっと前に、こうした情報を削除しておく必要があります。しかし、コードベースが大きくなり、厳しいリリーススケジュールのなかで動作するコードを届けるプレッシャーが増すほど、セキュリティ上の不備が生じる可能性も高まります。
自動スキャンとコードレビュー:クロスサイトスクリプティング(XSS)やSQLインジェクションをはじめとする攻撃は、コードのセキュリティ脆弱性を悪用する可能性があります。XSSもSQLインジェクションも、データとコマンドを区別できないコードの弱点を突く攻撃です。XSSは、ドメイン上で悪意のあるコードを実行します。SQLインジェクションは、内部のデータストアからデータを盗んだり、改ざんしたりしようとします。定期的なセキュアコードレビューと、こうした脆弱性を検出する自動ツールを組み合わせることで、攻撃の防止に役立ちます。
既知の脆弱性があるコンポーネントを避ける:パッケージとして利用されることの多いオープンソースのコンポーネントやライブラリは、開発者の時間と労力を節約できます。一方で、悪意ある攻撃者が侵入する一般的な経路であり、脆弱性や潜在的なエクスプロイトの温床にもなります。既知の脆弱性があるコンポーネントの使用を避け、開発プロセス全体を通じて利用中のコンポーネントに新たな脆弱性がないか継続的に監視することで、コードの完全性を保てます。
監査とログ記録:十分なログ記録と監視機能を備えたソフトウェアであれば、本番環境にコードをデプロイした後も、潜在的なインシデントを検知できます。
Snykは、コードのセキュリティをスキャンして監視できる、優れた無料ツールの一つです。オープンソースの脆弱性スキャナーまたはSnyk Codeを使えば、開発者に使いやすい方法でコードの脆弱性を発見し、修正できます。
全体像を捉える
基本を押さえたら、コードをさらに安全にするための追加策に取り組みましょう。まずは多層防御のアプローチを採用することです。ベストプラクティスに従い、安全なコードを書くことは、その一部にすぎません。
組織内に セキュリティ文化を築くことも、非常に重要です。そのためには、開発者、IT部門、組織の経営陣、そして社内外の関係者を教育する必要があります。また、脅威モデルを積極的に作成し、潜在的なリスクの管理と修復に向けて計画を立てましょう。OWASPやHave I Been Pwnedなど、役立つ情報源が数多くあります。
セキュアソフトウェア開発ライフサイクル(SSDLC)を構築することも、セキュアプログラミングの実践とコード品質をソフトウェア開発プロセスに組み込むための重要なステップです。新しいアプリケーションの要件収集(または既存アプリへの機能追加)から、開発、テスト、デプロイ、保守に至るまで、あらゆる段階でアプリケーションを構築・維持します。この最初の「要件収集」段階から、プロジェクトの関係者は要件を確認し、特にソースコードに関わる潜在的なセキュリティリスクを洗い出す必要があります。
SSDLCやその他のセキュアコーディングの取り組みに自動化ツールを活用すると、時間と労力を節約できます。SASTはその一例で、開発サイクルのごく初期から導入できます。
従来の静的アプリケーションセキュリティテスト(SAST)ツールは、スキャンに時間がかかり、精度も低く、多数の誤検知を返すため、開発者の信頼を損ねるという課題があります。Snyk Codeなら、開発者の取り組みを効率的で実行可能なものにできます。リアルタイムのセマンティックコード解析により、コードを書いたその場で実行可能な提案が得られ、開発ワークフローのスピードと品質が向上します。
実績あるセキュアコーディングのガイドライン
ソフトウェアが日常生活に欠かせないものとなった今、その基盤となるソースコードのセキュリティと完全性は重要です。ここで取り上げたセキュアコーディングの手法の多くは新しいものではなく、経験豊富な開発者にはなじみのある考え方です。しかし、シンプルさを保ち、業界で広く認められているセキュアコーディングの標準や手順に従うことで、攻撃対象領域(侵入口の数を含む)を大幅に減らし、安全なソフトウェアを届けることができます。
セキュアコーディングに関するよくある質問
セキュアコーディングの実践とは何ですか?
セキュアコーディングの実践とは、潜在的なセキュリティ上の脆弱性を防げるようにコードを書くことです。これには、ソースコードとサードパーティ製ライブラリの両方を安全な状態に保つことが含まれます。
OWASPのセキュアコーディングとは何ですか?
OWASPのセキュアコーディングとは、Open Source Foundation for Application Securityが公開している、セキュアコーディングのベストプラクティスとガイドラインです。一般的なソフトウェアセキュリティの原則と、セキュアコーディングの要件の両方を示しています。
セキュアコードレビューとは何ですか?
セキュアコードレビューとは、コードに潜む脆弱性を特定し、修正するプロセスです。手動で行う方法、自動化ツールを使う方法、またはその両方を組み合わせる方法があります。
Snykを使って、既知の脆弱性がないかコードを継続的にスキャン・テストできます。無料のコードチェッカーツールもお試しいただけます。