web-dev-qa-db-ja.com

大企業はどのようにしてソースコードを保護しますか?

私は最近 正規の回答our ursine overlord の質問を読みます 証明機関はどのようにプライベートルートキーを保存しますか?

それから私は自分自身に尋ねなければなりませんでした:
大企業(Microsoft、Appleなど)はどのようにして貴重なソースコードを保護していますか?

特に私は、ソースコードを盗難から、悪意のある外部ベースの変更から、そして悪意のあるインサイダーベースの変更からどのように保護するのかを自問しました。

最初のサブ質問は既に(ある程度) CodeExpress 'answer で回答されています 組織外で個人データが開示されるのを防ぐ方法

質問の理由は簡単です:

  • ソースコードが盗まれる場合、a)会社は(少なくとも部分的に)販売を妨害され、b)製品はソースコードベースの攻撃検索のリスクにさらされます。 WindowsまたはiOSのソースコードが盗まれた場合にどうなるか想像してみてください。
  • 悪意のある外部の攻撃者によってコードが変更される場合、破滅的な可能性のある秘密のバックドアが追加される可能性があります。これが最近ジュニパーで起こったことです 2番目の座標DUAL_EC_DRBGポイントがソースで置き換えられました。
  • 内部の攻撃者(Apple iOSエンジニア?)など)によってコードが変更される場合、その人物は、上記のバックドアを販売することで大金を稼ぐことができ、変更された場合、製品に深刻なリスクをもたらす可能性があります。バージョンが出荷されます。

「法律」や「契約」は考えないでください。これらは盗難や改造に対する効果的な対策ですが、確かに技術的な防御と同様に機能せず、攻撃的な攻撃者を阻止しません(つまり他の政府機関)。

76
SEJPM

まず、企業が大きいからといって、セキュリティが向上するということではありません。

とは言っても、多くのフォーチュン500企業(多くの人がよく知っている多くの有名ブランドを含む)でセキュリティ作業を行ったことが、現在60〜70%があなたが彼らがやるべきだと思うくらい。世界中の何百ものサードパーティ企業に、コードベースからプルするためのフルアクセスを許可しているものもありますが、必ずしもそれに書き込む必要はありません。

一部のユーザーは、2要素認証を有効にし、誰がアクセスを許可するかを厳密に制御し、誰かが去ったときにすぐにアクセスを取り消すプロセスを持つ個別のプロジェクトに対して複数のプライベートGithubリポジトリを使用します。

他のいくつかは物事を保護することに非常に真剣なので、彼らは社内ですべてを行い、他の多くの企業にとって何を使用しているのでしょうか?これらの企業は、Data Loss Prevention(DLP)ツールなどのソリューションを使用して、コードの漏洩、非常に強化された環境への内部VPNアクセスを監視し、大量の従来のセキュリティ制御と監視、場合によっては、すべてのフルパケットキャプチャを開発します。コードが保存されている環境のトラフィック。しかし、2015年の時点では、この状況はまだ非常にまれです。

興味深いことであり、いつも私にはいつも珍しく思えたのは、金融業界、特に銀行のセキュリティは人が思っているよりもはるかに悪く、製薬業界は多くの防衛請負業者を含む他の業界よりもはるかに優れているということです。セキュリティに関して絶対に恐ろしい業界がいくつかあります。私がこれに言及しているのは、他のダイナミクスが動いているためです。それは、大企業と中小企業だけではなく、その大部分は組織文化に関係しています。

質問に答えるために、セキュリティチームではなく、全体としてこれらの決定を行うのはビジネスであると指摘しておきます。セキュリティチームがすべてを担当していたり​​、進行中のすべてのプロジェクトを知っていたりした場合、おそらく今日のようには見えません。

とは言っても、大企業のほとんどは株式公開されており、多くの理由から、短期的な利益、四半期ごとの数値を満たし、セキュリティリスクよりも他の大規模な競合他社との市場シェアを争う傾向があることに留意してください。リスクがビジネスを効果的に破壊する可能性があるとしても。したがって、以下の回答を読むときは、そのことを覚えておいてください。

  • ソースコードが盗まれた場合:

    a。ほとんどの人は気にせず、彼らのブランドや売上にほとんど影響を与えません。多くの場合、コード自体は企業が提供する価値を保存するものではないことに注意してください。他の誰かがWindows 10ソースのコピーを入手した場合、Windows 10クローンOSを販売する会社を突然作成してサポートすることはできませんでした。コード自体は販売されているソリューションの一部にすぎません。

    b。このため、製品のリスクが高くなりますか?そのとおり。

  • 外部の変更:はい、しかし、これは行うのが難しく、簡単に見つけることができます。とは言っても、ほとんどの企業はこれを真剣に監視していないため、特に自社ソフトウェアへのバックドアアクセスが他の国に大きな価値がある場合、多くの大企業でこれが発生した可能性が非常に高くなります。これはおそらく人々が理解するよりもずっと頻繁に起こります。

  • 内部攻撃者:攻撃者の巧妙さによっては、これに気付かれることも、目立たないプログラミングミスのように見えることもあります。バックグラウンドチェックと動作監視以外では、これを防ぐことができるものはあまりありませんが、うまくいけば、一部のソースコード分析ツールがこれを検出して、チームに強制的に修正してもらうことになります。これは防御するのが特に難しい攻撃であり、一部の企業が他の国に作業を外部委託せず、開発者に対して包括的なバックグラウンドチェックを行わない理由です。静的なソースコード分析ツールは改善されていますが、検出できるものと実行できるものの間には常にギャップがあります。

