図 1. StickyDBのネットワーク環境
最近、PostgreSQLサーバーの1つに対する攻撃中に興味深い手法を発見しました。 データベースに入った後、攻撃者はダウンロードされたイメージの組み込みバイナリからペイロードを作成し、ペイロードをディスクに保存し、それらを起動し続けました。 最近よくあるように、攻撃者はMoneroをマイニングするためにサーバーリソースを押収しました。 これで十分ではないかのように、 攻撃ベクトルはスカーレット・ヨハンソンの写真でした 。 それでは大丈夫です 仕組みを見てみましょう!
リモートコード実行とDAM保護バイパス
他の一般的なデータベースと同様に、PostgreSQLにはOSとの対話を容易にするメタスプロイモジュールがあります。 ここでは標準的な方法が使用されます-実行時にlo_export関数を使用してバイナリをディスクにフラッシュすることによりペイロードを作成します。 モジュールの小さな変更の1つは、直接呼び出しの代わりにpg_procディレクトリのエントリとしてlo_export関数を導入したことです 。 これは、 lo_exportなどの特権操作を厳密に監視する一部のデータベース監査監視システム(DAM)による検出を回避するために行われます。 したがって、 obj6440002537は本質的にlo_exportの間接呼び出しです (図2)。
図 2.間接呼び出しlo_exportによる回避の手法
OK、データベースは制御されています。 そして、あなたのGPUは何ですか?
攻撃者は、1つの単純な関数
fun6440002537
でローカルシステムコマンドを実行できるように
fun6440002537
。 このSQL関数は、
tmp406001440
( sqlmapprojectに基づくバイナリファイル)の小さなエクスポート関数であるC言語関数
sys_eval
を呼び出すためのラッパーです。これは通常、シェルコマンドを呼び出すためのプロキシとして使用されます。
それでは、次の攻撃ステップは何ですか? 少し知性。 ハッカーは、 lshw -c videoコマンドを実行してGPUに関する情報を取得し、次にcat / proc / cpuinfoを実行してプロセッサに関する情報を取得します(図3-4)。 一見奇妙に思えますが、最終的な目標がお好みの暗号通貨をもっと取得することである場合、そのようなチェックは理にかなっていますよね?
図 3. GPU情報を表示する
図 4. CPU情報を表示する
これまでに、攻撃者はデータベースにアクセスし、リモートコード実行チャネルをインストールし、DAMソリューションをバイパスして、システムの詳細について学習しました。 これですべての準備が整いました...スカーレット・ヨハンソンの写真をアップロードしますか?! 待って、何?
スカーレット・ヨハンソンの写真を装ったマルウェア
攻撃者はますます創造性を発揮していると言わざるを得ません。
この場合、攻撃者は悪意のあるコードの新しいサンプルをダウンロードすることを望んだため、通常の無料の写真ホスティングimagehousing.comに置きました 。 ただし、ペイロードはバイナリ形式である必要があります。 単にバイナリの名前を.PNG形式に変更した場合、ファイルは、表示できない無効な画像として写真ホスティングにアップロードするときにテストに合格しません。 ファイルの名前を変更する代わりに、 攻撃者は悪意のあるバイナリコードを美しいスカーレットヨハンソンの実際の写真に追加しました (図5)。 したがって、ダウンロードは成功します。画像は表示可能で、良性のようで、ペイロードはまだそこにあります。
図 5.ペイロード。 開くと、普通の画像のように見えます。 心配しないでください-ここで写真はきれいです、それは確かです!
バイナリコードを参照してください。 彼は彼女の左肘の下にいます! :)
imagehousing.comに問題について報告しました-画像は削除されました。
写真のアップロードから暗号マイニングへ
そのため、 wgetコマンドを使用すると、ペイロードを含む画像( art-981754.png )を簡単にダウンロードできました。 写真から実行可能ファイルを抽出するには、 dd (データ複製)コマンドを使用します。 次に、実行許可が設定されます。実際には、作成されたx4060014400ファイルに対する完全な許可( chmod 777 )が設定されます。 最後のステップは、この新しく抽出されたペイロードを実行することです。
図 6:SQLツールを使用して画像をダウンロードし、バイナリを抽出して実行する方法
x4060014400ファイルは、 s4060014400という別のバイナリを作成します。 そのタスクは、プールhttps://monero.crypto-pool.fr/、IP 163.172.226.218(図7)でMonero(XMR)をマイニングすることです。 これまでに、このMoneroアドレスに90,000ドルを超える312.5を超えるXMRが転送されました。
4BBgotjSkvBjgx8SG6hmmhEP3RoeHNei9mz2iqwhws8wefvwuvi6keplwdfnx6guiq5451fv2soxod7rhzqhqtvbdtfl8xs
図 7. Moneroのマイニングを開始するSQLステートメント
もちろん、仕事が終わったら、トラックをカバーする必要があります。
図 8.トレースのクリーニング
攻撃者の観点から、ミッションは完了しました!
アンチウイルスはこれらの悪意のある写真に反応しますか?
GoogleのVirusTotalを使用して、この攻撃で60近いウイルス対策が3つの異なる形式の暗号マイナーにどのように応答するかをテストしました。 結果:
- URL: 1つのアンチウイルスが反応しました(図9)
- 画像ファイル:隠された暗号マイナーについて警告された3つのアンチウイルス (図10)
- 抽出された暗号マイナー:18個のアンチウイルスによって検出されました(図11)
図 9. 1つのアンチウイルスが悪意のあるURLに応答しました
図 10. 3つのアンチウイルスが悪意のあるイメージに反応しました
図 11. 18のアンチウイルスが暗号マイナーを発見しました
バイナリを通常のファイル(画像、ドキュメント)に追加するトリックは非常に古い方法ですが、それでもほとんどのウイルス対策をバイパスできます。 これは本当に衝撃的な事実です。
このようなミュータントファイルの作成は、1行で簡単に行えます。
Linux: cat myExecutableFile >> myImageFile.png
Windows: myExecutableFile.exe >> myImageFile.pngと入力します
攻撃者はどのようにしてPostgreSQLデータベースを見つけるのですか?
攻撃者が既にローカルネットワーク内にいる場合、 Nmapなどの検出ツールを使用して、ドメイン上のPostgreSQLインスタンスを見つけることができます。 しかし、より単純な目標を見つけることはできますか? 外部の世界に開かれたPostgreSQLデータベースはどうですか? これは推奨されないことが知られていますが、そのようなデータベースは存在しますか? ええと...実際、はい、 それらの少なくとも710,000は 、AWSでまとめてホストされています(図12)。 そしてそれらを初段から初歩的に見つけてください。 そのため、攻撃者は簡単にリストを取得し、デフォルトのpostgresユーザーのパスワードブルートフォースを実行し、ログインして、説明されている方法のいくつかを適用できます。
図 パブリックIPアドレスを持つ12.710千のPostgreSQLインスタンス。 イラスト:shodan.io
このシリーズの次の記事では、他の攻撃について説明します。 最後の記事は保護に専念しますが、この脅威を回避する方法に関する簡単なヒントを以下に示します。
- lo_exportへの直接呼び出し、またはpg_procのエントリを介した間接呼び出しに注意してください 。
- Cのバイナリにアクセスする関数に注意してください(図2を参照)。
- ファイアウォールを使用して、データベースからインターネットへの送信ネットワークトラフィックをブロックします。
- データベースにパブリックIPアドレスが割り当てられていないことを確認してください。 その場合は、データベースと対話するホスト(アプリケーションサーバーまたはDBAクライアント)のみにアクセスを制限してください。