2024年02月20日
静的コード解析のチェック結果対応時におさえておきたいポイントとは?
ここまで3回にわたり「状態チェック」、Salesforce Optimizer、ゲストユーザーアクセスレポートをご紹介しました。これらはいずれも Salesforce を適切に設定できているかどうかをチェックするためのツールでした。
Salesforce は豊富な標準機能を持つクラウドサービスですが、追加でプログラム開発をすることができるのも強みの1つです。しかし、読者の方々もご存知のとおり、プログラム開発にはクロスサイトスクリプティング(XSS)、SQLインジェクションといったセキュリティ上の脆弱性を生んでしまうリスクがあります。では、追加で開発したプログラムのセキュリティはどうやってチェックすれば良いのでしょうか? 今回は Salesforce 上で開発したプログラムのセキュリティをチェックするための静的コード解析ツールについて見ていきたいと思います。
静的コード解析ツールとは?
本題に入る前に「静的コード解析」について少し触れておきます。
静的コード解析とはコンピュータのソフトウェアの解析手法の一種で、実行ファイルを実際に実行することなく解析を行うことです。静的コード解析はソースコードに対して実施することが多いです。静的コード解析と似たものとして人間がソースコードの内容を確認するソースコードレビューがありますが、静的コード解析はソースコードレビューと比較して、機械的に実施でき人間のような見落としがないこと(※その反面誤検知はあります)や対象となるソースコードの量が多くなっても実施しやすいことが特徴です。
静的コード解析を行うツールはプログラミング言語ごとに様々なものがありますが、Salesforce について無償で利用できるものとしては以下のようなものが代表的です。
①Force.com Security Source Code Scanner
②Apex PMD
③Salesforce Code Analyzer
これらを1つずつ見ていきたいと思います。
Force.com Security Source Code Scanner
Force.com Security Source Code Scanner は今回挙げた3つの静的コード解析ツールの中では一番昔からあるものです。セールスフォース社が Checkmark 社とのパートナーシップを通じて提供しているサービスで、チェックの手順は以下のとおりです。
①ポータルサイトから解析を依頼する
https://security.my.salesforce-sites.com/security/tools/forcecom/scanner
②解析が完了すると解析結果を添付したメールが送られてくる
Force.com Security Source Code Scanner は大きく分けると、セキュリティとコード品質の2つの観点でチェックしてくれます。
・セキュリティ:XSS や SQLインジェクション(Salesforce の場合は SOQL インジェクションと呼びます)等につながる脆弱性がないか?
・コード品質:Salesforce のガバナ制限に抵触する可能性や保守性を悪化させる問題等がないか?
Force.com Security Source Code Scanner は良いサービスなのですが、1つ取り扱いが難しい点があります。それは「チェック可能なソースコードの総量が直近12ヶ月で36万行まで」という制約があることです。
プログラム開発のボリュームが少ない場合には問題になりませんが、プログラム開発のボリュームが多い場合、「チェック対象とするソースコードを個別に指定することができず毎回全量がチェック対象になる」というサービスの仕様と相まって、「上限をオーバーしてしまいチェックしたいタイミングで実行できない」、「上限を超過してしまうことが気になり気軽に何回もチェックできない」という問題を引き起こしてしまうのです。
Apex PMD
Apex PMD はマイクロソフト社が提供しているプログラムの開発環境である Visual Studio Code 上で静的コード解析が行えるツールです。Java の静的コード解析を行うことができるツールである PMDを ベースにしており、 Visual Studio Code の拡張機能として提供されています。Apex PMD の提供者は個人と思われますが、セールスフォース社の開発者向けサイトにおいて「推奨の拡張機能」の1つとして挙げられています。
推奨の拡張機能
https://developer.salesforce.com/tools/vscode/ja/vscode-desktop/recommended-extensions
Apex PMD の機能は Force.com Security Source Code Scanner と似ており、Apex と Visualforce についてセキュリティとコード品質の2つの観点でチェックができます。
Apex PMD には Force.com Security Source Code Scanner と異なりチェック可能なソースコードの総量に制限がありません。総量に制限がなく、また Visual Studio Code の拡張機能として提供されるツールであるため、開発中の早い段階から適用していくことができます。セキュリティ対策のシフトレフトができる点が魅力です。
Salesforce Code Analyzer
Salesforce Code Analyzer は セールスフォース社が提供する開発者向けツールである Salesforce CLI のプラグインです。Apex を含む複数のプログラミング言語の静的コード解析を行うことができます。現在は静的コード解析のエンジンとして PMD、ESLint、RetireJS をサポートしています。PMD は Apex PMD のところで登場しました。ESLint は Javascript の静的コード解析ができ、RetireJS は脆弱性のある Javascript ライブラリを抽出します。 Salesforce Code Analyzer は Github で公開されていますので、詳細はそちらをご覧ください。
Github Salesforce Code Analyzer
https://forcedotcom.github.io/sfdx-scanner/
Salesforce Code Analyzer は Apex PMD と比較すると ESLint や RetireJS を使用して Javascript の静的コード解析ができるのがメリットです。Salesforce の Lightning コンポーネント(Aura、LWC)の開発では Javascript を使用します。Lightning コンポーネントの開発が増えるにつれて Apex PMD では静的コード解析でカバーできる範囲が減っていってしまいます。そのため、一般的に見ると今後は Salesforce Code Analyzer を使用するケースが増えていくと推測します。
余談ですが、Salesforce 向けのアプリケーション(AppExchange アプリケーション)を開発する場合は Salesforce Code Analyzer で静的コード解析を実施しその結果をセールスフォース社に提出する必要があります。
静的コード解析ツールのチェック結果にどう対応する?
最後に静的コード解析ツールのチェック結果をどう評価してどう対応していくかを考えます。
Salesforce 向けの静的コード解析ツールは、一般的な静的コード解析ツールと同様にソースコード上の様々な問題をチェックする機能を持っています。チェックされる項目は少なく見ても30個程度はあり、その結果「問題あり」として検出される項目は少なくありません。また、静的コード解析ツールの宿命として誤検知が発生することも避けられません。
そのため、静的コード解析ツールによって検出されたすべての問題に対応できるのが理想ですが、現実的にはすべて対応するための工数を取れない場合もあるかと思います。
この課題に対しては「静的コード解析ツールでチェックできる内容に優先順位を付け、優先度の高いものから重点的に対応する」ことをおすすめします。
特に、セキュリティ上の脆弱性を生じさせうる内容のチェックや、本番環境でガバナ制限エラーのような障害を発生させうる内容のチェックは優先して実施・対応すべきと考えます。
加えて、静的コード解析は一度実施して終わりではなく、ソフトウェアのライフサイクル全体にわたって繰り返し実施されることが多いため、それを考慮した運用を考えておきたいところです。具体的に言うと、静的コード解析で「問題あり」として検出されたものの、内容を確認した結果「問題なし」となった項目をどうするかです。何もしなければ次回静的コード解析を行ったときにこの項目は再度「問題あり」として検出され、また内容を確認しなければならなくなります。
この手間が馬鹿にならないので、「再度『問題あり』として検出されないようにする」、「再度『問題あり』として検出されても効率的に対処できる仕組みを準備しておく」などの対応が必要です。
まとめ
今回は Salesforce 上で開発したプログラムのセキュリティをチェックするための静的コード解析ツールについて見てきました。
・Salesforce 上で開発したプログラムにもクロスサイトスクリプティング(XSS)、SQLインジェクションといったセキュリティ上の脆弱性を生んでしまうリスクがあり、その対策として静的コード解析ツールは有効
・無償で利用できる代表的な静的コード解析ツールとして、Force.com Security Source Code Scanner、Apex PMD、Salesforce Code Analyzer がある
・静的コード解析ツールにより「問題あり」として検出される項目は少なくないため、チェックできる内容に優先順位を付け優先度の高いものから重点的に対応するのがおすすめ
・静的コード解析は一度実施して終わりではなく、ソフトウェアのライフサイクル全体にわたって繰り返し実施されることが多いため、それを考慮した運用を考えておきたい
次回はこの連載のまとめをしたいと思います。