Skip to main content

SnykでElixir開発を安全に

2021年4月27日

0 分で読めます

Elixirをサポートすることで、開発チームとセキュリティチームが、アプリケーションの構築に使用しているElixirおよびErlangパッケージの脆弱性を簡単に見つけ、優先順位を付けて修正できるようになりました。お知らせできることをうれしく思います!

Snyk CLIを使うと、Elixir開発者はMix/Hexプロジェクトを手動で、またはCIプロセスの重要な段階でテストおよび監視でき、既知の脆弱性を早期に検出して、本番環境へのコードのデプロイ前に対処できます。

Elixirのサポートは、すべてのSnykプランで無料でご利用いただけます!

Elixirのセキュリティ、その10年の歩み

最近10周年を迎えたElixirは、Erlangプログラミング言語の実装に使われるBEAM仮想マシン上で動作する、関数型かつ並行処理に対応した汎用プログラミング言語です。生産性の高い開発ツールと拡張性に優れた設計により、Bleacher Report、Mozilla、PagerDuty、PepsiCo、TheRealRealなど、多くの組織で選ばれています。このエコシステムのオープンソースプロジェクトも活況を呈しています。Elixirを含むErlangエコシステムのパッケージマネージャーHexには、現在12,000を超えるパッケージが登録され、1日に何百万回もダウンロードされています。

ほかの言語やエコシステムと同様に、これらのオープンソースパッケージにはセキュリティリスクがあります。Elixirパッケージの中には、悪意ある攻撃者に悪用される可能性のある既知のセキュリティ脆弱性を含むものがあります。オープンソースの脆弱性の約78%は間接依存関係で見つかっています。つまり、アプリケーションの脆弱性の大部分は、使用していることすら認識していなかったElixirパッケージに起因しているのです!

検索フィールド、パッケージフィルター、深刻度評価付きのソフトウェア脆弱性一覧が表示されたSnyk Vulnerability DBのページ。

朗報は、Elixirパッケージで確認されている脆弱性の数は、Java、JavaScript、Python、.NET、そして比較的新しい言語であるGoなど、ほかのエコシステムと比べても、比較的少ないことです。それだけでなく、既知のElixir脆弱性の90%には修正があり、より新しく安全なバージョンのパッケージにアップグレードできます。一方で、広く使われている一部のElixirパッケージの古いバージョンには、深刻な脆弱性が存在します。

でも、どうでしょう?Snykを使えば、こうした脆弱性を早期に検出し、すぐに修正できます。

Elixirアプリケーションのテストと監視

Snyk CLIを使えば、コマンドライン環境で、依存関係に含まれる既知の脆弱性を手動で、またはCIワークフローの一環として見つけて修正できます。

Snyk CLIを初めて使う場合は、まずインストールする必要がありま

す。Snyk CLIのインストール方法はいくつかあります。ここではnpmを使う方法をご紹介します。

npm install -g snyk 

次に、認証してSnyk CLIをSnykアカウントにリンクします。

snyk auth

ブラウザーでタブが開き、CLIをアカウントで使用するための認証を求められます。

Authenticateをクリックしてください。

これでElixirアプリケーションをテストする準備ができました。

Elixirアプリケーションが保存されているローカルフォルダーに移動し、次のコマンドを実行します。

snyk test

Elixirでは、アンブレラプロジェクトを使うのが一般的です。これは、それぞれが独自のmix.exsファイルを持ちながら、単一のmix.lockファイルを共有するサブプロジェクト(Elixirの用語では「アプリ」)で構成されます。Snykはこのプロジェクト構成を標準でサポートしているため、CLIの追加パラメーターは必要ありません。そのまま動作します。各「アプリ」はSnyk CLIとUIで個別のプロジェクトとして表されますが、グループ化されています。

スキャンを実行すると、Snykは依存関係の一覧をSnyk Vulnerability Databaseと照合します。特定されたすべての脆弱性は、依存経路と修正方法のガイダンスとともに一覧表示されます。

依存関係のセキュリティスキャンのターミナル出力。sweet_xmlに重大度の高いサービス拒否の脆弱性があり、脆弱なパスが8つあることを示しています。

上の画像のとおり、今回はChangelogプロジェクトをテストしました。これは、Phoenixフレームワーク、PostgreSQL、その他多数のオープンソースプロジェクトを基盤とするElixirアプリケーションです。このプロジェクトには現在、sweet_xmlというパッケージに深刻度の高い脆弱性が1件あります。この脆弱性を悪用すると、インラインDTDを使ったXMLエンティティ展開攻撃により、サービス拒否を引き起こす可能性があります。sweet_xmlは非常に人気のあるパッケージで、1日に何千回もダウンロードされ、通常はアプリケーション内の依存関係の数階層下にあります。残念ながら、この脆弱性を修正した新しいバージョンはまだありません。

プロジェクトを定期的に監視し、新たな脆弱性が見つかったときに通知を受け取るには、次のコマンドを使います。

snyk monitor

現在の依存関係のスナップショットが作成されます。Snykはこれを基準に、新たに公開された脆弱性や、これまで利用できなかったパッチまたはアップグレード経路が利用可能になったときに確認します。Snykアプリにログインすると、Projectsページでスキャン結果を確認できます。

bankplatform/apps/backoffice の未解決の重大度の高い脆弱性と依存関係の問題を表示する Snyk のプロジェクトダッシュボード

今回テストしたプロジェクトでは、Snykは何百万回もダウンロードされている人気パッケージplugに関連する複数の脆弱性を特定しました。その中には高深刻度の脆弱性も含まれています。

脆弱性の内容やアプリケーションに混入した経緯を理解できるよう、問題カードでは、脆弱性が実際に何を意味するのか、どのように導入されたのか、どのバージョンにアップグレードすべきかを説明します。優先度スコアは、優先順位付けに役立ちます。

plugのセキュリティ脆弱性の詳細。不適切な入力検証、CVSSスコア8.8(高)、スコア511、および影響を受けるパッケージのバージョンを表示。

Dependenciesタブでは、脆弱性がアプリケーションにどのように混入したかを示す依存関係ツリー全体を確認できます。

bankplatform/apps/backofficeの開示済み脆弱性と依存関係ツリーを表示するSnykプロジェクトダッシュボード。

前述のとおり、Snyk CLIを使って、CIパイプラインの一環としてsnyk testまたはsnyk monitorを実行することもできます。たとえばSnyk Jenkins integrationを使えば、コードの脆弱性を継続的にテストおよび監視し、脆弱性が見つかった場合にビルドを停止できます。

迅速に開発し、安全を維持しましょう!

今日のアプリケーションの構築に使われているコードの大部分は、オープンソースです。開発者がオープンソースを好むのは、開発スピード、柔軟性、拡張性、品質をもたらすからです。しかし、前述のとおり、オープンソースへの依存が高まると、管理・軽減すべきリスクも生じます。

Snykが新たにElixirをサポートしたことで、Elixirエコシステムはさらに安全になりました。

それでは、どうすれば始められるでしょうか?ご質問ありがとうございます!詳しい使い方は、Snyk for Elixir documentationをご覧ください。ElixirのサポートはすべてのSnykプランでご利用いただけます。すでにSnykをご利用の場合は、Snyk CLIをインストールして上記の手順に従うだけです。まだSnykをご利用でない場合は、こちらから無料で登録できます!

CTFを始めよう

オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。