一言で言えば、穴は常に修正の前に出てくるので、ほとんどのセキュリティ問題への対処は時間との戦いの一部になります。セキュリティツールは時間のトレードオフを提供しますが、「完全な」セキュリティが得られることは決してなく、それに近づくと、時間の面で非常に高価になる可能性があります(開発者の速度を低下させるか、他の場所でより多くの工数を必要とします)。

繰り返しになりますが、会社が大きいからといって、セキュリティが優れているとは限りません。私は、大規模な競合他社よりもはるか優れたセキュリティを備えたいくつかの小企業を見てきましたが、セキュリティをより真剣に考えたい中小企業は大規模にする必要がないため、これはますます当てになると思います組織の変更。大企業は、移行コストのために、これまでのやり方に固執する必要があります。

さらに重要なのは、古い会社のように現在のレガシーカルチャーを変更する必要がなく、コアカルチャーにセキュリティを大幅に統合することで、新しい会社(サイズは問わないが、特に小規模な会社)の方が簡単だと思う。非常に安全なバージョンの製品を作成することで、安全性の低い製品から市場シェアを奪う機会さえあるかもしれません。同様に、あなたの質問はまったく別の理由で重要だと思います。セキュリティはまだ初期段階にあるため、コード管理など、改善の余地が多い分野でより良いソリューションが必要です。

66
Trey Blalock

免責事項:私はこの分野で良い仕事をしている非常に大きな会社で働いていますが、私の答えは私の個人的な意見であり、私のことを示すものではありません雇用主の立場または方針。

まず、コードが漏洩しないように保護する方法:

  • ネットワークセキュリティ:これは明らかなものです-中国のハッカーが内部システムに認証情報を取得すると、彼らはあなたのソースコードを入手します(ない場合ソースコードが次にどこへ行くかを彼らに教えるという事実以外の理由)。つまり、基本的なコンピュータセキュリティは「与えられた」ものでなければなりません。
  • アクセス制御:受付はあなたのコードリポジトリにアクセスする必要がありますか?おそらく違います。あなたの露出を制限します。
  • 雇用を選択し、健康的な職場環境を維持します:送信メールのスキャンなどのDLP対策は理論的には賢明ですが、エンジニアが十分に賢い場合どんな用途でも、DLP対策を回避する方法を理解するのに十分スマートです。従業員がソースコードをリークする理由はありません。もしそうなら、あなたはひどく、ひどく間違った何かをしました。
  • ネットワークを監視します:これは「ネットワークセキュリティ」の回答の拡張ですが、デジタル損失防止に重点が置かれています。 DNSトラフィックが急増した場合は、攻撃者がソースコードを盗み出した可能性があります。 OK、ネットワークからのDNSトラフィックに突然のスパイクがあったかどうかを知るおそらく違います。
  • モバイルデバイスを別の方法で扱います:電話やラップトップが頻繁に失われます本当に。彼らはまた、しばしば盗まれます本当に。機密情報(ソースコード、顧客データ、企業秘密など)をモバイルデバイスに保存しないでください。真剣に。決して。これは、モバイルデバイスを使用してソースコードにアクセスして編集できないことを意味するものではありません。ただし、ラップトップが紛失した場合、機密データへのラップトップのアクセスをリモートで取り消すことができるはずです。通常、これは、コードとドキュメントが「クラウド内」(c9.io、koding.com、Googleドキュメントなどを参照)で適切な認証などを使用して編集されることを意味します。これは、第三者に委託する作業量に応じて、第三者を信頼して、または信頼せずに実行できます。ソリューションが2要素をサポートしていない場合は、別のソリューションを選択してください。 増加ではなく、このメジャーで露出を減少したい。

第二に、悪意のあるコードの変更を防ぐ方法。この質問に対する答えは本当に1つだけあります。それは変更管理です。

リポジトリ内のコードのすべての文字について、誰がいつそのコードを追加(または削除)したかを正確に知る必要があります。これは非常に簡単です。今日の技術では、変更追跡をしないようにするのがほとんど困難です。 GitやMercurial、または適度に使用可能なソース管理システムを使用している場合は、変更の追跡が行われ、それに大きく依存しています。

