セキュリティ会社のプログラマーは何をしますか?


10

クライアントシステムのセキュリティについて相談するセキュリティ会社を聞いたことがあります。私がこの分野で知っている人はすべてネットワークエンジニアですが、プログラマーもセキュリティに関与していることは知っています。監査/コンサルティングを行うセキュリティプログラマは実際に何をしますか?彼らは文字通り、人々のレガシーシステムのすべての脆弱性を探すコードベースを通過しますか?私はいつもそれが彼らのしたことだと思っていましたが、これは非常に信頼性が低く、誤った安心感を提供する以上のことはしないようです。注:私は、暗号化アルゴリズムなどを書くプログラマーについてではなく、ソフトウェアのセキュリティ監査/コンサルティングに関係するプログラマーについてのみ話します。


1
より多くのセキュリティ関係者を対象に、security.stackexchange.comを自由に閲覧してください!
ロリー・アルソップ

1
^彼の発言、私たちはどちらもプロのモデレーターです。

回答:


12

率直に言って、私たちはあなたのコードベースを通過しないように努めます、私たちはそれを行うためのツールを書こうとします。

まず、理論。セキュリティはソフトウェアシステムの要件であるため、他の要件(機能性、使いやすさ、アクセシビリティ、パフォーマンスなど)と同様に、要件の収集から展開および保守までのソフトウェアエンジニアリングワークフローのすべての段階で考慮する必要があります。実際、これは可能であり、ソフトウェアプロジェクトチームがそれを行うのに役立つガイダンスが存在します。私は主にiOS開発者と協力していますが、「安全な開発ライフサイクル」についての私のお気に入りの説明はMicrosoft Pressからのものです。

このモデルでは、ユーザーから要件を引き出そうとするときにアプリケーションのセキュリティが始まります。私たちは彼らのセキュリティとプライバシーの懸念を発見する必要があります。これは私たちがユーザーではなく専門家であり、彼らがセキュリティ要件を理解している場合、それらを表現するのは難しいと感じるかもしれないため、簡単ではありません。また、ソフトウェアが展開時にさらされるリスクと、許容可能なリスクのレベルを発見する必要があります。

これらの要件を満たすことを念頭に置いてアプリケーションを設計します。これらの要件を満たし、コードレベルのセキュリティミスに関連する追加のリスクを回避することを目的として、コードを記述します。ソフトウェアをテストして、セキュリティのモデルが実際に構築したものと一致していることを確認してから、設計時に環境について行った仮定に一致する方法でソフトウェアを展開します。最後に、ユーザーがセキュリティ要件に一致する方法でソフトウェアを操作できるようにサポートとメンテナンスを提供し、提示されたリスクの新しい変化にユーザー(および私たち)が対応できるようにします。

理論についてはこれで終わりです。では実際に(非技術系のファッションにもかかわらず)非常によく説明されている理由のためGeekonomics、主な方法のソフトウェア会社が動機づけられて、彼らのために、上記のもののほとんどは発生しませんです。代わりに、これを取得します。開発者は:

  • 警備員またはギャルを雇って、彼らが契約に入札しているときに、警備員が「手に入れられる」ことを示すために立ち会います。
  • ソフトウェアを書く。
  • セキュリティ担当者またはギャルを雇って、リリース前にソフトウェアを検証し、ステップ2で発生した多くの問題を修正します。
  • 展開後にその他すべてにパッチを適用します。

したがって、ほとんどのアプリセキュリティの人々が実際に行っているのは、あなたが言うように、バグを見つけることです。これは本当に素晴らしいコードレビューですが、このレビューが探している種類のバグの専門家である人々によって実行される非常に焦点を絞ったコードレビューなので、それを行うために外部の助けを得ることにはまだ価値があります。もちろん、これはテティングの一般的なルールです。常に、他の人にテストに参加させて、モノの作成に関わっていない人をテストしてください。

上記をtrueとして受け入れた場合、購入を決定する人々は「有能なセキュリティ担当者」を「多くのバグを発見すること」と同一視する可能性が高いということになります。コンピューターに仕事を任せる人は、そうでない人よりも多くのバグを見つけます。そのため、当然、静的分析ツールに大きく依存しており、特定のクライアントの特定の問題のコーディングよりもツールの拡張に多くの時間を費やすことを目指しています。次に、アプリのセキュリティ担当者は、コードを読み取るよりも、コードを読み取るためのツールを書く可能性が高いと結論付けます。

**警告:残っているのは個人的な意見と推測です**

現実は壊れています。ソフトウェアセキュリティの理論はすべてソフトウェアシステムに依存するリスクを特定して対応することに関するものであり、実践はできるだけ多くのバグを見つけることに関するものであることに気付くでしょう。もちろん、それでもリスクは軽減されますが、副作用としてのみです。ゲームのポイントはゲームに「勝つ」ほど重要ではなくなったため、勝ちやすくなるようにルールが変更されています。

それについてソフトウェア開発者として何ができますか?元のルールに従ってゲームをプレイします。セキュリティの重要性を理解し、彼らからベジーズを訓練するチームの誰かを見つけます(できれば、実際には請負業者ではなく、チームのメンバーであることが望ましいです。そうすれば、彼らは迅速な勝利よりも長期的な結果を提供するように動機付けられます)。その人に、私の回答の冒頭で説明したエンドツーエンドのセキュリティを提供するようチームに指示する責任を与えます。

