ハッキングキャプチャーザフラッグチャレンジを実行した経験を持つ人々からのリソースと情報を探しています。
すべてを簡単な1文の質問にまとめると、次のようになります。(a)自分や他人を過度のリスクにさらさないようにしながら、非常に特定の脆弱性によってハッキングされるようにサーバーを設定するにはどうすればよいですか? 、および(b)1人の参加者が他の参加者の体験を台無しにすることを防止します。
これはハニーポットの実行と多くの共通点がありますが、大きな違いは、すべての訪問者が一貫したエクスペリエンスを維持することに重点が置かれているため、1人の訪問者が他の訪問者に対して「台無し」になることはありません。
少し背景として、これは競争として設定されているのではなく、プログラマーが悪用される方法を示すことによってプログラマーに悪いコーディング慣行の危険性と性質を教える方法としてです。したがって、サーバーは競技中だけでなく、いつまでもアクセス可能なままです。
手始めに:私たちの既存の設計は、KVMの下でVMとして実行されている最小限のLinuxマシンで構成され、すべての永続ストレージは読み取り専用でマウントされ、すべてのFS変更はRAMのみに永続化されました。サーバーは定期的に問題の悪用に必要な場合を除き、ネットワーク接続は許可されません。
私にはexperienceのようなものを実行または設定することはありませんが、過度のリスクを回避するための私の考えは次のとおりです。
VMの重要なサービスの外部監視が必要になります。クラッシュを引き起こすエクスプロイトは、間違いなく他のすべての人にそれを台無しにします。他のページへの必要なリンクがすべてそのままである限り、誰かがボックスで実行されているWebサイトを改ざんしても、Webサイトの残りの部分に到達できなくなるか、500 Internal Error
コードが返され始めるほどひどく改ざんされても問題ありません。訪問者で、またはHTTPデーモンを完全にクラッシュさせる場合でも、迅速に検出して修正する必要があります。
攻撃者のマシンを監視していない場合、攻撃者のマシンが何らかの脅威にさらされる可能性があります。彼らが狙っている製品をGoogle検索で見つけた最初のエクスプロイトキットは、実際のエクスプロイトツールと同じくらいマルウェアを含む可能性が高いです。
政治的/法的リスク。彼らが保持する権利放棄フォームに署名し、この特定のマシンを悪用しようとすることを明示的に許可します。署名されたフォームなしでこれらの同じアクションを実行した結果を説明してください。
そして、これを実行することについてのいくつかの一般的な考え:
多くのエクスプロイトは成功の明らかな兆候を示していません。もちろん、これは学習体験の一部であり、エラーの表示をオフに切り替えるだけでは攻撃者を完全に悩ませるわけではないことを開発者に示します。しかし、データベース内のユーザーテーブルの現在の内容、特定のディレクトリの内容、またはマシン上で実行中のプロセスのリストを表示するための別のインターフェイスを用意するとよいでしょう。これは、開発者が自身の成功を自分で検出するのが上手くなると、後でオフにするものになる場合があります。
スコアを保持します。セキュリティに自然に興味がない人にとって、楽しいことは彼らの注意を維持するための鍵であり、少しの友好的な競争がそれを助けます。単一の脆弱性のみを許可することを検討している場合、それは誰が実行したか、誰が実行していないかのチェックリストほどのスコアにはなりませんが、開発者が実際に期待する脆弱性に対して追加の脆弱性を見つけた場合そこにいて、彼らは何らかの方法で公に賞賛されるべきです。
あなたはこれをペンテスターではなく開発者に向けているので、彼らの日常の仕事はそれほど魅力的な防御の役割になるでしょう。彼らがコードを利用した後のフォローアップタスクは、チームが共同で考え出した最善のソリューションを見つける前に、コードを自分で保護できるかどうかを確認することです。
私はCTFの課題について素晴らしい経験はありません。しかし、私はいくつか参加しており、私は専門家ではありません。しかし、私は自分の経験について話すことができます。
単に、アプリケーションに脆弱性を1つだけ作成して悪用します。しかし、悪用者はここでの正確な脆弱性が何であるかを知らないため、それを破るためにあらゆる種類のテストを行います。あなたが逃した小さな抜け穴がサーバーを危険にさらすかもしれません。
Stripe.comは2つのCTFコンテストを実行したと思います。
彼らは次のブログ投稿でデザインについて議論します。あなたはそれが役に立つかもしれません:
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