web-dev-qa-db-ja.com

セキュリティの専門家として改善する方法

私はウェブアプリケーションのセキュリティに高い関心を持つプロのソフトウェア開発者です。私はおそらく、平均的な開発者よりもWebアプリケーションのセキュリティについてよく理解していると思います。私の問題は、私の知識がWebセキュリティの理論的な部分に重点を置いていることです。つまり、たくさんの本を読んだり、ブログやメーリングリストをフォローしたりしますが、実際の経験は限られています。

私は脆弱性の根本的な原因を知っています。それらがどのように機能し、どのようにそれらを阻止するかを知っています。私がしたいことは、私の知識を次のステップに進めることです-私はその実践的な経験が欲しいです。私のキャリアのある時点で、おそらくセキュリティ関連のことをやることになると思いますが、少なくともフルタイムではありません。その間、特に侵入テストなどの分野で、Webアプリケーションのセキュリティに関する知識を深め、より多くの経験を積みたいと思っています。

あなたへの私の質問、私の愛するセキュリティ専門家、私が望んでいるその実用的な経験を得るために私にどんなアドバイスがありますか?侵入テストで使用されるさまざまなツールと手法について学ぶためにどのリソースを推奨できますか?

1つのオプションとしては、脆弱なWebアプリケーションをローカルにインストールし(Googleコードに少なくとも1つは存在するが、その名前を思い出せない)、OWASPのテストガイドなどのガイドを使用してさまざまな手法を試すことができます。しかし、私はおそらくより学習された学習方法、つまり意味のあるものを探しています。正しい順序で正しいことを実行していることを確認したいのです。言う。

どんなアドバイスでも大歓迎です。

33
KLE

自分でたくさんのことを学んでいるのは素晴らしいことです。あなたは正しい軌道に乗っています。自分で学習する熱意は、多くの競争相手に一歩先を行くでしょう。称賛。

私の主なアドバイスは次のとおりです。学習するすべての資料のパスを計画することについて、あまり心配しないでください。注意深く考え抜かれた計画は必要ありません。代わりに、手を汚し、遊んで、恐れずに探索してください。かっこいいものを見つけたら、日和見的にフォローアップします。最初は圧倒されるかもしれませんが、長期的には貴重な経験になると思います。

ソフトウェアシステムのセキュリティ評価に携わることは良い経験だと思います。これはあなたにとって楽しい経験になるでしょう。オープンソースのWebアプリケーションまたはWebプログラミングフレームワークを選択して、そのセキュリティ評価を行うことができます。アーキテクチャリスク評価(MicrosoftがSTRIDEなどを使用して「脅威モデリング」と呼んでいるもの)を実行し、コードを読んでセキュリティコードレビューを行うことができます。 、いくつかの静的分析ツールを試してください。次に、結果を書き込み、評価をブログに投稿します。これを数回行うと、この経験はあなたにとって非常に役立つと思います。

あなたにとってもう1つの非常に良い経験は、重要なWebアプリケーションを1つまたは2つ構築することです。習得が容易であることから、Webプログラミングフレームワークとしてweb2pyが好きですが、代わりに、より人気のあるもの(たとえば、Ruby on Rails、PHP or one一般的なフレームワークの問題を確認するには良い経験になるかもしれません。クライアント側のJavaScriptコードを使用してWebアプリケーションを作成します。jQueryなどの使用方法を学習します。Node.jsを試してみてください。Iこれは、Web開発者が直面する可能性のあるいくつかの課題と考え方に触れるための素晴らしい方法になると思います。

自分の個性によっては、ブログを作成し、学んだことを学んだら楽しいことを書き留めておくと楽しいかもしれません。多くの人にとって、何かを書き出す行為はそれをあなたの脳の中で固め、あなたにそれをよりよく理解することを強います。

Webアプリケーションのハッキングの練習について言及しました。 Webアプリケーションをハッキングする方法を学ぶのは楽しいものであり、ある程度までは価値があります。リスクについて考え、概念を具体化するために、Webアプリケーションをハッキングする実際の経験があるとよいでしょう。しかし、私はそれをあなたの学習の主な焦点にすることはしません。 Webペネトレーションテストは最近の低価格の活動であり、有望なキャリアチャンスが少ないため、Webペンテスターに​​なるための学習に力を注ぐことはお勧めしません。あなたが選択できるなら、それは私があなたに自分自身を配置することを勧める方法ではありません(そしてあなたがそうするように聞こえます)。

23
D.W.

私はあなたの状況と一致することができます:-)
私はこれまでしばらくの間、情報セキュリティコミュニティを巡って騒いでおり、基本的にはやりたいことにも取り掛かろうとしています。これらは、あなたの手を汚す方法について私が見つけたいくつかの指針です。

