web-dev-qa-db-ja.com

コードが作業の外部に漏れないようにするにはどうすればよいですか?

重複の可能性:
クローズドソースのハイリスクプロジェクトを管理する方法?

私は、「所有」という非常に強い感覚を持つ機関に取り組んでいます。私たちが作成するソフトウェアの各行は、私たちのものだけであるべきです。皮肉なことに、私は唯一のプログラマー(ATM)ですが、他の人を採用する予定です。

上司は新しいプログラマーを信頼できる人として数えないので、ソースコードのコピーに問題があります。私たちはGitを使用しているので、彼らは彼らが取り組んでいるプロジェクトのeachentireコピーを持っているでしょう、リポジトリを複製するとき。

Gitoliteを使用してそれらへのアクセスを単一のキーに制限し、それをPCにバインドすることができますが、それらのキーを別のコンピューターにコピーすることができ、別のPCでリポジトリにアクセスできます。また(そして最も明白な方法)、ファイルを別の場所にアップロードしたり、別のリモートを追加したり、ファイルをUSBドライブにコピーしたりすることもできます。

このようなイベントを防ぐための(おそらく賢い)方法はありますか?

編集:この質問に対する洞察を提供してくださった皆さんに感謝します。これはだけではないので、もっと目を開くだけでなく、近い将来上司に対して私の議論をしっかりとサポートします(あなたは基本的に私と同じように考えており、私は彼らにそれを理解させようとしているためです)。

私は仕事上、困難な状況にあり、同僚と上司(私は基本的には真ん中にいるので)は2人のギャングのようにいるので、このすべての入力は非常に高く評価されています。

私が(= /// =)peopleの問題に対するtechnicalの解決策を探していたのは本当です-管理者と従業員の両方が問題です、だからそれはそのように解決することはできません(私はいくつかのコード難読化について考えていました、おそらく別々のモジュールで作業するなど、しかしそれは私の開発者のPOVからは機能しません) 。主な問題は会社の内外の文化です-私の国(ベネズエラ)では開発は真剣に受け止められていないため、ここではナイーブとパラノイアが実際に問題となっています。

ここでの本当の答えはNDA(ここベネズエラでは完全に機能しないもの)です。これはpeopleソリューションだからです。開発者はそのような状況で作業します。状況は醜くなりますが、私はあなたの助けによりそれを処理できると思います。どうもありがとうございました!<3

68
AeroCross

これは、社会問題の技術的解決策を探している状況の1つです

社会問題には社会ソリューションが必要です。この場合、このソリューションは2つの補足形式と、次のような役立つ組織的ソリューションを取ります。

  • 信頼開発者を信頼していない場合は、採用しないでください。信頼できない人と一緒に働くことは失敗の代名詞です。不信に基づく関係は、多くの形式主義を必要とし、それはあなたの従業員の生産性だけでなく、あなたと一緒に働く準備ができている人の数にも深刻な影響を与える可能性があります。おそらく、最高の開発者はあなたの会社を絶対に避けます。

  • NDA。誰かを信頼しても、法的な予防策を講じるべきではないという意味ではありません。これらの予防策は、契約の形をとるか、または開示の場合に従業員に重大な結果をもたらすNDA条項)をとることができます。

    結果がどの程度深刻かは、あなたが誰であるかに依存します。政府機関、テロリスト、マフィアは、抑止力のあるものを許可することができます。普通の会社は法律により、金融会社のみに制限される場合があります。

  • スライシング。信頼と契約は良い出発点ですが、私たちはもっとうまくやることができます。製品が機能するために2つ以上の部分が必要になるようにコードベースの重要な部分をスライスできる場合は、部門1の開発者が部門2で開発されたソースコードを決して見ないようにしてください。

    ある部署の人は他の部署の人と会うべきではなく、理想的には、他の部署が何をしているか、どのくらいの部署がいるかを推測することもできないはずです。一人一人が知っているのは小さな部分だけであり、全体像を把握するには十分ではありません(そして、組織の外で製品全体を再構築します)。

それらは社会的および組織的対策でした。