しかし、信頼性を少し上げるために、リポジトリへのすべての変更は、投稿者以外の少なくとも1人の他の人によるサインオフが必要であると付け加えます変化。 Gerrit のようなツールは、これを簡単にすることができます。いずれにせよ、多くの認定制度ではコードレビューが必要であるため、チェックイン時にこれらのレビューを実施すると、悪意のあるアクターが単独で悪意のあるコードをリポジトリに取り込むことができなくなり、不適切に記述されたコードがコミットされるのを防ぎ、少なくとも2つの人々は提出された各変更を理解します。

31
tylerl

偶発的問題のあるコード、つまりバグの挿入を防ぐための対策が講じられます。これらのいくつかは、問題のあるコードの意図的な挿入を防ぐのにも役立ちます。

  • 開発者がコードをリポジトリにコミットする場合、別の開発者がこのマージ要求を調べる必要があります。おそらく、2番目の開発者は、最初の開発者に新しいコードの内容を説明する必要があります。つまり、すべての行を調べることです。
  • コードが混乱しているように見える場合、そのコードは悪いスタイルとして拒否され、保守できない可能性があります。
  • コードには自動化された単体テストと統合テストがあります。特定のコード行のテストがないとき、人々は疑問に思います。そのため、バックドアが機能するか、ある種の難読化をテストする必要があります。
  • ソフトウェアの新しいバージョンがビルドされると、開発者と品質保証は、ビルドの一部であるコミットとその理由を確認します。各コミットには、文書化された目的が必要です。
  • ソフトウェアは、自動スクリプトを使用して構築および配備されます。これは、セキュリティだけでなく、ワークロードを簡素化するためでもあります。

もちろん、そのような措置はすべての参加者の誠実さと善意に依存しています。ビルドサーバーまたはリポジトリへの管理者アクセス権を持つユーザーは、多くの混乱を引き起こす可能性があります。一方、通常のプログラマはこの種のアクセスを必要としません。

3
o.m.

私の(大規模な)会社では、ラップトップはすべて暗号化されたハードドライブを使用しています。すべてのファイル転送/アップロードを監視し、USBポートをブロックしてファイルを書き込むDigital Guardianというツールを使用します。例外が必要な場合は、ハードウェアで暗号化されたUSBドライブを使用する必要があります(ここでも、ドライブが紛失したり盗まれたりした場合にファイルにアクセスできないようにします)。このような例外は一時的なものであり、書き込まれるファイル(ログに記録される)を正当化する必要があります。 Digital Guardianは、ほとんどの種類の添付ファイルが外部の電子メールアドレスに送信されるのを防ぎます。内部ファイルの交換は、アクセス制御と誰が何にアクセスしたかの監査証跡を備えたWebベースのフォルダーを使用して行われます。つまり、「ビジネスニーズ」のためのファイル共有は非常にシームレスであり、それ以外はすべて困難です。

システムは完全な証拠ではなく、帯域幅に影響を与えます-しかし、監査ツールだけでは、ソースコードや設計ドキュメントなどを取得しようとした従業員(多くの場合、会社を辞めようとしていた従業員)の複数のインスタンスが見つかりました。 。少なくとも私たちはこれらの試みのsomeを停止しています。

そして、誰かがhttpsアップロードが「見えない」と思った場合:すべての外部Webトラフィックは、httpsトラフィックを検査するためにMITM証明書を使用するプロキシ内クラウドによって処理されます。これらの対策を回避することは間違いなく可能です-賢い従業員がたくさんいます-しかし、他の人よりターゲットを難しくするのに十分な場合があります。

2
Floris

これはトリッキーな質問であり、私はその業界で働いたことがないので、私のアイデアは理論的または非常に非現実的かもしれません。

ひらめきが少ない従業員がソースコードのほんの一部しか入手できない場合はどうなりますか? Explorer.exe-Teamは、Explorer.exeへのソースコードへのアクセスのみを必要とします。これにより、ソースコードのより多くの部分を洞察するためにより高い位置にいる必要があるため、内部からソースコードを盗むことが難しくなります。

確かに、チームが必要とする可能性があるが、表示できないすべての部分について、適切なドキュメントが必要です。また、事前コンパイル済みのソースコードを、Explorer.exe-Teamから新しくコンパイルしたものとマージする必要があるため、デバッグが難しくなります。すべてのソースコードを保持し、小さな部分だけを編集しただけの場合でも、製品の完全バージョンをコンパイルできるコンパイルサーバーが存在する場合があります。 (変更をテストする必要があるため)このサーバーは、コードのどの部分に誰がアクセスできるかを知っています。

これが実用的なアプローチなのか、それとも業界で実際に起こっているのかはわかりません。これは、ソースコードの盗難を防ぐために理にかなっていると思う概念にすぎません。

1
BlueWizard