Snyk（スニーク）って、Salesforceでも使えるの？（前編）*

Snykを使ってコードをセキュアにした記事を投稿しよう！ by Snyk Advent Calendar 2023　: 3日目に投稿します。



# はじめに

[【無料トライアル】セキュリティの「めんどくさい」を解決したい！デベロッパーファーストのSnyk入門編](https://qiita.com/SnykSec/items/aa80a976eb17299fff62)を読むと

>**JavaScript**、Java（Gradle、Maven）、.NET、Python、Golang、Swift、Objective-C（CocoaPods）、Scala、Ruby、PHP、Bazelなど、Snykは以下のような様々な言語をサポートしています。

とあったので、Apexは無いなぁって思っていたら... 探してみると既にSalesforce自体で使われている感じですね。

それどころか... 「当社のシリーズ B 以来の初期投資家として、私たちはパートナーシップを深め、開発者セキュリティのリーダーとして Snyk をサポートし続けることに興奮しています。」と書かれてました。

+ [Snyk Secures $75 Million in Additional Funding](https://snyk.io/news/snyk-secures-75-million-in-additional-funding/)

英語の記事しか発見できなかったので、私の学習になるように　まずは自動翻訳してみます。

また、Trailblazer CommunityでSnykという単語を検索してましたが、トレイルヘッドに２つ出てくるだけで、ユーザからの質問も見つけられませんでした。ユーザサイドでは使っていないのだろうか？


# Salesforce が Snyk スキャンを使用してオープンソース パイプラインを保護する方法

 [How Salesforce secures its open source pipeline with Snyk scanning](https://snyk.io/case-studies/salesforce/)

+ **課題:時間のかかる OSS セキュリティ レビュー プロセスの自動化**

革新的なソフトウェア会社として、Salesforce はオープンソース ソフトウェア (OSS) の形でコミュニティに貢献できると信じています。ただし、従業員やチームが自分の作品をオープンソース化したい場合は、セキュリティ、法的要件、その他多くの要件のレビューを通過する OSS リクエストを送信する必要があります。毎月約 20 件の OSS リクエストがあり、静的分析レポートをレビューして結果を修正するこの手動プロセスが、OSS リリースのボトルネックとなっていました。

>「ご存知のとおり、手動レビューには時間がかかります」と Salesforce の製品セキュリティ エンジニア、Amol Deshpande 氏は述べています。「セキュリティ エンジニアには複数の責任があり、特に時間に制約のあるリクエストの場合、毎月多数のレビューを実行するのは非常に困難になります。このプロセスを自動化して、エンジニアの時間を節約できる可能性があると考えました。」

+ **解決策:プラグアンドプレイのセキュリティ スキャンの実装**

Salesforce は、OSS セキュリティ レビュー プロセスの合理化を検討する際、Snyk を利用してセキュリティ スキャンを実行し、結果を自動的に収集するプラグアンドプレイ セキュリティ フレームワークを作成することにしました。各レビュー リクエストは、内部タスク追跡プラットフォーム内にチケットを作成します。チケットは Webhook によって取得され、RabbitMQ のキューに追加されます。

Snyk は堅牢な API を備えており、このキューから取得し、添付されたコード リポジトリの脆弱性をスキャンし、発見結果のレポートを元のチケットに送信します。エンジニアは、セキュリティ スキャン ツールを自分で操作する必要がなく、スキャン結果をチケット内で直接利用できます。つまり、セキュリティ エンジニアは発見レポートをすぐに確認して、リクエストを承認したり、問題を修正したりすることが数分で完了します。

>「エンジニアが来るたびに、チケットには脆弱性レポートが添付されています」とデシュパンデ氏は説明しました。「そのため、彼らはレポートを見てリクエストを承認したり、エンジニアリング チームと協力して調査結果を修正したりすることができます。これにより、エンジニアはスキャンの実行やセキュリティ ツールの使用方法の理解に時間を費やす必要がなくなり、時間を大幅に節約できます。」

+ **Snyk オープンソース セキュリティ スキャン**

ソフトウェアをオープンソース化する場合、組織自体へのリスクを軽減するためにセキュリティ スキャンが不可欠です。悪意のある攻撃者が公開されているコードをレビューして、OSS に依存する独自アプリケーションへの攻撃を仕掛ける可能性があるためです。Apache Struts、Tomcat、OpenSSL などの広く使用されている OSS はすでに侵害されており、OSS の脆弱性の数は増え続けています。Salesforce は、脆弱性を含む OSS をリリースすることで、自社の評判を危険にさらしたり、ターゲットとして自らをさらしたくありませんでした。

>「オープンソース ソフトウェアは最も顕著な攻撃ベクトルの 1 つです。OSS コンポーネントに脆弱性が見つかると、そのコンポーネントを使用しているすべてのアプリケーションとソフトウェアも危険にさらされるからです」とデシュパンデ氏は説明しました。「実際、2019 年には OSS の脆弱性が前年比で 2 倍になっており、脅威は常に増大しています。」

Snyk のオープンソース セキュリティ管理ソリューションは、組織が組み込んでいるオープンソース コードと、コミュニティにオープンソースにする予定のコードの両方の脆弱性を検出することで、組織がこのセキュリティ リスクを管理するのに役立ちます。Snyk は、発見されたセキュリティ問題を修正するための実用的なガイダンスを提供します。Snyk は、重大度と潜在的な影響に基づいて問題に優先順位を付けることで、開発者が問題を修正する時間を節約するのにも役立ちます。Salesforce は Snyk のスキャン結果を使用して、セキュリティ上の脅威に対する内部露出を減らすだけでなく、一般の人々が自信を持って OSS コンポーネントを使用できるようにすることもできます。

>「私は自動化と左派へのシフトの支持者です」とデシュパンデ氏は言います。「そして、Snyk は組織全体のセキュリティへの取り組みを拡大するための最も重要なツールの 1 つだと思います。将来的には、レポートに検出結果がない場合にリクエストを自動承認する機能や、Snyk を活用した新しいスキャン フレームワークを組織全体に拡張して、今後のセキュリティ手法を統一することで、実装を拡張したいと考えています。」

+ **効果:何百時間もの手作業を節約できます。**

Snyk を活用した新しいセキュリティ スキャン フレームワークにより、Salesforce の製品セキュリティ チームは OSS リクエストを手動でレビューする必要がなくなりました。以前は、各リクエストが完了するまでに数時間かかることがありましたが、Snyk のスキャン結果はすべてのレビュー リクエスト チケットに自動的に公開されるようになりました。したがって、セキュリティ エンジニアは、150 時間近くの時間を他の影響の大きいセキュリティ プロジェクトに再集中できるようになりました。これは、Salesforce がセキュリティを犠牲にすることなく、以前よりもはるかに迅速に OSS ソフトウェアをリリースできることを意味します。

>「以前は、各リクエストが完了するまでに数時間かかることがありましたが、現在では Snyk のスキャン結果がすべてのレビュー リクエスト チケットに自動的に公開されます。」


# Snyk Code が Apex、API、GraphQL セキュリティの言語サポートを追加

+ [Snyk Code adds language support for Apex, API, GraphQL security](https://snyk.io/blog/snyk-code-adds-apex-swift-language-support-api-graphql-security/)

Snyk Code は、素晴らしい 2021 年を迎えました。今年は Java、JavaScript、TypeScript の 3 つの言語をサポートすることから始まり、その後Python、C#、PHP、 Ruby 、Goを追加しました。さらに多くの言語と機能が追加される予定であり、この記事では、Salesforce の Apex サポートと API および GraphQL セキュリティの追加を発表できることを嬉しく思います。さあ、始めましょう！

+ **Snyk Code が Salesforce の Apex をサポート**

Snyk Code は、Salesforce の Apex 言語のセキュリティ スキャンをサポートするようになりました。2016 年、Salesforce は、Salesforce でフロントエンドを構築するための一般的なフレームワークとして Lightning Experience を発表しました。これは、Salesforce 内のオブジェクトがモデルとして機能し、ビューがマークアップとして実装され、クライアント上の JavaScript またはサーバー上の Apex と呼ばれる言語のいずれかでコントローラを使用する、モデル ビュー コントローラ (MVC) アプローチのアイデアを使用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/af84d64e-a42c-ca7c-1e30-d55281cd35cb.png)


Apex は、Salesforce Force プラットフォームで使用される独自の開発言語です。これは、より複雑なビジネス ロジックと、Salesforce プラットフォーム内に保存されたデータの処理を可能にするために、Salesforce の創設者の 1 人である Parker Harris によって開発されました。Apex はこのタスクを反映しています。一例として、Salesforce はマルチテナント プラットフォームであるため、異なるテナントのランタイムを分離することが大きな懸念事項となります。

Apex は、ドット表記と中括弧の構文に従って、厳密に型指定され、オブジェクト指向で、大文字と小文字を区別しないプログラミング言語であるため、Java および C# と密接な関係を示しています。当初は Apex がインタプリタされていましたが、2012 年にコンパイラが公開されました。このようなコンパイラの構築は簡単な作業ではありませんでしたが、Apex は Salesforce プラットフォームに緊密に統合されているため、Visual Studio Code などの IDE のサポートが向上しました。

注: Salesforce の Apex (Advanced Programming Experience) は、Oracle APEX (Oracle Application Express) とは関係ありません。

この Apex スキャンの新しいサポートにより、Snyk Code はSASTに新しい章を開きます。これは非常に高速であり、IDE 内で直接スキャンし、修正の効果をチェックするほど高速です。そのリアルタイム速度に加えて、エンジンはナレッジ ベース全体を使用してプロジェクト全体をスキャンできます。デルタ、差分、増分はなく、フル スキャンです。

Snyk Code は、独自の人間主導の機械学習プロセスを使用して、知識ベースを構築および維持します。何十万ものプロジェクトまたは数十億行のコードをトレーニング セットとして使用しています。グローバルな開発者コミュニティの集合的な知識から学びます。このプロセスを使用することで、Snyk Code はナレッジ ベースを迅速に構築し、業界をリードする精度を維持できるようになります。また、Snyk の標準と同様に、Snyk コードは開発者を念頭に置いて構築されており、開発プロセスに直接組み込まれています。IDE プラグイン、PR チェック、優先順位スコア、わかりやすい提案、同じ状況にある他の人が目前の問題をどのように解決したかの例など。

注: Salesforce と Snyk の関係は緊密です。Salesforce は Snyk の顧客であると同時に、Snyk への投資家でもあります。Salesforce に対する信頼に非常に感謝しています。

Apex または JavaScript、Java、TypeScript、C#、Python、Ruby、Go、PHP などのサポートされている言語をスキャンする Snyk コードをぜひご紹介します。

**原文では続きがありますが、以下は割愛しています。**

# セキュアな Web アプリケーションの開発 > Secure Client-Side Development > Build Secure Apps with Lightning Web Components

+ [Build Secure Apps with Lightning Web Components](https://trailhead.salesforce.com/ja/content/learn/modules/secure-clientside-development/build-secure-apps-with-lightning-web-components?trail_id=security_developer)

ここでも説明がありますね。

**Properly Evaluate Third-Party Dependencies**

Most JavaScript applications bring in a few third-party dependencies. It’s a good idea to evaluate third-party dependencies via manual review when possible. You can also use static analysis tooling, like Checkmarx, which make it easy to scan code for security problems. Likewise, a tool such as **Snyk** enables you to evaluate third-party dependencies against known vulnerability databases. 

# 安全な開発のベストプラクティスを学ぶ > Security Principles > Learn the OWASP Top 10

+ [Learn the OWASP Top 10](https://trailhead.salesforce.com/ja/content/learn/modules/security-principles/learn-the-owasp-top-10?trail_id=develop-securely)

To do so, you can perform a static analysis on all of your code. Companies such as Checkmarx, **Snyk**, and WhiteSource provide tools for software composition analysis (SCA). These scan source code and identify security vulnerabilities such as buffer overflows, SQL injection, XSS, and information disclosure vulnerabilities, as well as the rest of the OWASP Top 10, SANS 25, and other standard awareness documents used in the security industry. These analyses can help your organization continue to minimize security vulnerabilities.  

# PWA Kit による最新の買い物体験の構築

+ [PWA Kit 1.4.0](https://help.salesforce.com/s/articleView?id=sf.pwa_kit_rn_1_4_0_release.htm&type=5)

セキュリティ更新

ローカル開発で HSTS ヘッダーを送信しない。#288
+ [Snyk] shelljs のセキュリティアップグレード (0.8.4 から 0.8.5)。[#307](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/307)
+ [Snyk] nanoid のセキュリティアップグレード (3.1.30 から 3.1.31)。[#308](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/308)
+ [Snyk] cross-fetch のセキュリティアップグレード (3.1.4 から 3.1.5)。[#351](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/351)

# 2023 年 6 月 1 日、セキュリティ研究者が、Salesforce の tough-cookie オープンソース NPM プロジェクトに影響を及ぼす JavaScript の脆弱性を発見しました。この脆弱性により、悪意のある行為者が Cookie データをグローバル名前空間にアタッチすることが可能になるため、実行中のコードにアクセスできる個人に対して Cookie が公開される可能性があります。 

+ [オープンソースの NPM 製品 Tough-Cookie に影響する CVE-2023-26136](https://help.salesforce.com/s/articleView?id=000395871&type=1)
+ [Security Risk #282](https://github.com/salesforce/tough-cookie/issues/282)
+ [Medium severity - Prototype Pollution vulnerability in tough-cookie (package.json) jordaniac89/juice-shop#184](https://github.com/jordaniac89/juice-shop/issues/184)
+ [Snyk vulnerability [SNYK-JS-TOUGHCOOKIE-5672873] backstage/backstage#18742](https://github.com/backstage/backstage/issues/18742)

# 関連資料（自動翻訳しておきたい）

+ [Static Application Security Testing (SAST) Tools](https://snyk.io/learn/application-security/static-application-security-testing/)
+ [Interactive Application Security Testing (IAST)](https://snyk.io/learn/application-security/iast-interactive-application-security-testing/)
+ [Dynamic Application Security Testing (DAST)](https://snyk.io/learn/application-security/dast-dynamic-application-security-testing/)


# 関連するルールなど

+ [@salesforce/eslint-plugin-aura](https://snyk.io/advisor/npm-package/@salesforce/eslint-plugin-aura)
+ [Apex - Snyk User Docs](https://docs.snyk.io/scan-using-snyk/supported-languages-and-frameworks/apex)

# 2023/11/24現在

残念ながらApexをSnykを使ってスキャンする方法がわからないですね。
私の場合は開発者コンソールしか使ってないので、無理そうな感じがします。(Aura コンポーネントしか使ってないので、sf CLIを使わなくても開発できます...)

日本語では何も見つけられません。英語は検索の仕方が悪いのか、断片的な情報はあるのですが、それらを読んでも実際にスキャンできるような環境構築までたどり着けないです。難しい。