セキュリティ対策に役立つVS Code拡張機能トップ5
2023年8月24日
0 分で読めます
高品質なソフトウェアアプリケーションの開発は、多くの要素を組み合わせて動作するソリューションを作り上げる必要があるため、困難を伴うことがあります。だからこそ、開発者にはできる限りのサポートや利便性が必要です。特に、アプリケーションのセキュリティを確保する場合はなおさらです。
Visual Studio Code(VS Code)は、さまざまな理由から、最も人気のあるオープンソースのコードエディターのひとつです。Windows、macOS、Linuxという主要な3つのオペレーティングシステム(OS)に対応し、好みに合わせて簡単に設定できます。何より、拡張機能をインストールして機能を強化できます。
VS Codeには、シンプルなユーザーインターフェース(UI)の変更から高度な脆弱性検出まで、多種多様な拡張機能があります。この記事では後者に焦点を当て、より安全なコードの作成とセキュリティのベストプラクティスの維持に役立つ、VS Code拡張機能トップ5をご紹介します。
1. 1Passwordでシークレットとパスワードを安全に保管
パスワードやシークレットを平文でコードに含めると、機密情報が簡単に漏えいするおそれがあるため、重大なセキュリティリスクとなります。こうした値は外部の保管庫に保存し、変数を使ってアクセスするのがベストプラクティスです。
しかし、コードを書いている最中に、コードエディターとパスワード保管庫を何度も行き来して、新しいシークレットやパスワードを作成したり、既存のシークレットの値を確認したりするのは面倒です。1Password for VS Codeは、VS Codeエディターから直接保管庫にアクセスできるようにして、この問題を解消する拡張機能です。
1Passwordの主な機能をご紹介します。
まず、コマンドパレットを使ってVS Codeから新しいパスワードを作成できます。値を選択して、`1Password: Save in 1Password`コマンドを実行するだけです。

これにより、アイテムにラベルを付けて自動的に1Passwordに保存し、コード内の値を参照に置き換えることができます。
シークレットの自動検出を使えば、この機能をさらに活用できます。1Password VS Code拡張機能は、コードや環境設定ファイル内にあるシークレットやパスワードと思われる値を検出し、強調表示します。

VS CodeのCodeLens機能は、コードエディター内でコード要素間の関係を表示する強力なツールです。これを使うと、選択した項目の上にSave in 1Passwordと表示されます。上の画像のように、この項目から`Save in 1Password`コマンドにすばやくアクセスできます。
また、`1Password: Get from 1Password`コマンドで保管庫内の既存アイテムを取得し、`1Password: Generate password`コマンドで新しいアイテムを作成することもできます。こうした機能を使えば、シークレットの値を扱う際にコードエディターを離れて作業を中断する必要がなくなり、開発者の負担を軽減できます。
さらに、1Password VS Code拡張機能では、コード内で参照されている保管庫内のシークレットを確認し、プレビューできます。シークレットにカーソルを合わせると現在の値が表示されますが、対象は機密性の低いシークレットに限られます。パスワードなどの機密情報は、安全を保つためプレビューできません。
2. Decompilerで実行ファイルを逆コンパイル
開発者がコンパイル済みコードを調査するために、逆コンパイラーを使ってソースコードに戻すことがあります。逆コンパイルはセキュリティ分野で役立つ手法です。セキュリティの専門家は、ソフトウェアの安全性を評価したり、マルウェアの挙動を把握したりできます。そのためには、実行ファイルの種類に応じた専用ソフトウェアや別のソフトウェアが必要になることがよくあります。
Decompilerは、逆コンパイル機能をVS Codeに追加する拡張機能です。ファイルを右クリックしてDecompileを選ぶだけで、Windows PE、Linux ELF、IOS、JARファイル、Android APKなどのバイナリー実行ファイルをVS Code内で逆コンパイルできます。

逆コンパイルされたファイルはDecompilerフォルダーに保存されます。JARファイルの場合、JARの内容がフォルダーやファイルに展開され、次の画像のように元のJavaファイルにアクセスできます。

逆コンパイルによって、バッファーオーバーフローや競合状態など、コード内のセキュリティ上の脆弱性が明らかになることがあります。こうした脆弱性を見つけることで、ソフトウェアが安全かどうかを判断し、リリース前に修正するための対策を講じられます。
また、ライブラリやAPIなど、コンパイル済みの状態で配布されることが多いサードパーティー製コードの挙動を理解するためにも、逆コンパイルを活用できます。これらのコンポーネントを逆コンパイルすれば、開発プロジェクトでの適性を評価し、セキュリティ上の脆弱性を特定できます。
3. Cloakで機密情報を隠す
シークレットやパスワードを含む環境設定ファイルを扱う開発者は、それらを他人に見られないようにしたいものです。しかし、共同作業中や、カフェなど周囲の人に画面を見られる場所では、それが困難です。常に周囲を気にしたり、ファイルを開かないようにしたりして値を保護するのは煩雑で、生産性も損なわれます。
以下は、APIキーとパスワードを含む.envファイルの例です。画面を見られる人であれば、誰でも変数の内容を読み取れます。

この問題を解決するには、VS Code拡張機能のCloakを利用できます。Cloakは、環境設定ファイルを開いているときに、シークレットの値が画面に表示されないようにするための拡張機能です。Cloakを有効にするには、VS Codeのコマンドパレットから`Cloak: Hide Secrets`コマンドを実行します。画面上の値が空白になります。