今、技術的に話すと、あなたにできることは何もありません。

あなたはしようとするかもしれません:

  • 開発者に、インターネットに接続されておらず、USBポートを持たないマシンの密室で作業するように強制します。

  • 部屋で発生するすべてを監視するカメラを設置し、何人かのセキュリティ担当者が開発者の作業を常に監視します。

  • すべての開発者が部屋を出るたびにストリップ検索して、コードを保持できる電子デバイスがないことを確認します。

  • すべての開発者が足首モニターを持っている必要があります。デバイスは彼らが言うことを聞き、彼らの位置を記録し、近くの電子デバイスを検出しようとします。識別されておらず、追跡ソフトウェアがインストールされていないデバイスの近くに開発者がいた場合、私立探偵やハッカーは、開発者がデバイスを使用して情報を漏洩していないかどうかを確認しようとする可能性があります。

  • 厳しい監視下にある場合を除き、開発者が建物を離れ、外部の世界と何らかの方法で対話することを禁止します。

これらの措置の一部またはすべては多くの国で違法です(一部の政府機関を代表する場合を除きます)が、最悪の部分は、これらすべての措置を講じていても、開発者はたとえば、コードを肌や紙に個別に書き込んで服に隠したり、 Eidetic memory がある場合は単にコードを暗記したりして、コードを取得します。

または、データ構造とアルゴリズム(知的財産が重要な唯一の重要なもの)をグローバルに記憶し、これら2つのことに触発されて独自の製品を作成することもできます。

137
  1. 秘密保持契約に署名してもらいます。

  2. 信頼できる人だけを雇ってください。

  3. コードベースを区画化します。依存性注入を使用して、終了時に結果のクラスが既存のアーキテクチャに配置されるという要件を与えることができますが、「全体像」にはアクセスできません。 "、ルーズピースのみ。すべての作業を完全に行うための「建築用接着剤」をクリアできるのは、信頼できる上級者だけです。

70

私は、開発者が困惑する「私たち」という「賢い」考えがあるかもしれないという考えが大好きです。書かれたすべての開発者ツールが開発者によって書かれたことを考えると、そのすべてです。

あなたの上司の最大の問題は、パラノイアのダッシュを伴う素朴さです。私はそこに礼儀正しくいます。本当に本当に礼儀正しい。

コードの所有権を維持するために買い物リストが本当に必要な場合は、次のコードを実装してください。

  1. すべての会社のコンピューターでUSBとその他のIO=を無効にします。これは、ほとんどのエンタープライズアンチウイルスなどを使用して行うことができます。

  2. デスクトップまたはタワーになるすべての開発者マシン。ラップトップはありません。

  3. どのマシンにもインターネットへの接続を許可しないでください。 Web、FTP、電子メール、IM、インターネットなし。ワイヤーをカットします。

  4. リモートでの作業/アクセスなし(インターネットでカバーされていないが、スマートなsparkはVPNを提案している可能性がある)

  5. 安全な「開発」室に携帯電話やその他の電子機器を持ち込むことはできません。

  6. すべてのプリンタを設定して、表と裏のすべてのページに目に見える大きな透かしを印刷します。

  7. bagは、内側と外側の両方を検索します。手書きのメモ、会社のプリンターで印刷されたものを検索します(何でも、ステガノグラフィーで画像に隠されたコードがある可能性があります!)。電気または電子機器。実際、バッグが安全な場所に置かれないようにするのが最善であり、開発者はクリーンスーツを着用する必要があります。これは、薬剤室やチップ工場で見られるようなものです。

  8. サーバーも同様に分離し、バックアップを暗号化し、上司だけがサーバーから復元するパスワードを知っている必要があります。

45
Ian

問題の人々が雇用契約を守ることが信頼できない場合、彼は彼らを雇う必要はありません。

誰も信用できないと彼が信じている場合、彼は過度に偏執的であり、彼がそれを続ければ、最終的に会社に損害を与えるでしょう。

