経験不要!安全なアプリケーションを構築するための5つのヒント
2022年12月27日
0 分で読めますほとんどの開発者はセキュリティの専門家ではありません。セキュリティを軽視しているからではなく、1日に使える時間には限りがあり、機能開発が優先されるからです。幸い、安全なアプリを構築するために、開発者がセキュリティの専門家である必要はありません。必要なのは適切なツールだけです。
この記事では、作成するコードや使用する依存関係に潜むセキュリティ脆弱性を見つけて修正し、スキルを高めるのに役立つ、Snykの開発者向けセキュリティツールをご紹介します。ここで「開発者向けセキュリティ」と表現したのは、Snykが開発者のために特別に作られたセキュリティツールだからです。それでは始めましょう。
1. IDEから直接、安全でないコードを見つけて修正する
これまでの経験とは違い、アプリケーションセキュリティの静的解析は、IDEから直接実行でき、高速で役立ち、すぐに利用できます。コードの大半をIDEで書いたり読んだりする開発者が、コードを書いている最中にそのコードの脆弱性に関する情報も得られるのは、当然のことです。
コードを書きながら静的解析の結果や、実際に役立つ修正方法を確認できれば、貴重な時間を節約できます。問題を解決するために、後からコードベースに戻ってリファクタリングやセキュリティ対策、制御を適用する必要はありません。開発者なら誰もが避けたい、作業のコンテキストを切り替える手間を省けます。
次のスクリーンショットは、VS Code IDEでSnyk拡張機能が動作している様子です。オープンソースとコードのセキュリティ脆弱性を検出しています。

まず、脆弱性の原因となるコード行に焦点を当て、右側のパネルに詳細情報を表示します。この例では、プログラムのコードを通るコードパスで(静的コード解析によって)パストラバーサルのコード脆弱性が検出されました。さらにその下には、オープンソースプロジェクトで同様の脆弱性がどのように修正されたかをもとに、3つの候補から1つのコード修正案が表示されます。
2. CLIを使ってセキュリティチェックをコミット前やCIに組み込む
プルリクエストを出す前に、ESLintやGitHub Actionsでテストを実行しているかもしれません。それは素晴らしいことです!Snyk CLIを使って(npm install -g snyk)、コミット前やマージ前のCIワークフローで、深刻度の高いコードの問題を検出しましょう。
このスクリーンショットは、Snyk CLIでコードテストを実行し、コマンドラインのフラグで深刻度の高いコード関連の問題だけに絞り込んだ、ターミナル上のSnykスキャン結果です。

Snyk CLIはsnyk code testによる静的コード解析を実行し、5件の脆弱性を検出しました。そのうち3件はNoSQLインジェクション(SQLインジェクションの一種)、2件はアプリケーションのコードにハードコードされたシークレットでした。どれくらい時間がかかったのか気になる開発者のためにお伝えすると、静的コードセキュリティスキャンは1分もかからずに完了しました。コーヒーを買いに行く時間にも満たないほどです。
情報:セキュリティを目的として静的コード解析を行うことを、静的アプリケーションセキュリティテスト(SAST)と呼びます。
3. アプリケーションの依存関係を簡単に保護する
依存関係が増えるほど、アプリケーションのセキュリティリスクも高まります。コード行数やソフトウェア(ライブラリ、パッケージなど)が増えることで、安全でない脆弱性や設定が入り込む可能性が高まり、アプリケーションが危険にさらされるためです。
開発者は、サードパーティ製ライブラリ(および関連するライセンス)を利用することで、開発時間とセキュリティやメンテナンスのリスクを実質的に引き換えています。多くの開発者が受け入れているトレードオフだからこそ、サードパーティの依存関係を利用しながら安全を保つためのツールが重要です。
安全を保つために、VS Code用Snyk拡張機能はpackage.jsonファイル(JavaScriptプロジェクトで使用されるパッケージのメタデータファイル)に加えて、requireやimport文にも注釈を付け、アプリケーションで使用しているサードパーティ製npm依存関係の脆弱性によるリスクを示します。
こちらもVS Code IDEのスクリーンショットです。今度は、JavaScriptプロジェクトで使われるpackage.jsonマニフェストファイルに焦点を当てています。

JavaScriptプロジェクトのこの依存関係マニフェストファイルは、npmパッケージマネージャーによって管理されます。SnykのVS Code拡張機能はIDE内のコード行に注釈を付け、インポートされたサードパーティ製オープンソース依存関係に対処すべき脆弱性があることを示しています。
4. StackOverflowなどの脆弱なコードを使わないよう注意する
Snykのオンラインコードチェッカーにコードスニペットを貼り付けてスキャンし、安全でないコードがないか確認してから、必ず自分のアプリケーションで使いましょう。この無料ツールは現在、Python、JavaScript、Go、Java、PHPなどに対応しています。
以下の動画では、人気のStackOverflowの質問で、Node.jsの基本的な静的HTTPファイルサーバーを構築するのに役立つコードが紹介されています。しかし、そのコードをコピーして貼り付け、実行しても安全だと、どうすれば判断できるでしょうか。

同じ静的ファイルサーバーのコードスニペットをSnykのコードチェッカーに貼り付け、JavaScriptコードのセキュリティ問題をスキャンすると、2件の問題が見つかります。そのうち1件は、深刻度の高いパストラバーサル脆弱性です。
5. 学び続ける
開発者にとって、急速に進化するテクノロジーに追いつくことは毎日の努力が必要ですが、その価値があります。同じように、安全なコーディングのスキルを磨き続けることも大切です。Snyk Learnで、アプリケーションセキュリティのインタラクティブなレッスンに取り組んでみましょう。

Snyk Learnは、開発者が実践的でインタラクティブな短いレッスンを通じて、アプリケーションセキュリティのスキルや知識を身につけられる無料のオンライン学習リソースです。OWASP Top 10のすべてのリスクに関するレッスンのほか、コードインジェクション、オープンリダイレクト、プロトタイプ汚染など、特定のセキュリティ課題を扱うレッスンもあります。また、Java、Python、JavaScript、Go、PHPなど、言語やエコシステムに特化したガイドも用意されています。
VS Code用Snyk拡張機能をインストールし、セキュリティの知識を身につけるためにSnyk Learnで学ぶ時間を確保することを強くおすすめします。
セキュアコーディングのスキルを向上
いつでもどこでも学べる、無料で質の高い開発者向けセキュリティ教育。
