web-dev-qa-db-ja.com

セキュリティーCTFサーバーのセットアップ

ハッキングキャプチャーザフラッグチャレンジを実行した経験を持つ人々からのリソースと情報を探しています。

すべてを簡単な1文の質問にまとめると、次のようになります。(a)自分や他人を過度のリスクにさらさないようにしながら、非常に特定の脆弱性によってハッキングされるようにサーバーを設定するにはどうすればよいですか? 、および(b)1人の参加者が他の参加者の体験を台無しにすることを防止します。

これはハニーポットの実行と多くの共通点がありますが、大きな違いは、すべての訪問者が一貫したエクスペリエンスを維持することに重点が置かれているため、1人の訪問者が他の訪問者に対して「台無し」になることはありません。

少し背景として、これは競争として設定されているのではなく、プログラマーが悪用される方法を示すことによってプログラマーに悪いコーディング慣行の危険性と性質を教える方法としてです。したがって、サーバーは競技中だけでなく、いつまでもアクセス可能なままです。

手始めに:私たちの既存の設計は、KVMの下でVMとして実行されている最小限のLinuxマシンで構成され、すべての永続ストレージは読み取り専用でマウントされ、すべてのFS変更はRAMのみに永続化されました。サーバーは定期的に問題の悪用に必要な場合を除き、ネットワーク接続は許可されません。

12
tylerl

私にはexperienceのようなものを実行または設定することはありませんが、過度のリスクを回避するための私の考えは次のとおりです。

  • VMの重要なサービスの外部監視が必要になります。クラッシュを引き起こすエクスプロイトは、間違いなく他のすべての人にそれを台無しにします。他のページへの必要なリンクがすべてそのままである限り、誰かがボックスで実行されているWebサイトを改ざんしても、Webサイトの残りの部分に到達できなくなるか、500 Internal Errorコードが返され始めるほどひどく改ざんされても問題ありません。訪問者で、またはHTTPデーモンを完全にクラッシュさせる場合でも、迅速に検出して修正する必要があります。

  • 攻撃者のマシンを監視していない場合、攻撃者のマシンが何らかの脅威にさらされる可能性があります。彼らが狙っている製品をGoogle検索で見つけた最初のエクスプロイトキットは、実際のエクスプロイトツールと同じくらいマルウェアを含む可能性が高いです。

  • 政治的/法的リスク。彼らが保持する権利放棄フォームに署名し、この特定のマシンを悪用しようとすることを明示的に許可します。署名されたフォームなしでこれらの同じアクションを実行した結果を説明してください。

そして、これを実行することについてのいくつかの一般的な考え:

  • 多くのエクスプロイトは成功の明らかな兆候を示していません。もちろん、これは学習体験の一部であり、エラーの表示をオフに切り替えるだけでは攻撃者を完全に悩ませるわけではないことを開発者に示します。しかし、データベース内のユーザーテーブルの現在の内容、特定のディレクトリの内容、またはマシン上で実行中のプロセスのリストを表示するための別のインターフェイスを用意するとよいでしょう。これは、開発者が自身の成功を自分で検出するのが上手くなると、後でオフにするものになる場合があります。

  • スコアを保持します。セキュリティに自然に興味がない人にとって、楽しいことは彼らの注意を維持するための鍵であり、少しの友好的な競争がそれを助けます。単一の脆弱性のみを許可することを検討している場合、それは誰が実行したか、誰が実行していないかのチェックリストほどのスコアにはなりませんが、開発者が実際に期待する脆弱性に対して追加の脆弱性を見つけた場合そこにいて、彼らは何らかの方法で公に賞賛されるべきです。

  • あなたはこれをペンテスターではなく開発者に向けているので、彼らの日常の仕事はそれほど魅力的な防御の役割になるでしょう。彼らがコードを利用した後のフォローアップタスクは、チームが共同で考え出した最善のソリューションを見つける前に、コードを自分で保護できるかどうかを確認することです。

5
Ladadadada

私はCTFの課題について素晴らしい経験はありません。しかし、私はいくつか参加しており、私は専門家ではありません。しかし、私は自分の経験について話すことができます。

  • まず、CTFチャレンジを実行するときに、ユーザーに注意事項と禁止事項について警告できます。しかし、これはそれがしないことを確認しません。単に私たちは彼らにDoSを行わないことを伝えることができますが、彼らがあなたのCTFゲームサーバーに対してDoSを使わないことを保証しません
  • 悪用するサービスまたはWebサイトを提供する場合、そのような攻撃のみが可能であり、残りのすべてのセキュリティが厳しくなっていることを確認する必要があります。これは、私が友達と一緒に私の大学で簡単なハッキング大会を行ったときに起こりました。ハッキングの申し込みをしました。そのアプリケーションをテストして、抜け穴が1つだけあることを確認しました。しかし、競合他社は他の複雑な方法を利用して悪用し、それを実行しました。
  • セキュリティとは、悪いコーディングのことです。したがって、サービスまたはアプリケーションに抜け穴がないことを確認してください。
  • 友人がCTFコンテストに参加していたのを覚えています。 6時間の競争になると彼は語ったが、競争相手の1人がCTFサーバーの脆弱性を悪用してすべてが崩壊したため、競争は30分後に終了しました。したがって、すべきこととすべきでないことは問題ではありません。

単に、アプリケーションに脆弱性を1つだけ作成して悪用します。しかし、悪用者はここでの正確な脆弱性が何であるかを知らないため、それを破るためにあらゆる種類のテストを行います。あなたが逃した小さな抜け穴がサーバーを危険にさらすかもしれません。

5
sujeesh

Stripe.comは2つのCTFコンテストを実行したと思います。

彼らは次のブログ投稿でデザインについて議論します。あなたはそれが役に立つかもしれません:

https://web.archive.org/web/20140729004028/https://blog.gregbrockman.com/2012/08/system-design-stripe-capture-the-flag/

2
obscure

LinuxおよびUnixシステムでは、PXEブートを介して動作する- https://fogproject.org -などのプラットフォームを介して、24時間ごとに何らかの逆流状態を作成することをお勧めします(おそらく、スクリプティングとcronjobsを理解する)。基本的には、一連のマシン(仮想かどうかに関係なく)をセットアップし、1日に1回、新しいベースラインイメージを開始します。

スコアリングシステムについては、このコードベースをチェックしてください https://github.com/TowerofHanoi/CTFsubmitter -または多分これは https://github.com/JGillam/openflagserver

UbuntuとVagrantが好きな場合は、FacebookのCTFサーバーをチェックしてください- https://github.com/facebook/fbctf

おそらく最良のプラットフォームベースは- https://ctfd.io -そしてこのセクションを読むことができます- https://ctfd.io/about/ - -適切な準備と計画なしにCTFを実行することの落とし穴をカバーするペーパーを含みます。

DEF CON CTFおよびHackUCFチームは、GitHubにもコードベースを提供しています- https://github.com/vito-lbs?tab=repositories - https:// github。 com/HackUCF

私の同僚の1人も、彼のスコアボードとCTFサーバーをここにオープンソースしました- https://github.com/moloch--/RootTheBox

1
atdre