この拡張機能はファイルを一切変更しません。シークレットの値をマスクして、画面に表示されないようにするだけです。Cloakを使えば、外部の環境でシークレットやパスワードを他人に見られるのを防ぎ、アプリケーションのセキュリティを維持しながら作業を続けられます。
4. ESLint拡張機能でセキュリティのベストプラクティスを実践
JavaScriptプロジェクトのセキュリティ対策では、最新の拡張機能の多くはセキュリティ上の問題を検出するだけです。しかし開発者には、ソフトウェアデリバリーパイプラインに統合し、セキュリティチェックを自動化できるツールが必要になることも少なくありません。
ESLint extensionは、JavaScriptの記述時にVS Codeで使えるオープンソースのリンティングツールです。JavaScriptは動的で型付けが緩やかなため、開発者のミスが起きやすいことで知られています。ESLintはコードを解析し、構文が正しく、ベストプラクティスや標準に準拠していることを確認することで、こうした問題を軽減します。コード内の構文エラーを強調表示するため、すばやく見つけて修正できます。さらに、バグやコードの潜在的な脆弱性の検出にも役立ち、コードの完全性を高めます。
ESLintは、特にチームでのプロジェクトにおいて、コード標準を徹底するのに適しています。この拡張機能を使えば、チームメンバー全員が、共通のスタイルや標準を定めた自動ルールに従って作業できます。
次のコードスニペットを例に見てみましょう。

ここでは、定数greetingに二重引用符が使われている一方、`secondGreeting`には一重引用符が使われています。また、セミコロンで終わる行とそうでない行があることにも注目してください。各行の構文は正しいため、このような細かな違いがあってもコードは問題なく実行されます。
しかし、共有プロジェクトに取り組む際には、チームメンバー全員で規約を統一することが大切です。ESLintではルールを定義するか、ESLintパッケージのデフォルトのリンティング設定を使って、規約を徹底できます。設定をカスタマイズすることも可能です。

ESLintには独自のプラグインもあり、security pluginを使うと、安全でない正規表現や`eval`関数の使用など、不適切なセキュリティ慣行を検出できます。このプラグインをVS Codeで使えば、開発中にコードをチェックできるため、ビルドパイプラインでコードを実行する前に、アプリケーションの安全性を確保し、問題を解決できます。
5. Snykでコードとサードパーティーパッケージをスキャン
安全なソフトウェアシステムを構築するには、コード内の脆弱性を検出して修正することが欠かせません。悪意のある攻撃者に悪用される前に、すばやく対処する必要があります。しかし、コードエディターと脆弱性スキャナーを頻繁に行き来するのは、面倒で時間もかかります。
Snyk VS Code extensionを使えば、脆弱性のスキャンと修正をVS Codeエディターから直接行えるため、この問題を解消できます。この拡張機能は、コード内の次の種類の問題をスキャンします。
オープンソースのセキュリティ — プロジェクトで使用しているオープンソースの依存関係にあるセキュリティ上の脆弱性。
コードセキュリティ — コード内のセキュリティ上の脆弱性。
コード品質 — コードの品質。
Infrastructure as Code(IaC)のセキュリティ — KubernetesやTerraformなどのIaCテンプレートファイルにある設定上の問題。
プロジェクトフォルダーを開くと、Snyk Codeのコード解析が自動的に実行されます。コマンドパレットから`Snyk: Rescan`を実行すれば、手動スキャンも簡単に行えます。

Snyk拡張機能は、コードの記述中に潜在的な脆弱性を強調表示して検出する機能も備えています。問題の内容や深刻度に加え、予防のためのベストプラクティスも提示します。

この拡張機能では、コードに対して実施した各種スキャンの結果を一覧で確認できます。

リアルタイムの脆弱性検出と詳しい修正手順を備えたSnyk VS Codeなら、ワークフローを妨げることなく、セキュリティ上の問題に優先順位を付けて対処できます。
まとめ
優れた開発者は、安全でクリーン、かつ保守しやすいコードを目指します。今回紹介した5つの拡張機能は、その実現に役立ちます。1Passwordはパスワードをコードに保存せずに管理し、第三者から保護します。ESLintは、構文が正しく、バグがなく、ベストプラクティスに準拠したコードの作成を支援します。Decompilerを使えば、実行ファイルのソースコードを評価し、マルウェアが含まれていないか確認できます。Cloakは機密情報が画面に表示されるのを防ぎます。そしてSnyk VS Code拡張機能は、コードの脆弱性をすばやく正確にスキャンします。
VS Code拡張機能をインストールする前に、その拡張機能と提供元の企業について調べることが重要です。拡張機能はセキュリティ対策に役立つ一方、悪質なものを使うと、アプリケーションのシークレットやパスワードが危険にさらされるおそれがあります。
パスワードの保管をサードパーティーに無条件で任せることは、安全性に関する責任をその提供元に委ねることになります。そのため、特にパスワードやシークレットの管理に関わる拡張機能は、インストール前に提供元を確認することが大切です。
より安全なアプリケーションを作るための万能な解決策はありません。プロジェクトによっては、これらの拡張機能の一部が特に適していたり、関連性が高かったりするでしょう。それぞれに独自のメリットがあり、VS Codeエディターをさらに便利に使えるようになります。
ぜひ今日からこれらの拡張機能を試して、その効果を実感してください。