eLearnSecurity
個人的には、eLearnSecurityのコースを受講することにしました。

http://www.elearnsecurity.com/course/penetration_testing/

それは非常に実用的に考えられているため、セキュリティコミュニティで多くの注目を集めています。また、「コロッセオ」と呼ばれる設定もあり、脆弱なWebアプリの遊び場を自由に利用できます。

これは、これらの「人事のための認定」の1つではありません。それは適切に便利です。

[〜#〜] dvwa [〜#〜]
また、ライアンデューハーストと呼ばれる私の仲間によって作成されたくそー脆弱なWebアプリを見てみましょう: http://www.dvwa.co.uk/ -並べ替えOwaspのWebGoatのようですが、私の意見ではより良いと思います。例:脆弱性が表示され、次にPHPこれを防ぐ方法のコードが表示されます。
このような他のものと一緒のリスト: https://web.archive.org/web/20160527115615/http://punter-infosec.com/vulnerable-web-applications-to-learn -web-application-testing-skills

Agnitio
これは、セキュリティコードを確認するためのチェックリストベースのツールです。あなたはそれから多くを学ぶことができます。一般的には、SecurityNinja(David Rook)のブログをご覧ください。たくさんの良いものがあります。

https://web.archive.org/web/20160427080011/http://www.securityninja.co.uk/application-security/agnitio-v1-2-released-today/

EH-NET
チェックアウト http://www.ethicalhacker.net 、そこにはたくさんの良いポインタがあります。

チャレンジ/ウォーゲーム
これらは明らかな理由のために良いです:練習、練習、練習。それらの多くがあり、良いものには初心者とそれ以降の両方のレベルがあります。

http://www.thehexfactor.org/
https://web.archive.org/web/20160406111843/http://www.iriss.ie/iriss/hackeire.htm

これがあなたのお役に立てば幸いです。乾杯!

追伸:リンクがリンクにならないことについては申し訳ありませんが、私の評判が十分に高くないため、多くのリンクは許可されていません(これが私の最初の回答です)。

11
Dieter

http://google-gruyere.appspot.com/ は、対処できる実用的な問題をいくつか提供します。

このコードラボは、Webアプリケーションの脆弱性がどのように悪用される可能性があるか、およびこれらの攻撃から防御する方法を示しています。物事を学ぶ最善の方法は、実践することです。そのため、実際のアプリケーションを実際に利用して、実際の侵入テストを行う機会が得られます。具体的には、次のことを学びます。

  1. クロスサイトスクリプティングの脆弱性(XSS)やクロスサイトリクエストフォージェリ(XSRF)などの一般的なWebセキュリティの脆弱性を使用してアプリケーションを攻撃する方法。
  2. これらの一般的な脆弱性や、サービス拒否、情報漏えい、リモートコード実行などのセキュリティに影響を与えるその他のバグを見つけて修正し、回避する方法。
4
Mike Samuel

ロリー・アルソップの提案(上記)に従います。

雇用主/組織が定期的に外部の企業に脆弱性テストの実施を依頼する場合は、おそらくWeb /アプリの開発者として関与するよう依頼/要求/闘争/闘争を依頼してください。

これにより、実際に仕事をしている人と連絡を取ることができます(ゲームへの侵入方法を尋ねます)。

理論的な知識を活用することで雇用主を導くことができるかもしれません。実際に使用したテストツールを使用していなかったとしても、それらのツールが基本レベルで何をしているか、およびそれらのツールが何を開示することを意図しているかを理解することが役立ちます。

外部の会社から提出された作業の提案書を検討することは、彼らが意図していることについて建設的な提案をすることができるだけでなく、役に立ちます。私は現在の雇用主と一緒にそのようなドキュメントをレビューし、「ボイラープレート」と本当に意味のあるものを指摘することができました。そして、そのような仕事が行われるための引用を見ることができました。うわー!

最後に、テスターの結果の書面による報告は、悲観的な結果をもたらす場合がありますが、その後のリスク評価または軽減活動に参加するボランティアをする機会になる場合があります。

リスク評価といえば、D.W。がWebアプリに対して実行するという提案は良いものです。 STRIDEテンプレート/ツールをMSからダウンロードして(前回使用したときはVisioが必要です)、それを使用して完成品を作成できます。 MS DREADスケールを使用して、潜在的なリスクを測定することもできます。連邦リスク評価フレームワークであるNIST 800-30ドキュメントは、プロセスステップとレポートフレームワークのもう1つの優れた情報源です。 STRIDE、DREAD、NISTの出版物などのモデルはすべて、あなたが提示するすべての記事で「ベストプラクティス」の引用の確かなポイントになります。

最終的には、管理はあなたが作成するあらゆるアウトプットの消費者になります。彼らが理解して有用な何かを彼らに与えることは、あなたにその後のセキュリティ割り当てに必要な種類の暴露を与えるでしょう。

4
jl01

私はD.W.に敬意を払わなければなりません。フィールドとキャリアとしてのWebアプリケーションセキュリティの魅力について(ただし、私はここに偏っています)。非常にエキサイティングでダイナミック、そして成長している分野であり、多くのプレイヤーが大きな利害関係を持っていると思います。 Webアプリケーションのセキュリティに高い関心を持っている場合は、それをすべて受け入れます。これがあなたを刺激する場合、素晴らしいキャリアを構築し、興味深く、やりがいのある仕事をすることができます。とりわけ、それは非常にダイナミックなフィールドですので、次の20-30年間は飽きてはいけません! :)

