Empireに対するMetasploit skywalker exploitの改良
はじめに
こんにちは!SHIFT DevOps1グループの横山です。 円安の影響で洋書がとても値上がりしているため、技術書を読む代わりにOSS開発に関与するようになり、ブログにしました。ご参考になれば幸いです。
Empire C2 Frameworkに対する攻撃の発展
Empire C2 Frameworkは主にWindowsに対する攻撃に使われ、ペネトレーションテストでも使用されます。攻撃用のツールではありますが、Empire自体も攻撃の対象となりえます。 MetasploitもEmpire同様攻撃用のツールですが、Windowsに対する攻撃は検知されやすいためLinuxに対する攻撃として使われることが多い印象です。 こちらのブログで2016年にEmpireに見つかり修正済の脆弱性に対する攻撃を発展させた内容が解説されています。 Metasploitには2016年にEmpireに見つかった脆弱性を悪用するskywalker exploitが元々存在します。 今回はEmpireに対する攻撃を発展させたPythonのPoCを取り込み、Metasploitのskywalker exploitを更新してプルリクエストを出しました。
Metasploit skywalker exploitの改良
プルリクエスト自体はこちらになります。 MetasploitはRubyで書かれているためPythonでのPoCをRubyに書き換え、Metasploitのモジュールとして使えるようにしました。 またモジュールに関するドキュメントも追加しました。 暗号化に詳しくない、Rubyは昔少しさわっていた程度でそこまで詳しくない、の主に2点のため多少つまずきダークサイドに落ちかけました。
また、以下のコードについては括弧がなく2 // 8が先に評価され0になり実質len(bin(self.sharedSecret)) + 1となるため混乱しました。 https://github.com/BC-SECURITY/Empire/blob/8aca42747da6cf2b0def7edede94586f6b3258e8/empire/server/common/encryption.py#L374
_sharedSecretBytes = self.sharedSecret.to_bytes(
len(bin(self.sharedSecret)) - 2 // 8 + 1, byteorder="big"
)
Pythonでbinを使うと以下のように0bが先頭に付くため、意図していたのはそれを除くような(len(bin(self.sharedSecret)) - 2) // 8 + 1だったのでは、とは思いましたが、元のEmpireのコードがそうなっているためそれにあわせました。
>>> bin(44)
'0b101100'
帝国への逆襲
改良したMetasploit skywalker exploitのテストを行ないます。 攻撃対象のEmpire(v5.9.2)のセットアップは最初はVM上に最新版をgit cloneしてv5.9.2に戻してましたが、 簡単にするため、pre-built Empire dockerコンテナを使うことにしました。 以下でpullします。
docker pull bcsecurity/empire:v5.9.2
同一VM上でEmpireサーバーとクライアントを起動します。
サーバーの起動
docker run -it -p 1337:1337 -p 5000:5000 -p 8080:8080 -v /tmp:/tmp -v /etc/cron.d:/etc/cron.d bcsecurity/empire:v5.9.2
-v /tmp:/tmp -v /etc/cron.d:/etc/cron.dは現実的ではないですがセットアップを簡単にするためそうしてます。
クライアントの起動
docker run -it --net="host" bcsecurity/empire:v5.9.2 client
クライアントでlistenerを起動
攻撃用のマシンにおいてmsfconsoleを起動し攻撃対象のIP、listenerのport、自身のIPを設定しrunします。
攻撃が成功することを確認できます。
なお、Empire側でskywalkerにより作成されたagentをkillしたところでMetasploit側には影響はなく攻撃は継続されます。
おわりに
プルリクエストがマージまでいくかは分かりませんが、OSS開発は楽しいので今後も続けていきたいと思いました。 本記事で扱ったEmpireの脆弱性は何年も存在していたため、Empire使用中に謎の海外サーバーからコネクトバックがあったという経験があるようでしたら、そのときは、あなたのC2サーバーはハックされていたのかもしれませんね。
お問合せはお気軽に
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplashのBernd 📷 Dittrich