私はIT学生で、大学3年生です。これまで、コンピューターに関連する多くのテーマ(プログラミング、アルゴリズム、コンピューターアーキテクチャ、数学など)を研究してきました。
誰もがセキュリティについてすべてを学ぶことができないと確信していますが、すべてのプログラマーまたはIT学生がそれについて知っておくべき「最低限」の知識があり、私の質問はこの最低限の知識は何ですか?
電子書籍やコースなど、この道を始めるのに役立つ何かを提案できますか?
私はIT学生で、大学3年生です。これまで、コンピューターに関連する多くのテーマ(プログラミング、アルゴリズム、コンピューターアーキテクチャ、数学など)を研究してきました。
誰もがセキュリティについてすべてを学ぶことができないと確信していますが、すべてのプログラマーまたはIT学生がそれについて知っておくべき「最低限」の知識があり、私の質問はこの最低限の知識は何ですか?
電子書籍やコースなど、この道を始めるのに役立つ何かを提案できますか?
回答:
アプリケーションを安全にしたい場合に覚えておくべき原則:
アプリケーションを安全にするための優れた書籍や記事がオンラインでいくつかあります。
アプリケーションセキュリティのベストプラクティスについて開発者をトレーニングする
コードバッシング(有料)
セキュリティイノベーション(有料)
セキュリティコンパス(有料)
OWASP WebGoat(無料)
プログラマのためのセキュリティのルール#1:自分でロールバックしないでください
あなた自身がセキュリティの専門家や暗号技術者でない限り、常に適切に設計され、十分にテストされ、成熟したセキュリティプラットフォーム、フレームワーク、またはライブラリを使用して作業を行ってください。これらのことは、専門家やハッカーによって同様に何年にもわたって考えられ、パッチが当てられ、更新され、調査されてきました。あなたはそれらの利点を手に入れたいのであって、車輪を再発明しようと試みることによってそれらを却下するのではありません。
だからといって、セキュリティについて何も学ぶ必要がないというわけではありません。自分が何をしているのかを理解し、ツールを正しく使用していることを確認するのに十分な知識が必要です。ただし、独自の暗号化アルゴリズム、認証システム、入力サニタイザーなどを書き始めようとしている場合は、停止し、一歩下がって、ルール#1を覚えておいてください。
すべてのプログラマーは、エクスプロイトコードの記述方法を知っている必要があります。
システムがどのように悪用されるかを知らなければ、誤って脆弱性を阻止していることになります。パッチのテスト方法を知らない限り、コードにパッチを当てる方法を知っていても、まったく意味がありません。セキュリティは単なる思考実験の集まりではなく、科学的であり、実験をテストする必要があります。
セキュリティはプロセスであり、製品ではありません。
多くの人はこの明らかな事実を忘れているようです。
CWE / SANS TOP 25 Most Dangerous Programming Errorsを確認することをお勧めします。2010年に更新され、将来の定期的な更新が約束されています。2009年改訂版も同様に利用可能です。
http://cwe.mitre.org/top25/index.htmlから
2010 CWE / SANS Top 25 Most Dangerous Programming Errorsは、深刻なソフトウェアの脆弱性につながる可能性のある、最も広範囲で重大なプログラミングエラーのリストです。彼らはしばしば見つけやすく、悪用しやすいです。攻撃者がソフトウェアを完全に乗っ取ったり、データを盗んだり、ソフトウェアがまったく機能しなくなったりすることがよくあるため、危険です。
トップ25リストは、ソフトウェアが出荷される前に発生する一般的な間違いを特定して回避することにより、プログラマーがソフトウェア業界を悩ます種類の脆弱性を防止するのに役立つ教育と認識のためのツールです。ソフトウェアのお客様は、同じリストを使用して、より安全なソフトウェアを要求することができます。ソフトウェアセキュリティの研究者は、トップ25を使用して、既知のすべてのセキュリティの弱点の狭いながらも重要なサブセットに焦点を当てることができます。最後に、ソフトウェアマネージャーとCIOは、ソフトウェアを保護するための取り組みの進捗状況を示す指標として、トップ25リストを使用できます。
コンピュータネットワークとセキュリティの MITコースがよいスターターコースかもしれません。私が提案したいのは、プライバシーを忘れないことです。プライバシーは、ある意味では、セキュリティの基盤であり、セキュリティに関する技術コースではカバーされないことがよくあります。プライバシーと倫理に関する法律のこのコースでは、インターネットに関連するプライバシーに関する資料が見つかるかもしれません。
フレームワークとAPIにおける安全なデフォルトの重要性:
3つのAについて知っておく必要があります。認証、承認、監査。古典的な間違いは、ユーザーを認証することですが、ユーザーが何らかのアクションを実行する権限があるかどうかをチェックしないため、ユーザーは他のユーザーのプライベート写真を見る可能性があります。安全なシステムでは、誰がいつ何をしたかを知ることができるようにするために、多くの人々が監査について忘れています。
以下を追加します。
さまざまな攻撃ベクトルがどのように機能するかを理解します。
これらすべてを簡単にグーグルできます。これはあなたに良い基盤を与えるでしょう。Webアプリの脆弱性を確認したい場合は、機能しているWebアプリを悪用する方法を示すgoogle gruyereというプロジェクトがあります。
企業や独自のソフトウェアを構築しているときは、ハッカーのように考える必要があります。ハッカーもすべてのことを熟知しているわけではないので、脆弱性を見つけると、すべての情報を収集することで、ハッカーを掘り下げます。物事、そして最後に私たちのソフトウェアへの攻撃です。そのような攻撃を防ぐために、私たちは次のようなよく知られたルールに従う必要があります:
次のリンクでより多くのセキュリティリソースを見つけることができます。
アプリケーションベンダーのセキュリティフローの詳細については、Googleをご覧ください。
セキュリティに関する一般的な情報については、Bruce Schneierを読むことを強くお勧めします。彼はウェブサイト、彼の暗号文のニュースレター、いくつかの本を持っています、そしてたくさんのインタビューをしました。
また、ソーシャルエンジニアリング(およびKevin Mitnick)にも慣れます。
現実の世界でセキュリティがどのように機能するかについての優れた(そしてかなり面白い)本として、クリフストールの優れた(少々古くはありますが)「The Cuckoo's Egg」をお勧めします。
また、すべての主要な攻撃ベクトル/脆弱性の分類については、OWASPトップ10リストを必ず確認してください。
これらのことを読むのは魅力的です。攻撃者のように考えることを学ぶことは、あなたがあなた自身のコードを書いているときに何を考えるべきかについてあなたを訓練するでしょう。
これをWeb開発者のために共有したかっただけです:
security-guide-for-developers
https://github.com/FallibleInc/security-guide-for-developers