In this article
ソースコードのセキュリティ脆弱性を見つける方法
ソースコードのセキュリティ脆弱性を確実に見つける手順
ソースコードとは、ソフトウェアプログラムの元となる形式で、特定のプログラミング言語で記述された、人が読める命令で構成されます。ソフトウェアのソースコードには一般に、開発者が記述した独自のコード、オープンソースパッケージやコンテナ、そしてクラウドインフラの管理・プロビジョニングに使用するスクリプトや設定ファイルであるInfrastructure as Code(IaC)が含まれます。
ソースコードは開発サイクルの早い段階でセキュリティ脆弱性を評価し、修正コストが膨らむ前に潜在的な問題を見つける必要があります。この記事では、ソースコードのセキュリティ脆弱性を見つけて修正する方法を詳しく解説します。
コードレビューを実施する
ソフトウェアのセキュリティと信頼性を確保するには、開発者が記述した自社開発のカスタムコードに対してコードレビューを実施することがベストプラクティスです。コードレビューでは、設計、アーキテクチャ、コーディングスタイル、ドキュメントなど、コードのさまざまな側面を調査・分析します。
一般的な脆弱性を特定する
コードレビューを行う際は、悪意のある攻撃者に悪用される可能性のあるセキュリティ脆弱性を探すことが重要です。
一般的な脆弱性には、次のようなものがあります。
クロスサイトリクエストフォージェリ(CSRF):Webサイト上でユーザーを欺き、意図しない操作を実行させる脆弱性です。
安全でないパスワードの保存:パスワードが簡単にアクセスできる平文、または攻撃者が容易に元に戻せる形式で保存される脆弱性です。
不十分な入力検証:ユーザー入力が適切に検証されず、さまざまなセキュリティ上の問題が発生する脆弱性です。
インジェクション脆弱性を特定する
コードレビュー担当者は、ソースコードにインジェクション脆弱性がないかも確認する必要があります。この種のセキュリティ脆弱性は、信頼できないデータが適切な検証やサニタイズを行わずにアプリケーションへ渡されると発生します。インジェクション脆弱性を悪用すると、攻撃者がアプリケーションに悪意のあるコードやコマンドを注入できます。
一般的なインジェクション脆弱性には、次のようなものがあります。
SQLインジェクション:攻撃者がアプリケーションのデータベースクエリに悪意のあるSQLコードを注入し、データベース内のデータの読み取り、変更、削除を可能にする手法です。
コマンドインジェクション:攻撃者がアプリケーションのコマンドラインインターフェースやシェルに悪意のあるコマンドを注入し、サーバー上で任意のコードを実行できるようにする手法です。
クロスサイトスクリプティング(XSS)インジェクション:攻撃者が他のユーザーが閲覧するWebページに悪意のあるスクリプトを注入し、機密データを盗んだり、その他の悪意ある操作を実行したりする手法です。
LDAPインジェクション:攻撃者がアプリケーションのLDAPクエリに悪意のあるLDAP文を注入し、LDAPディレクトリへの不正アクセスやその他の悪意ある操作を可能にする手法です。
XMLインジェクション:攻撃者がアプリケーションのXMLパーサーに悪意のあるXMLデータを注入し、XMLファイル内のデータの読み取り、変更、削除を可能にする手法です。
セキュリティを確保するため、開発者はソースコードのレビュー時にインジェクション脆弱性を探し、アプリケーションに追加する前にすべてのユーザー入力を適切に検証・サニタイズして防止する必要があります。
静的コード解析を活用する
静的アプリケーションセキュリティテスト(SAST)は、セキュリティ脆弱性の検出を目的とした静的コード解析の一種です。侵入テストや動的アプリケーションセキュリティテストなど、他の種類のセキュリティテストとは異なり、SASTではアプリケーションを実行する必要がありません。そのため、アプリケーションのデプロイ前、ソフトウェア開発プロセスの早い段階で実施できます。
SASTは次の手順で行われます。
コードスキャン:SASTツールがコードをスキャンし、コーディングミス、コーディング規約違反、セキュリティ脆弱性などの品質上の問題を検出します。
問題の特定:ツールが潜在的な問題を特定し、レポートやダッシュボードに表示します。
優先順位付け:ツールによっては、深刻度やアプリケーションへの影響に基づいて問題に優先順位を付けます。
修正:最後に、開発者が特定された問題を修正します。
開発者ファーストのSASTツールがもたらすメリット
SASTツールは、アプリケーションのソースコードを解析し、潜在的なセキュリティ脆弱性を検出します。開発者ファーストのSASTツールは、開発者を念頭に置いて設計され、ワークフローの最適化を目指しています。開発者ファーストのSASTツールには、次のようなメリットがあります。
セキュリティ脆弱性の早期検出:ソフトウェア開発ライフサイクルの早い段階でセキュリティ脆弱性を検出できるため、修正が容易になり、コストも抑えられます。
容易な統合:開発者ファーストのSASTツールはスムーズに統合できるよう設計されており、開発者はワークフローに簡単に取り入れられます。
開発サイクルの短縮:SASTツールを使うことで、開発者は不具合を減らしながら、より迅速にソフトウェアを提供できます。
コストの削減:SASTツールは、不具合を発見するのが遅れた場合にかかるコストの削減に役立ちます。
コード品質の向上:SASTツールは、セキュリティ脆弱性やその他の不具合につながる可能性のある問題を特定し、コード品質を高めます。
DevSecOpsとSnyk:安全な開発を最初から実現する開発ツール
開発手法は根本的に変化しており、セキュリティへのアプローチも変える必要があります。コードと脅威の規模が拡大する中、従来の時間がかかるサイロ化されたアプローチでは、もはや対応しきれません。より優れた戦略は、連携して機能するプラットフォームやツールを活用し、ソフトウェアアプリケーションのセキュリティを脅かす脆弱性を迅速かつ確実に検出することです。Snykは、統合された包括的なソリューションを実現する製品を提供しています。
Snyk Open Source
Snyk Open Sourceを使えば、アプリケーションで使用しているオープンソースライブラリのセキュリティ脆弱性を検出して修正できます。また、これらのライブラリに関連するライセンス上の問題や、ライブラリに起因する問題も検出して解決できます。Snyk Open Sourceは、複数の主要なプログラミング言語とプラットフォームに対応しています。
Snyk Code
AIを活用したコードチェッカーがコードを調べ、潜在的なセキュリティ問題を検出。IDEから実行可能な推奨事項を提示し、脆弱性を迅速に修正できるよう支援します。
Snyk Container
コンテナとKubernetesのセキュリティにより、開発者とDevOpsチームはSDLC全体を通じて脆弱性をすばやく検出・修正できます。Snyk Containerを使えば、セキュリティを最初から組み込んだイメージを作成できます。
Snyk IaC
Snyk IaCは、デプロイ前の開発ワークフローでInfrastructure as Code(IaC)のセキュリティとコンプライアンスを自動化します。また、デプロイ後に不足しているリソースや構成のずれを特定し、リスクの最小化を支援します。
Snykアカウントを作成して、SQLインジェクションなど、コード、依存関係、コンテナ、クラウドインフラの脆弱性を見つけて修正しましょう。