実際のGitリポジトリのプライバシーについて少し

ロゴマーク



はじめに



こんにちは親愛なる読者。 今日、私たちは議題について少しテストしています-

インターネット上のサイトの人気で最初の約10万( Alexa Rankでのトラフィック統計に基づくランキング )。 このテストの焦点は非常に狭いことに注意してください。つまり、目的のURLでWebから直接認証せずに、各サイトでGitリポジトリの存在とオープン性を確認します。 このようなセキュリティ侵害により、サーバー上の現在のソースコードを読み取り、機密情報(構成ファイル、システム構造など)を取得し、その後、サーバーで特定の種類の権限を取得できることがよくあることを思い出してください。 あらゆる種類の悪役のための楽園、そして:)

私は約100日前に自分自身で完全に同様のチェックを行いましたが、今日は再度行い、何が変わったのか、どうすればよいのかを確認します。

もちろん、 最初のテストの一部として取得したサイトのリストを使用します。

恵みに興味がある人のために、猫をお願いします。



*記事に記​​載されているすべての情報は、研究および教育目的でのみ提供されています。



何が起こっているの?



そのため、最初にサイトの数が最小ではないことを理解する必要があります。もちろん、手動による検証は行えません。 ソリューション-検証用の自動化ユーティリティを作成します。

一般的に言えば、実際には、十分な検証条件は非常に簡単です。

http(s)で読み取り可能な構成ファイルがある場合、 Gitリポジトリは開いており、許可なくWebからアクセスできると仮定します ://sitename.com/.git/config( 面白いことに、このファイルにはデータも含まれていますgitサーバーに接続しますが、これは完全にオプションです )。



ここでの主なポイントは、多くの開発者が/.git/ディレクトリの表示へのアクセスをブロックしますが、その中のファイル/ディレクトリへのアクセスを閉じることを忘れることです。 したがって、構成を読み取ることができた場合、ほぼ常にファイル/.git/index (すべてのファイルを含むリスト)を読み取ることができ、実際には、使用可能なすべてのソース( /.git/objects/ディレクトリから、 blobオブジェクトを元のファイルビューに変換する)。 これを行うには、任意のgitダンパー(たとえば、 これ )を使用するか、独自のダンパーを作成します。



テストと分析



この情報を使用してユーティリティを作成し( ここでメインコードを参照できます)、上記のテーマを確認すると、次のようになります。

テスト#1

日付:2016年12月11日

テストしたサイトの数: 99991

オープンGitリポジトリ: 639 (全体の0.64%)



テスト#2

日付:2017年3月21日

テストされたサイトの数: 99991 (最初と同じサイトのリスト)

オープンGitリポジトリ: 599 (全体の0.60%)


自宅のラップトップ(インターネット接続速度が20 Mbps)でのユーティリティの動作時間は約16分であり、それほど長くないことは注目に値します。

したがって、 100日で、 「開いている」リポジトリの数(サンプルから)が40個減少しました。 これは、元の金額の約6%です。

何人の開発者が考えを変えましたか? いいえ、そうは思えません(このようなペースでは、このサンプルの問題の修正は4〜5年後にしか期待できません)。

一般的に、もちろん、開いているリポジトリの割合は小さいです。 しかし、一方で、たとえば100万のサイトのサンプルを取ると、これは同様のギャップを持つ約10,000のサイトです。

同時に、Alexa Rankによると、これらは最も人気のあるサイトであり、保護する必要があることを理解する必要があります。 おそらく、リストのさらに下にあるほど、オープンなリポジトリが見つかる頻度が高くなります。

見つかったサイトの中には、非常に多くの視聴者がいるサイト(1日あたり1kk以上)、さまざまな教育機関( ロシアの一流大学、一部はWebセキュリティの分野を卒業している )などのリソースが見つかりました。 これは悪名高いアーカイバーのサイトにさえ罪を犯します。

画像

*受信したソースコードの例。SQLダンプと認証シートに注意してください。



攻撃ベクトルの変種



読者が開発者のこの監視の危険性をよりよく理解できるように、サーバーをハッキングするための可能なシナリオの1つを投げます。

  1. オープンgitリポジトリが見つかりました
  2. Gitaをダンプして、サイトのソースコードにアクセスしました
  3. ソースの中にconfig.php / database.phpのような名前のファイルが見つかりました
  4. ファイルにある機密情報。 つまり、サイトデータベース( MySQL DBMSなど)に接続するためのデータ
  5. PhpMyAdminもサイトで見つかりました-彼らは上記のアイテムのデータを使用してデータベースに接続しました
  6. 管理者からカップルのユーザー名とパスワードを見つけました(おそらくパスワードハッシュを解読した後)
  7. 管理パネルを介して、サーバー上で悪意のあるコードを実行したり、シェルをアップロードしたりしたなど
  8. その結果、何でも。 提供される目標と機会に依存


そして、これは特定の状況を必要とする最も簡単なシナリオではありません。

非常に悲しいことですが、多くの場合、開発者はデータベースのバックアップをリポジトリに直接保存することを好みます。 その後、ダウンロードするためだけに残り、機密情報を見つけたため、サーバーに適用します。

また、ソースを調べた後、リソースの管理を可能にする他の脆弱性( SQLインジェクションなど )または実行可能ファイルへのパスを見つけることができます。 または、利用可能なすべてのソースを単に「マージ」します。 多くのオプション。



最も興味深いのは、ほとんどすべてのプロセス(マイニングサイトのURLからソースまで)を自動化できることです。 さらに、そのようなソリューションはすでに存在し、攻撃者はリソースの収益化に成功しています。



チェックしたサイトと結果ファイルのリストは、もちろん、私は与えません。 必要に応じて、サイトのトップを取得し、自分でテストできます。



自分を守る方法は?



要約すると、gitリポジトリのプライバシーに関する主な手順に注意してください。

  1. Webからリポジトリディレクトリへのアクセスを完全にブロックします(すでに探している場合)。 ファイルおよびサブディレクトリの読み取り(これを行う方法はWebサーバーによって異なります)。 そのような/.git/config、/.git/indexおよびその他のファイルを読み取れないことを確認してください(これらのファイルがなくても、 /。git / objects /フォルダーにアクセスできる場合は、アドレスをソートしてソースをマージできます。目と手)。
  2. たとえば、 .gitignoreを使用すると、リポジトリからの機密情報(バックアップ、構成など)を持つファイル無視されます。それらは完全に不要であり、深刻なセキュリティリスクをもたらします。 この項目を実行するとき、たとえ攻撃者がリポジトリに侵入しても、重要なことは何もできません( あなたの悪いスタイルのプログラミング見た場合を除き、彼ソースコードを奪うことができます)。


これらのルールに従うことにより、上記の状況を回避できます。 ただし、Webアプリケーションに対する他の種類の攻撃を忘れないでください(だけでなく)。しかし、この記事ではそれらについては説明しません。 それらはリポジトリに関連付けられていません。



ピーターはあなたと一緒でした

ご清聴ありがとうございました。



All Articles