SecGenを使用して2つのアカウントに脆弱な仮想マシンを作成します





今日、私は、新しいMetasploitableまたは別の仮想マシンを毎日使用して倫理的ハッキングの基本を学ぶことができる興味深いSecGenプロジェクトに注目したいと思います。



すべては自動モードで行われ、フレームワークをインストールするだけです。 さあ始めましょう!



どのように機能しますか?



SecGenはルビーで書かれたスクリプトです。 彼の作品の中心にあるのは、 VagrantPuppetです。



Vagrantは、 VirtualBoxハイパーバイザー、オンプレミスのVM Ware 、またはAmazon AWSクラウドサービスを使用して、仮想マシンからインフラストラクチャ全体を迅速かつ便利に展開できるツールです。 特別なVagrantfileで、将来の仮想マシンのすべての設定を記述できます。 また、OSのISOイメージをダウンロードする必要はありません。 Vagrantは、仮想マシン(ボックス)の既製のイメージをすでに多数提供しており、特別なディレクトリからダウンロードできます。



また、 Puppetは、bashスクリプトを置き換えたマシン構成自動化ツールです。 Puppetには明確な構成記述言語があります。 スクリプトは、拡張子が.ppのファイルに保存されます。 Puppetは、システムが必要な条件を満たしていることを確認する前に、特定のソフトウェアをマシンにインストールし、それを構成し、環境変数を設定します。



したがって、SecGenは、Vagrantを使用してダウンロードおよび展開するボックス、Puppetを使用してインストールおよび構成するソフトウェアを選択するだけで、操作中にPentesterが検出する必要があるフラグを生成できます。



SecGenはモジュール構造を持ち、各モジュールは脆弱なアプリケーション、その設定、パペットスクリプト、およびSecGenの正しい処理のための追加ファイルを含むディストリビューションです。



設置



公式には、テストはUbuntuディストリビューションで実施され、インストールプロセスは公式のgithubで説明されています。 64ビットUbuntu 16.04.3を使用します。これは2.5 GBのRAMを備えた仮想マシンです。



必要なパッケージをインストールする



sudo apt-get install ruby-dev zlib1g-dev liblzma-dev build-essential patch virtualbox ruby-bundler vagrant imagemagick libmagickwand-dev exiftool
      
      





また、公式ウェブサイトにリストされていない別のパッケージをインストールする必要があるかもしれません



 sudo apt-get install libpq-dev
      
      





githubリポジトリのクローンを作成します



 git clone https://github.com/cliffe/SecGen.git
      
      





作成されたディレクトリに移動し、必要なものすべてのインストールを実行します



 cd SecGen bundle install
      
      





必要なRubyライブラリのインストールが開始されます。







スクリプトが機能していることを確認してください。



 ruby secgen.rb --help
      
      





そして、利用可能なオプションを参照してください







ランダムな一連の脆弱性を持つ最初のマシンを作成します



これは、キーが設定されていない場合の基本的なSecGen操作モードです。 コマンドを実行する



 ruby secgen.rb run
      
      





Vagrantボックスのダウンロードが開始され、SecGenが自動的に選択します







Vagrant仮想マシンイメージがダウンロードおよびインポートされると、仮想マシンが起動します







転送SSHは、ポート2222でマシンにアクセスするように自動的に構成されます。キーが生成され、SecGenがマシンに接続し、rsyncをインストールし、必要なすべてをインストールして構成します。







ホストマシンがリポジトリに直接アクセスできず、たとえばプロキシを介して作業している場合、ゲスト仮想マシンはrsyncをインストールできないため、インストールプロセスが中断されることに注意してください。 この場合、リポジトリに直接アクセスし、仮想マシンを削除し、build-vmsキーを使用してSecGenを再度起動する必要があります。



必要なすべてのPuppetスクリプトが実行されます。







最後に、コンソールにメッセージが表示されます







また、virtualboxコマンドを使用すると、マシンが実際に実行されていることを確認できます。







解剖学



SecGenディレクトリには、特にディレクトリプロジェクト、シナリオ、およびモジュールがあります。



プロジェクト



プロジェクトは、その名前が示すように、プロジェクトで説明されている仮想マシンを作成するために必要なすべてを保存します。 マシンを削除して、まったく同じマシンを再生成できます。 これを行うには、プロジェクトを示す次のコマンドを実行する必要があります



 ruby secgen.rb --project home/user/SecGen/projects/SecGen20170920_1154 build-vms
      
      





プロジェクトのリストを取得するには、コマンドを実行する必要があります



 ruby secgen.rb list-projects
      
      





そして結果が得られます







同様に、VagrantおよびPuppetのどの構成ファイルを作成するかを指定するビルドプロジェクトキーがありますが、仮想マシンは作成されません。



シナリオ



SecGenをキーなしで起動すると、ランダムな脆弱性セットを使用して仮想マシンが作成されますが、スクリプトを通じてその性質に影響を与えることができます。 それらはXMLファイルとしてシナリオディレクトリに保存され、分類されます。 デフォルトはdefault_scenario.xmlで、次のようになります



 <?xml version="1.0"?> <scenario xmlns="http://www.github/cliffe/SecGen/scenario" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.github/cliffe/SecGen/scenario"> <!-- an example remote storage system, with a remotely exploitable vulnerability that can then be escalated to root --> <system> <system_name>storage_server</system_name> <base platform="linux" type="server"/> <vulnerability privilege="user_rwx" access="remote" /> <vulnerability privilege="root_rwx" access="local" /> <service/> <network type="private_network" range="dhcp"/> </system> </scenario>
      
      