いくつかのアドバイス:

  • より良い開発者になるための取り組みを続けます。設計、テスト、コーディングにおけるあなたの経験、それらの分野におけるあなたの専門知識は、セキュリティ分野に移行するときに間違いなくあなたを助けるでしょう。 「クラシック」な投稿を読むか、もう一度読んでください: http://www.gamedev.net/blog/355/entry-2250592-become-a-good-programmer-in-six-really-hard-steps / および http://www.norvig.com/21-days.html そして、実際の習得と理解への長い道のりを進み続けます-言語、コンピュータ、オペレーティングシステム、ネットワークを知るプロトコルなどを完全に内側から見ると、驚くべきブーストが得られ、セキュリティエリアで作業を開始するときに目立つようになります。

  • [ウェブアプリケーション]セキュリティコミュニティ(またはコミュニティ)に参加します。このサイトにアクセスすることが正しい最初のステップです:) Webアプリケーションのセキュリティのために-OWASPの章が近くにある場合(https://www.owasp.org/index.php/Category:OWASP_Chapter#Local_Chapters_by_Geographic_Region)に連絡してください彼らと彼らの集まりに来る。そうでない場合は、開始することを検討してください!

  • 可能であれば、OWASP、BlackHat、DefConなどの会議に参加する-または、Webサイト、投稿されたスライド、Webキャストを閲覧する

  • 「ロールモデル」を入手する-セキュリティトピック、投稿を閲覧し、フォローしているブログやTwitterアカウントをいくつか入手して、情報とインスピレーションを得ます。

  • webアプリケーションスキャナーを学ぶ-たとえば、W3AF http://w3af.sourceforge.net/ プロジェクトに参加して、プロジェクトの改善に役立てることもできます(または目的や興味により適したものにすることができます) )

  • モバイルまたはクラウドセキュリティ、あるいはその両方の詳細について検討する-どちらも非常に動的で有望な分野です

  • 最後に、より多くの本-十分な数はありません! :)「The Web Application Hacker's Handbook」(別名WAHH2)と「The Tangled Web」を必ずお読みください。重要な情報がある場合は、「Webアプリケーションの難読化」を検討することを検討してください。リーディングをより実用的で魅力的なものにするために、あなたが読んだものを説明したり、エクスプロイトやコードサンプルでいくつかのバリエーションを実行したりすることを試みてください。たとえば、数時間 http://mdsec.net/labs/ labs(WAHH2のコンパニオン)をシェルで実行し、他のトピックの同様のデモをコーディングしてみます。

2
dmitris