また、その人にをフォローする権限を与えます。設計がセキュリティ要件を表していない場合は、それを修正する必要があります。実装がセキュリティ要件を満たさない場合は、リリースしないでください。セキュリティ担当者は判断を下すことができますが、その判断に基づいて行動することが許可されている必要があります。これはセキュリティ担当者が「OMFGセキュリティが最も重要なこと」と言っているように聞こえるかもしれませんが、それは私が言っていることではありません。製品が機能性、使いやすさ、またはパフォーマンスの要件を満たしていない場合も、リリースしないでください。

なぜそうしたいのですか?それはもっと安くあるべきです:私たちは皆、コード補完表を見てきました(そしておそらく安い+10担当者のために引用されています)。セキュリティの欠陥も欠陥です。私は実際のゲームのルールです。それらのほとんどは、メンテナンスで修正される要件の問題です。安いですか?

さて、それを雇うためのセキュリティ銃として何ができますか?まあ、私も修正されたルールでプレーすることを拒否できることがわかりました。リスクを軽減することがすべてであり、すべての段階でこれを実行できることを開発者に伝えてから、開発者がそうするのを支援することができます。


あなたの立場にいる人にとって、あなたが議論にこれ以上提供できないことに驚いています。私はあなたが言わなければならないことを聞くことに非常に興味があります。
Steven Evers

あなたが正しい、私が答えを書いたとき私は疲れていました(時差ボケ)。少し記入してみます。

@snorfus良い答えが得られなかったことをお詫びします。本当にごめんなさい。

@Graham Lee:私はあなたに素晴らしい答えが隠されているのではないかと思っていました:)あなたの編集はそれだけを証明しています。ありがとうございました!
Steven Evers

@snorfus投稿する前に本当に考えるべきです。そして、私が考える状態にない場合は、投稿すべきではありません...

5

小規模から非常に大規模なアプリ、環境、システムなどに対して15年間セキュリティ保証プログラムを実行してきたことから、すべてが少しあると思います。私のチームでは、常にハードコアプログラマーを何人か抱えていました。

詳細レベルでは、その一部は非常に詳細なコードレビューに帰着します。例として、現在数百万行のコードベースに取り組んでおり、ツールを使用して考えられる問題を絞り込んでから、カテゴリー。

(確かに私は問題をリスクにさらさない理由を修正または説明するために開発者に引き渡します)

しかし、これは、この種のリソース集約型の作業を実行するためにリスクプロファイルが理にかなっている特定の契約です。

はるかに標準的で、はるかに費用対効果の高い方法は、組織のリスクプロファイルを理解し、リスクをトップダウンで集中することです。たとえば、

  • リスク選好度-ビジネスへの影響、脅威のモデリング
  • ガバナンス-規制遵守、報告など
  • ポリシー-ガバナンスフレームワークが効果的であることを保証するための定義
  • プロセス-技術的および人間的
  • 標準-各セキュリティコントロールの定義
  • 実装-方法

プログラミングの側面は、コードレビューとカスタム侵入テストを含めて、最後の2つだけです。組織によっては、重要度が非常に低い場合があります。たとえば、すでに広範囲にピアレビューされている(さまざまな暗号化タイプなどの)階層化されたセキュリティコントロールがある場合、実装を確認することはできますが、通常はすべてを再確認することはありません。以前と同じようにコードを書きます。


2
私は+ 1dしましたが、「この問題がリスクをもたらさない理由を説明するために」注意してください。多くの場合、開発者は自分が作成したもの(開発者として話す)を変更しない理由を見つけるでしょう。また、顧客のリスクを理解していない場合もあります。結局のところ、Windows 98を作成したのは開発者でした;-)

@Graham-あなたはそれが名前を付けられるべきではなかったことを言った:-)そして私はあなたの新しいより長いバージョンの答えが好きです!+1
ロリー・アルソップ

ああ、そうです。私はわざとそう言ったが、私はWindowsに98年から3年前の名前を付けたくなかったからだ。

1

設計中にアーキテクチャ/ベストプラクティスについて漠然とした方法で議論したり、完成したプロジェクトに対して攻撃/フリーズ/例外テストスイートを実行したりする以上のことは、これまで経験したことがありません。

ほとんどすべての場合、攻撃者が試みる攻撃ベクトルによってどのツールを使用するか、および監査の1つが既存のシステムを通過した後に攻撃が実行される方法を知ることさえできます。

実際にコードを調べてレビュー/ホワイトボックスのテストを行ういくつかの人がいると思いますが、実際にはまだそれらに遭遇していません。


あなたが常に取り組んでいる会社は安っぽくなってハックをしているように思えます。彼らは良いゲームを話しますが、実際にはポイントを獲得しません。私自身、そしてここにいる他の回答者のほかに、私は正しく動作する多くの人々と協力して訓練しました。確かに、私もおそらくあなたが持っていた種類のものにもっと会ったでしょう...
AviD

@avid私はそれを否定的であるとは言っていませんでした。最高額を支払ったなら、十分な競争会社を見つけることができると私は確信していますが、それでも、何かを改善/実装するためのアドバイスをするよりも、何かを購入するための多くの提案を得る傾向があります。十分なセキュリティレコードを持つ既知の製品を使用することは悪いことではなく、問題の領域に適切に適合する場合に適しています。OPはAUDITについて具体的に言及しており、年次サードパーティ監査の支払い範囲では、Roryの4番目のポイントの2番目、3番目、および1/2を通過します。
ビル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.