Snyk Code、Apexに対応し、APIとGraphQLのセキュリティ機能を追加
Frank Fischer
2021年10月28日
0 分で読めますSnyk Codeにとって、2021年は飛躍の年となりました。年初の対応言語はJava、JavaScript、TypeScriptの3つでしたが、その後Python、C#、PHP、Ruby、Goが加わりました。今後も対応言語や機能の拡充を予定しています。今回は、SalesforceのApexへの対応に加え、APIとGraphQLのセキュリティ機能を追加したことをお知らせします。さっそく見ていきましょう。
Snyk CodeがSalesforceのApexに対応
Snyk Codeで、SalesforceのApex言語のセキュリティスキャンが可能になりました。Salesforceは2016年、Salesforce上でフロントエンドを構築するための汎用フレームワークとして、Lightning Experienceを発表しました。これはモデル・ビュー・コントローラー(MVC)方式を採用しています。Salesforceのオブジェクトがモデル、マークアップがビューを担い、コントローラーはクライアント側ではJavaScript、サーバー側ではApexという言語で実装されます。

Apexは、Salesforce Forceプラットフォームで使用される独自の開発言語です。Salesforceの創業者の一人であるParker Harrisが、より複雑なビジネスロジックを実現し、Salesforceプラットフォーム内に保存されたデータを扱えるように開発しました。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の他の製品と同様に、Snyk Codeも開発者を第一に考えて設計されており、開発プロセスに直接組み込めます。IDEプラグイン、PRチェック、優先度スコア、わかりやすい提案、同じような状況で他の開発者が問題を解決した方法を示す例などを利用できます。
注: SalesforceとSnykは強固な関係を築いています。SalesforceはSnykの顧客であり、Snykの投資家でもあります。Salesforceから寄せられた信頼に、心より感謝しています。
Snyk CodeによるApexのスキャンや、JavaScript、Java、TypeScript、C#、Python、Ruby、Go、PHPなど、その他の対応言語のスキャンをご紹介します。
最先端のインテリジェンスでコードを保護
わずか30分で、Snyk CodeのSAST機能を幅広くご紹介します。
APIセキュリティ
APIは、今日のほとんどのアプリケーションに欠かせない要素です。クラウドアプリケーションでは、JSONベースのAPIであるREST APIが、構築や利用の容易さから広く普及しました。近年、REST APIはさらに発展し、GraphQLが登場しました。この点については後ほど説明します。
APIを構築したり利用したりする際には、JavaScriptやTypeScriptがよく使われ、API構築用のライブラリも数多くあります。しかし、大きな自由には大きな責任が伴います。APIも例外ではなく、特有の攻撃を受ける可能性があります。
注: APIセキュリティについて詳しく知るには、OWASP API Top 10が参考になります。
Snyk Codeは、一般的なAPIの問題を検出して知らせるルールを追加しました。さらに、元のソースコードに修正案を重ねて表示し、同じような状況で他の開発者が問題を修正した例も提示します。例を見てみましょう。
REST APIでは通常、特定のURLを使って個別のデータオブジェクトにアクセスします。たとえば、[Your URL]/api/v1/notes/345で、ノート345を指定できます。利用可能な要素を確認するには、利用可能なIDを返す一覧サービスを呼び出します。IDが簡単に推測でき、ユーザーやその役割の確認が行われない場合、攻撃者は推測したIDを指定してリクエストを送信し、データを取得できてしまいます。これは安全でない直接オブジェクト参照(IDOR)と呼ばれます。Snyk Codeは、まったく新しいアプローチである静的アプリケーションセキュリティテスト(SAST)を用いて、こうした問題や類似の問題を検出します。開発者に潜在的な問題を知らせるだけでなく、修正も支援します。ライブラリ内でフラグを設定するだけで解決できる場合もあります。
まとめると、OWASPはAPIセキュリティを重大な懸念領域と捉えています。Snyk Codeは独自のアプローチでAPIセキュリティに対応し、SAST業界の限界を押し広げます。さらに、次の機能もあります。
GraphQLセキュリティ
REST APIはここ数年で大きく発展しました。Facebookが主導し、GraphQLというプロトコルが開発されました。従来のREST APIでは、オブジェクトに関するすべてのデータを集めるために複数回の呼び出しが必要になるという課題があります。まず一覧機能でインスタンスIDを取得し、その後、インスタンスの各要素を集めるために何度か呼び出すこともあります。一方、GraphQLではこれらの呼び出しを1つにまとめられるため、オーバーヘッドを削減できます。
Snyk Codeは、GraphQLに対応した業界初の製品です。Snyk Codeチームはセキュリティ上の問題を調査してルールを追加し、人間の知見を活用した独自のプロセスとオープンソースリポジトリの学習データを用いてルールを改善しました。ここでも、Snyk Codeは開発者コミュニティ全体の知見を活用して学習と改善を重ねています。GraphQLを使用する多くのアプリケーションは、graphql-express、koa-graphql、mercurius、ApolloServer、graphql-jsを使ってJavaScriptまたはTypeScriptで記述されています。これらはすべてSnyk Codeの検査対象です。
Snyk CodeがGraphQLで検出できる問題の種類を、2つご紹介します。まず、GraphQLライブラリでは、デフォルトでリクエストのネストを非常に深くまで許可していることがよくあります。数十万層に及ぶこともあります。実際に使われることはまれですが、攻撃者が非常に深いクエリを送信すると、ライブラリはリクエストを処理する内部オブジェクトの生成に大量のメモリなどのシステムリソースを消費し、リソース枯渇やシステムクラッシュにつながる可能性があります。結果として、サービス拒否攻撃が成立します。Snyk Codeは、ライブラリがリクエストを切り詰めるように設定されているかを確認し、この種の攻撃を防ぎます。

次に、GraphQLではイントロスペクション機能を使って、APIの利用者がGraphQLサーバーに基盤となるスキーマの情報を問い合わせられます。公開APIでは意図した機能かもしれませんが、内部APIではこの種の情報を公開したくない場合もあります。情報を公開しないことで、攻撃者がAPIを調べて機能を把握するのを防げます。すでに内部ネットワークに侵入した攻撃者によるハッキングを完全に阻止できるわけではありませんが、攻撃を難しくし、大幅に遅らせることができます。この場合、Snyk Codeはイントロスペクションが有効になっていることを警告し、意図的に判断するよう促します。

注: OWASPが公開しているGraphQLチートシートでは、ここで紹介したものを含め、GraphQL APIで起こりうる問題が解説されています。
ここで紹介したのは、技術的に込み入っていない例を2つだけです。GraphQLへの対応により、Snyk Codeは業界を未開拓の領域へと導きます。SnykではGraphQLの普及に注目し、開発プロセスに組み込める開発者に優しいセキュリティを、最初から提供するパートナーを目指しました。Snyk Codeは、CodeQL対応で業界をリードするための、多用途で高速なプラットフォームを提供してくれました。
まとめ
Snyk Codeに関する今回のお知らせをまとめます。
SalesforceのApexに対応
REST APIセキュリティに対応
GraphQLセキュリティに対応
これらはSnyk Codeエンジンに加わった大きな機能です。お客様と緊密に連携し、ニーズに合ったソリューションを構築している私たちは、Snyk CodeをはじめとするSnykプラットフォームの機能をご紹介したいと考えています。お忙しいところ恐縮ですが、30分ほどお時間をいただき、デモをご予約ください。製品を実際にご覧いただき、ご質問にもお答えします。
最先端のインテリジェンスでコードを保護
わずか30分で、Snyk CodeのSAST機能を幅広くご紹介します。
