シノプシス、ソフトウェア・インテグリティ・グループの売却に関する最終契約を締結 詳細はこちら

close search bar

申し訳ありませんが、この言語ではまだご利用いただけません

close language selection

ソフトウェア・サプライ・チェーンに潜む、悪意のあるコードを取り除く

Black Duck Editorial Staff

May 17, 2023 / 1 min read

誰もが、信頼できるソフトウェア・サプライ・チェーン内で開発されたコードは正当なものだと信じたいと考えています。しかし残念ながら、悪意のあるコードの作成者は、ビジネスをリスクにさらすコードを密かに、かつ巧妙に埋め込むことができるというのが現実です。悪意のあるコードを識別するのは困難であり、長い間アプリケーションの中に潜んでいた後に損害を引き起こすこともあります。危険信号に気付く方法を身につける。

悪意のあるコードとは何か?

悪意のあるコードとは、アプリケーション本来の機能を破壊する意図でアプリケーションに追加され、書き換えられ、取り除かれたコードのことです。例として、以下のようなものが挙げられます。

  • 時限爆弾
  • トロイの木馬
  • バックドア
  • ルートキットと似た振る舞いをする

ウイルスやワームなどのマルウェアとは違い、悪意のあるコードは、システムに侵入するための外部ソフトウェアとして開発されるものではありません。悪意のあるコードとは、アプリケーション内の通常のコードのように見える、疑わしいちょっとしたコードです。それは特定のイベントや操作によってトリガーされるのをじっと待ちます。いったん実行されると、多くの不法行為の中でも特に、データの盗難、ソフトウェアのダウンロードとインストール、口座からの金銭の吸い上げ、キー入力の記録、外部からのコンピューターの遠隔操作などを可能にします。

悪意のあるコードがなぜこれほど狡賢いのか?

悪意のあるコードは、正常な機能に紛れ込み、場合によっては何年にも渡って休眠状態を維持する可能性があるため、一般的なアプリケーション・テスト戦略をすり抜けてしまう可能性があります。

受け入れがたいことですが、自社のソフトウェア・サプライ・チェーンが悪意のあるコードの供給源となる可能性があるのです。外部の開発パートナー(オフショアまたはオンショア)、信頼できそうなオープンソース・プロジェクトのコントリビューター、あるいはコードや管理機能、制御機能にアクセスできる、不満を抱いた現役の従業員や退職者が犯人である可能性もあります。彼らは、違法行為を隠しているかもしれませんし、単に恨みを抱いているだけかもしれません。

悪意のあるコードを調べて修正するために、誰を信頼できるのかを判断するのは、簡単なことではありません。例えば、内部の開発者が犯人の場合、彼らは感染したアプリケーションを知り尽くしていて、セキュリティ・チームがソフトウェアの脆弱性を探す上で有利な立場にあり、悪意のあるコードが生成するトラフィックを隠す術に長けています。あなたが悪意のあるコードのレポートを開発チームに送れば、犯人にも教えることになり、使おうとしている検出方法をすり抜ける方法を彼らは知ることになります。

どこから手をつけるか?

悪意のあるコードを防ぎ、検出し、対処するための戦術と手順はさまざまです。

  • コードのすべての供給源を必ず追跡し、中央リポジトリに記録して、開発者の作業と外部の依存関係のソースを追跡できるようにする:これは犯人を見つけ出す際に必要不可欠であり、優れたプラクティスです。
  • 悪意のあるコードがないか定期的にスキャンし、問題が見つかったら誰が対応するかをあらかじめ決めておく、先回りした計画を立てる:外部ライブラリ、オープンソースの依存関係、バイナリ、設計文書、ソース・コードを解析に含めて、疑わしいコードが何をしている可能性があるか、そのコードがサプライ・チェーンのどの時点で挿入されたかに基づいてシナリオを作ります。
  • 受動的な監視戦略の実装する:バックドア経由でデータにアクセスしたかどうかを判断し、悪意のあるコードの実行前後のシステムの状態を比較するために、一連のロギングまたはファイアウォール規則を導入する:また、ファイアウォール規則を積極的に変更して、外部アクセスとデータ損失を防ぐこともできます。
  • 悪意のあるコードの検出プロセスを既存のアプリケーション・セキュリティ・テスト・プログラム(ソフトウェア・コンポジション解析と静的解析など)に組み込み、悪意のあるコードが活動を開始する前に特定できるようにする:これら2つのプログラムを組み合わせることで、相乗効果が得られます。一方がアプリケーションから悪意のあるコードを排除し、もう一方が隙間から入り込んだものを検出します。
  • 悪意のあるコードを精査し、データを収集して、見つかった問題の原因を特定するのは、少人数の信頼できるチームに任せる:この作業は、悪意のある開発者がさらに深く身を隠すのを防ぐため、できる限り秘密裏に行います。

悪意のあるコードを検出する自社のスキル・レベルは十分ですか?

悪意のあるコードの有無を確認する際は、以下の一般的な危険信号を理解しておく必要があります。

  • プロジェクトの評判、バージョン間の機能変更、ソースなどといった事柄を考慮した、強制力のあるオープンソース使用ポリシーを策定します。
  • 構成ファイルにないURL文字列や、時刻や日付が変わると発動するアクティビティなど、アプリケーションに潜む気づきにくいロジックを検出するためのシグネチャを作成します。
  • アプリケーションに別の方法での侵入を可能にして通常のアクセス・パラメータを破壊する、バック・ドアを探します。

続きを読む

トピックを探索する