HabrHabrの例に対する攻撃からサイトを保護します





朝早く、Habrは彼の新しいアップデートを「ロールアウト」しました。そして、私は、明確な良心をもって、この記事をドラフトコピーから取り出しました。

昨日、私は壮大な失敗に見舞われ、上記のアップデートに関するラインを含むこのトピックの一部は、数秒間公開されました。 これらの数秒間、トピックは何人かの人々にプラスされました。

もう一度、今公になって、私は行政に謝罪します!

他人へのアドバイス-このような情報を下書きに保存しないでください。



最近、インターネット上で、サイトをハッキングするすべての基本的な方法を詳細に説明する「Beginner Hackers」のマニュアルを多数見つけることができます。 これにより、Web開発者はより賢くなり、すべての可能な保護方法を採用したと思いますか? そうは思いません



この記事では、ウェブサイトがどのように壊れているかについて開発者にもう一度伝えたいので、あなたが退屈しないように、途中でHabrを破り、どうやってそれを行ったかを詳しく説明します。 「プロファイル内のアクティブなXSS」、「カルマの無限のゼロ化」、「「サンドボックスから」アイコンを使用したトピックの公開」、「Flash経由のCSRFおよびInternet Explorer 6の穴」など、興味深いことを検討します。



すべての脆弱性はすでに修正されています。 まあ、またはほとんどすべて。 したがって、別のホールを見つけた場合は、 support @ habrahabr.ruに書き込みます。このメールを誰も読まないという神話は単なる神話です。



参加する代わりに



ここで、最初に、私の意見でいくつかの非常に重要なことをお話ししたいと思います。



まず、誰がクラッカーで、何が必要か(これは間違っているため、「クラッカー」とは呼ばないでくださいこれは間違いであり、ハッカーは誰も壊さないからです) 。 私は誰かを怒らせたくはありませんが、ほとんどの場合、これらの主な目標はお金を稼ぐことではなく、システムにハッキングする量と自己満足感を得ることを主な目的とする15〜17歳のティーンエイジャーです。



多くの場合、開発者は自分のサイトを壊すことは誰にも起こらないと考えています。 しかし、今説明したタイプのクラッカーはこれを必要としないため、脆弱性を簡単に見つけて改ざんします(原則として、メインページの代わりにメッセージを配置し、ブラックロードはすでにHabrHabrでこれを数回行いました:-) 単純な脆弱性さえ見つけられない場合があるため、既製のエクスプロイトを使用します(このような人々は「スクリプトキディ」とも呼ばれます 。 この方法で、すでにいくつかのヒントを提供できます。



今、私たちの「キャラクター」が成長し、仕事を探し始めたと想像してみましょう。 彼は何をするでしょうか? そう、お金のためにハッキング。



このタイプは、本当に興味深いものが何もないサイトにとって、もはや特別な危険ではありません。 彼は現在、主に「順番に」、しばしば小グループで働いています。



一般に、アドバイスは同じですが、お金のためにサイトの脆弱性をチェックし、結果を伝える人に少しだけ投資する必要があります。



ちなみに、このような「専門家」は、原則として、退職して現在完全に平和な方法で生計を立てている同じクラッカーです。



XSSまたはクロスサイトスクリプティング



非常によく使用されるタイプの脆弱性。 これを使用するには、攻撃者はHTMLとJavaScriptの基本的な知識さえあればよく、その結果、上記のすべての種類の「文字」に適用されます。 この場合、誰もサーバーをハッキングするつもりはなく、実際、攻撃は脆弱なサイトのユーザーを標的にしていることに注意したいと思います。



この場合のWeb開発者の主なエラーは、ユーザーから受信したデータのフィルタリングが不十分であることです。



XSSは、サイトのどこかに存在し、被害者を待っているアクティブXSSと、クラッカーがソーシャルエンジニアリングを使用して被害者に送信するパッシブXSSの2つの主要なグループに分かれています。



Habrが「私たちを幸せにする」ことができる方法を見てみましょう。 英国の科学者は、クラッカーの95%が自分自身を呼び出すことを発見しました



" onmouseover="alert('XSS')" style="
      
      





プロファイル設定に入り、「本名」フィールドにこのフレーズを入力します。 [保存]をクリックして、ページを更新します。 マウスを見つけて、何らかの理由で空のフィールドの近くに動かそうとします-ウィンドウが表示されましたか? おめでとうございます、脆弱性が見つかりました!







このような脆弱性は、システムがユーザーからの情報を部分的にフィルター処理またはフィルター処理しない場合にしばしば忍び込みます。 PHPで記述する場合、非常に優れたhtmlspecialchars



関数が用意されているため、問題をほぼ完全に解決できます。

つまり、ユーザーにすべてのタグを使用する機会を与える必要はないということです。また、許可されたタグに何かを挿入したかどうか、また上記の例のようにフィールドから出たのかどうかを注意深く確認する必要があります。



HabrでパッシブXSSの例を見つけることができなかったため、その本質を言葉で説明します。



それらを見つける最も一般的な場所は検索です。 サイトで「検索」してみてください。



 <script>alert(1)</script>
      
      





または



 "> <script>alert(1)</script> <!--
      
      





ウィンドウに数字の「1」が表示された場合、サイトはこのような攻撃を受けやすくなっています。 クラッカーが特別なリンクを送信するだけで十分です。クリックすると、アカウントへのフルアクセスが与えられます。 意味はActive XSSと同じですが、クラッカーはあなたにリンクを「送る」だけです!



他の受け入れられた情報を確認する



HTMLタグと引用だけでなく、ユーザーから受け取ったその他の情報もフィルタリングする必要がありますロジックに従うことと、ユーザーを信頼しないことが特に重要です。 例をあげる必要はありません。Habréのトロルの大事な夢である「無限に無効化されたカルマ」は、今日まで実現可能です:-)