ある時点で、従業員を信頼する必要があります。それ以外の場合は、実際にはオプションではありません。従業員をまったく信頼しない場合、従業員を不信にして時間をかけすぎ、信頼の問題のためにフープを飛び越えて多くの時間を浪費しているため、従業員は効果的でない可能性があります。

また、あなたが彼らを信頼していないことを人々に明らかにすると、彼らはイライラする傾向があります。そしてイライラするプログラマーは、結局、そのように扱われていない別の仕事を見つけます。

正しい解決策は、基本的な身元調査、よく考えられた雇用契約、そしてある程度の信頼です。

35
Michael Kohne

私は分類されたコンピュータシステムのコードを書いていたものです。彼らはそれを秘密にしておくためにジャンプするあらゆる種類のとんでもないフープを持っていました。たとえば、音楽CDを特定の部屋に持ち込むことは、CD-RWを偽装する可能性があるため許可されませんでした。

問題は、作業の実用性により、必要以上にセキュリティホールが開かれることです。時にはhad分類されていないデータ/コードを分類された領域に、または分類された領域から転送して、ジョブを完了させます。はい、そのためのルールと手順もありましたが、結局のところ、それらはすべて信頼できる人々にまで煮詰められました。分類されたデータを便利なUSBメモリに入れないように人々を信頼する代わりに、まったく同じ人々がすべてのセキュリティフープを通過することを信頼しているだけです。

言い換えれば、部外者から保護するためにできることはたくさんありますが、いったん入れてしまえば、どれだけ彼らをいらいらさせたいのかという問題です。

22
Karl Bielefeldt

要するに秘密保持契約/契約が必要ですあなたが雇っている従業員と。この署名された契約に加えて、開発者を雇う信頼できる

技術的に言えば、そのコードは簡単にデバイスにコピーされ、別の場所で再利用できます。上司が望まないのは、このコードへの競合他社のアクセスです。このようなポリシーは、雇用契約またはパートナーシップを通じてのみ実施できます。

情報の機密性に関するトレーニングを提供し、情報の機密性が侵害されたときに各従業員にどのように警告するかを指定できます。さらに、オフィスネットワーク内でコンピューターのアクティビティを追跡すると、警告レベルも上がります。

PHI関連情報 を扱う従業員に対して、同様のタイプのトレーニングが毎年行われます。

ただし、信頼できる人を参加させ、この情報を保護する方法をトレーニングすることは、最適な方法かもしれません。

16
Yusubov

Paycheck はベン・アフレックと一緒に見ましたか? IPが「盗まれる」ことを保証する唯一の方法だと思います。私の記憶のおかげで、私がこれまで取り組んできたほぼすべてのシステムを、かなりの時間にわたって再作成できたことがわかります。行ごとのレクリエーションではない場合でも、私は重要な要素を生み出し、おそらく私のスキルが長年にわたって成長してきたため、その過程でそれらを改善することができました。

単純明快ですが、コードを「ロックダウン」することによって達成できることは2つだけです。

  1. あなたはあなたの明白な信頼の欠如に腹を立てている良い開発者を撃退します
  2. あなたはより悪質な開発者を誘惑する大きな旗を掲げます

あなたのソフトウェアがその斬新で素晴らしいと思うなら、特許を取得してください。

13
Michael Brown
  1. コードのリークを防ぐことはできません。リークを重要度の低いコードに制限できます。
  2. 通常、それをユニークにするのはアプリケーションの一部だけです。それは何らかのアルゴリズムでしょう。これは非常にうまくインターフェースでき、これを別のソース管理ブランチに置くことができます。あなたとそれに取り組む必要のある人々だけがそれにアクセスできるべきです。バイナリ(難読化された)と他の開発者へのインターフェースのみを提供します。
  3. コードをより多くのモジュールに分割し、特定のモジュールでのみ作業できるようにします。他のモジュールはバイナリで提供されます(難読化されています)。ただし、これを拡張しすぎると管理できなくなり、コードが重複する可能性があります。
11
tofi9

このような環境で働いていた人を知っています。