Linux仮想マシンは、リモートタイプとローカルタイプの2つの脆弱性を含んで作成されると言われています。 すなわち 最初に、1つの脆弱性を介してサーバーにアクセスし、次に2番目の脆弱性をローカルで悪用する必要があります。



通常、スクリプトの名前により、SecGenが作成するマシンが明確になります(たとえば、any_random_vulnerability.xml)。 Scenarios / examplesディレクトリの例をよく理解することをお勧めします。



Scenarios / security_auditおよびScenarios / ctfディレクトリには非常に複雑なスクリプトがあります。

CTFの場合、SecGenの開発者からのフロントエンドを使用することが提案されています。



モジュール



シナリオの説明から、モジュールがカテゴリに分割されていることが明らかになります。 すべてのモジュールは、モジュールディレクトリに収集され、以下に分割されます。





次に、各グループには、smb、webapp、bash、ftpなどのサブグループがあります。



各モジュールの構造は次のとおりです。







secgen_metadata.xmlファイルには、モジュールの詳細が記述されています。 これは、スクリプトが正しく機能し、適切なケースに合わせてこのモジュールを選択するために必要です。



ファイル部分



 <?xml version="1.0"?> <vulnerability xmlns="http://www.github/cliffe/SecGen/vulnerability" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.github/cliffe/SecGen/vulnerability "> <name>chkrootkit 0.49 privilege escalation</name> <author>Thomas Shaw</author> <module_license>MIT</module_license> <description> chkrootkit 0.49 and earlier contain a local privilege escalation vulnerability allowing a non-root user to place a script in /tmp that will be executed as root when chkrootkit is run. This module adds a cronjob to run chkrootkit periodically for exploitability. </description> <type>privilege_escalation</type> <privilege>root_rwx</privilege> <access>local</access> <platform>linux</platform> ...
      
      





manifesディレクトリには、puppet configure.pp、init.pp、およびinstall.ppスクリプトが含まれています

filesディレクトリには、必要なディストリビューションが含まれています。 この場合、1つのchkrootkit-0.49.tar.gzファイル



プロジェクトの詳細



プロジェクトが作成されると、使用された脆弱性とフラグを取得する方法を記述したscenario.xmlファイルを見つけることができます。



たとえば、このプロジェクトでは、モジュールを指す2つのXML脆弱性タグを見つけることができます

モジュール/脆弱性/ unix / misc / distcc_execに「リモートコード実行を可能にする文書化されたセキュリティの脆弱性」の説明があり、モジュール/脆弱性/ unix / desktop / xfce_lightdm_root_loginに「XFCE w / LightDMをパスワードなしでルートとして自動的にログインするように構成する」 \。 "



モジュールの説明の本質が明確でない場合は、適切なディレクトリに移動してモジュールファイルを調べることができます。



また、プロジェクトディレクトリには隠しディレクトリ.vagrantがあり、特に、ユーザーvagrantの下でSSH経由でサーバーにアクセスするための秘密鍵が含まれています。 Private_keyファイル。



したがって、次のように仮想マシンに接続できます



 ssh vagrant@127.0.0.1 -p 2222 -i private_key
      
      









ifconfigコマンドにより、次の結果が得られます。



 eth0 Link encap:Ethernet HWaddr 08:00:27:86:1c:fb inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe86:1cfb/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:125254 errors:0 dropped:0 overruns:0 frame:0 TX packets:13570 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:177651061 (169.4 MiB) TX bytes:1034124 (1009.8 KiB) eth1 Link encap:Ethernet HWaddr 08:00:27:83:ea:5e inet addr:172.28.128.3 Bcast:172.28.128.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe83:ea5e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:14 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3130 (3.0 KiB) TX bytes:2304 (2.2 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
      
      





テスト中



IPアドレスが判明し、侵入テストを実施できるようになりました。 ホストから仮想マシンの可用性を確認します







次の開いているポートをスキャンして検出します



 sudo nmap -n -Pn -p- 172.28.128.3
      
      









さらに、お気に入りの侵入テスト配布キットを使用して、distccの操作を開始できます。



唯一のことは、デフォルトでは仮想マシンにNATモードとホストオンリーモードの2つのインターフェースがあるため、NATインターフェースのポート転送設定を介して外部マシンからアクセスできることです。







または、マシンを再構成します。これは、外部からアクセス可能な別の種類のVirtualboxインターフェイスを使用するためのエントリポイントです。



インフラストラクチャにDHCPがない場合は、ホストオンリーインターフェイスタイプをブリッジに変更し、マシンを再起動して静的IPアドレスを割り当てることができます。 そして、ブリッジを通るルートを設定することを忘れないでください。



結論として



もちろん、人々はモジュールを書き、エラーが起こる可能性があります。 しかし、ほとんどの場合、SecGenは適切に構成され、動作する仮想マシンを作成して練習します。 英語の公式ウェブサイトでは、独自のスクリプトとモジュールを作成するための詳細な手順を学習できます。これにより、SecGenの機能が大幅に拡張され、プロジェクトのさらなる発展が期待されます。



All Articles