すでにカルマをリセットしていて、もう一度やり直したい場合は、ブラウザの「開発者ツール」を使用して非表示のフォームを表示し、「リセット」をクリックするだけです!



たとえば、「virtualchik」を作成し、カルマを彼に流し込み、無効にし、再びマージし、再び無効にします...











公平のために、私の親愛なるvirtualchikがこのために読み取り専用モードになったことは注目に値します。 アカウント自体が失われていないのは良いことです。



非常に興味深い例を挙げます。 新しい記事を公開するか、古い記事を編集するときに、「topic_type」フィールドを「sandbox」に置き換えると、「From the sandbox」ボックスを取得できます。







なぜこれが必要なのですか? よくわからない、たとえば、そのようなトピックは多くの場合プラスです...



この場合、何をアドバイスできますか? もちろん、ユーザーが送信するものを制御してください! カルマをリセットするリクエストが送信された場合、ユーザーが以前にそれをクリアしたかどうかを確認し、ユーザーがトピックを「サンドボックスから」公開しようとする場合、それが本当にそこからであるかどうかを確認します。



SQLインジェクション



このような脆弱性は、初心者のWeb開発者の間では非常に一般的です。 私はHabréでそのようなものを見つけることができませんでしたが、あるhabro-userはPMで私にそれがそうであると主張しました。 私は彼の実験を繰り返したが、何も起こらなかった-彼らはおそらくそれを閉じた。



保護するために、リクエストのロジックに違反する可能性のある引用符やその他の特殊文字をフィルタリングする必要があります。 また、数字がある場合は、明示的に数字にキャストしてください。



CSRFの脆弱性



BubmburumがスーパーフラッシュドライブでHabrの征服を始めた場合、昨年見つけたCSRFの脆弱性のおかげで、一晩でTOP5ユーザーになりました。



ここで私のトピックを読むことができます 。 私は最近別のものを見つけたので、これを書いています。彼女は、Internet Explorer 6を使用したユーザーの助けを借りて、私の仮想チクをHabrに招待できたからです。



保護のために、各フォームまたは重要なリクエストに、攻撃者が知らない特別なcsrfトークンを挿入する必要があります。 一部のフレームワークは、このトークンをフォームに自動的に挿入します。



関連リンク



ウィキペディア-XSSSQLインジェクションCSRF



私の意見では、すべての主要な脆弱性をまとめて説明する別の興味深い記事です。







All Articles