そこで行われたいくつかの措置:

  1. 物理的なコンピューターにアクセスすることはできませんでした。すべてのコンピューターは、ディスプレイ、キーボード、およびマウス用の壁に穴が開いた鍵のかかった部屋に保管されていました。

  2. インターネットにアクセスできません。

  3. 暗号化された自社製のファイルシステムを使用したカスタマイズされたオペレーティングシステム(コンピューターが盗まれた場合)。

  4. プロジェクトは静的ライブラリに分割され、誰もソースコード全体にアクセスできませんでした(もちろん、これはすべてのプログラミング言語に当てはまるわけではありません)。

  5. とても不愉快な職場でした。

9
yms

社外の人々に対してソースコードの価値を過大評価しないように注意してください。

確かに、あなたはそれを開発するために多くのエンジニア(開発者、QAなど)に多くのお金を払ったが、それはそれがサードパーティにとって本質的に価値があることを意味するのではない。

どのような正確な攻撃が存在しますか?

ソースコードは、ゲーム開発会社やITセキュリティ会社などから漏洩することがよくあります。もちろん、このようなリークは見栄えを悪くしますが、それ以外の場合、実際には害はありません。

自問してみてください:

  • あなたはソースコードの品質にとても恥ずかしいですか、それを漏らすことはあなたの評判を損なうでしょうか?
  • ソースコード自体に機密の秘密(ハードコードされた暗号化キー、他の会社との金銭的関係の詳細など)が含まれていますか?それでいいの?
  • 競合他社は、発見されるリスクがあっても、ソースコードを使用することで本当にメリットがあるのでしょうか。

私の知る限り、あるITセキュリティ会社のスタッフがソースコードを競合他社に売り込もうとしたケースがありました。競争相手は直ちにこれを雇用主に報告し、すぐに解雇されました。お金は変わりませんでしたが、スタッフメンバーはITセキュリティ業界で簡単に作業できなくなりました。

9
MarkR

信頼する必要がありますが、違反を監視するだけの方が良い場合もあります。たとえば、コードを実行すると、コードが実行されるたびにインターネット上の一部のIPアドレスに電話をかけて、IPアドレス、コンピューター情報、さらには実行されている場所のGeoの場所をログに記録できます。そのログを確認して問題を探します。

もちろん、それを回避する方法はあり、開発者はコードを見ているだけで、コードを実行していません。

Snort などのパケットインスペクションを実行するようにファイアウォールを構成できます。これにより、a)検出された場合に接続をすぐにブロックできます。あなたの著作権情報、およびb)フォローアップのために経営陣に報告します。 SSLとHTTPSを回避するには、ファイアウォールでHTTPSプロキシを実行している必要があります。

おそらく、すべてのPCにシステムユーティリティをインストールして、外部ドライブとUSBフラッシュドライブに接続されている特定のファイルやキーフレーズをチェックすることができます。あなたは彼らがあなたのハードウェアを使うことを要求しなければならず、家からどんなハードウェアも持ち込んではいけません。

おそらく、誰かがコンピュータで行うすべてのことを記録するプログラムが利用できるでしょう。これらのログのランダム監査をスケジュールし、開発者がこの機能を知っていることを確認してください。

違反を見つけたら、NDA彼らが署名したものを頭にかざします。

5
Scott Whitlock

技術的な解決策は、RDP(またはVNC)セッションを提供するために必要なものを超えるネットワークアクセスがない(または厳しく制限され監視されている)サーバーですべての開発セッションをホストすることです。そうすれば、ソースが開発者のマシンに存在することはありません。また、自宅やクライアントサイトからの作業も可能になります。

しかし、結局のところ、全体の状況は失敗の危機に瀕していると思います。開発者に信頼していないことを明らかにし、その仕事を難しくする場合、私見は、開発者willがソースを公開する方法を見つける環境を作成していることになります。 「それを男に貼り付けなさい」。

5
TMN

あなたは、ソフトウェアエンジニアリングの仕組みを理解していない人々のために働いています。さらに悪いことに、彼らはそれを重視していません(彼らがそれから得ることができるものだけ)。彼らのために生産的に働くことは不可能でしょう。最終的に、彼らはあなたを罰します。別の仕事を探す。

2
itsbruce