Monthly Archives: 6月 2017

2017-06-28

ImageMagickを攻撃して任意のコードを実行してみる

GMOインサイトのカネテックです。
皆さんImageMagick使ってますか?画像の加工、生成に大変便利ですよね。
僕はしょっちゅう使ってます。
ところで、こういう外部プログラムをWebスクリプト言語などから呼び出すことも多いと思いますが、外部プログラムにもセキュリティホールが存在し攻撃されうるのです。怖いですね。

今回はImageMagickにあったImageTragickという脆弱性について、実際に攻撃して確認してみます。

 

アジェンダ

  • 攻撃側構築
  • やられ側構築
  • 攻撃してみる
  • 対策
  • 最後に

 

攻撃側構築

Metasploitというフレームワークを使って攻撃を行うのですが、Mac上にイチから構築するのは大変なので、すでに構築済みになっているKali linuxというディストリビューションを仮想環境でCDブートさせて使います。

(可能であればTorrentでのダウンロードをお勧めします)

VirtualBoxでISOから仮想PCを起動します。

起動する前に、ネットワーク設定をNATからブリッジアダプターに変更しておきましょう。
やられサーバから攻撃サーバに向けてTCP接続が発生するため、NATだとうまくいきません。

VirtualBox - ネットワークアダプタ設定

VirtualBox – ネットワークアダプタ設定

起動します。今回はGrubメニューからLiveを選択してLiveCD的に使います。

Kali Linux - Grub

Kali Linux – Grub

やられ側構築

架空のサービスとして、PNG画像をアップすると100×100にリサイズして返してくれるものを作り、これが攻撃されるシナリオで実験します。

6.9.3-10より後のImageMagickは対策コードが入っているため、それ以前のバージョンを用意する必要があります。
今回はバージョン6.9.2を使ってみます。

次に、これを使う画像縮小サービスをPHPで書きます。

FORMで画像を送って、PHP側でsystem()関数を使ってImageMagickに画像処理させる簡単なものです。

攻撃してみる

以下のアイコンをクリックし、Metasploitのコンソールを起動します。

Kali Linux - サイドメニュー

Kali Linux – サイドメニュー

攻撃方法として、exploit/unix/fileformat/imagemagick_delegateを指定します。
(タブ補完が効きますので、適宜タブキーを叩くと便利です)

この攻撃で使えるコマンドについては、以下のサイトで確認するとよいでしょう。

https://www.rapid7.com/db/modules/exploit/unix/fileformat/imagemagick_delegate

 

攻撃に使うフォーマットとしてSVG、MVG、PSが選べるのですが、手元でやってみた範囲ではSVGだとウマくいかなかったので、MVGで攻撃します。

デフォルトではSVGが選択されているため、show targetsコマンドでターゲットフォーマットを確認し、set targetコマンドでMVGである1番を選択します。

次に、exploitコマンドで攻撃用のmvgファイル(拡張子はpng)を生成しサーバモードで待ち受けます。

/root/.msf4/local/msf.png にファイルが生成されているので、これをやられサーバにアップします。

Kali Linux - Firefoxで画像アップ

Kali Linux – Firefoxで画像アップ

すると、ブラウザ側はWaiting for [host name]…という表示で停止します。
一方、Metasploitのコンソールには以下のような表示が出るかと思います。

この瞬間、侵入に成功しています。lsやpwdなどを実行し、ヤラレ側であることを確認しましょう。
cat index.phpと打てばPHPソースも見えてしまいますし、cat /etc/passwdとすれば、実在するユーザ名のリストが得られます。

試しに、index.phpの改ざんをやってみます。echo ‘hello world’ >> index.phpとすると、以下のようにWebページの内容にhello worldという文字が追加されていることがわかります。
(index.phpのパーミッションが666のため成功しました。所有者をapache以外に設定し、664などwriteを適切に落としていればこの改ざんは失敗します)

Kali Linux - HTML改ざんデモ

Kali Linux – HTML改ざんデモ

対策

本件はCVE-2016-3714として広く周知されており、現時点での対策はImageMagickのバージョンを最新のものにするだけで大丈夫です。以下のバージョンに本問題が含まれますので、お手元のImageMagickのバージョンが以下よりも大きいことを確認してください。

  • ImageMagick 6.9.3-10 未満
  • ImageMagick 7.0.1-1 未満の 7.x

最後に

受け取った文字列についてはサニタイズが必要とわかっていても、データについては意識から漏れがちですよね。

つねに変なデータを食わされるつもりで、「本当にこのデータはノーチェックで外部コマンドに食わせて大丈夫だっけ?」と自問自答する癖をつけたいものです(実際、この問題はPNG先頭のマジックナンバーをチェックしていれば防げていた問題です)。

 

 

2017-06-06

Oracle運用について バックアップ編(Data Pump)

こんにちは。GMO NIKKO エンジニアのN.I.です。

みなさんデータベースは何を使っていますか?

弊社ではRDBMSはMariaDBとOracleをメインで使用しています。

アドテク業界でOracleDBを使用しているのは珍しいという話をたまに聞いたりしますが…現役で使用しています。

今回は、弊社のシステムで使用しているOracleDBのバックアップ方法について紹介させていただこうと思います。

はじめに

バックアップはOracle標準のOracle Data Pumpを使用して行っています。Oracleのバックアップとリストアをする時に便利でこの方法に統一して運用しています。

性能としては1TBのOracleDBをデータベース を約3時間でバックアップ出来ます。

アクセスが少し遅くなりますが、バックアップ中もSelect文、Insert文の発行を問題なく出来ますので、週1回深夜帯に3時間半かけてデータベース全体のバックアップを取得しています。

また、フルバックアップを取得しておけば一部テーブルデータだけを復旧するなんてことも出来ます。

 

実際の使用方法について

expdp/impdpコマンドで指定してバックアップを取得します。手順としては以下の流れになります。

1.事前準備

バックアップファイルの出力フォルダの設定を行います。

デフォルトの場所にも出力出来ますが、Oracleインストールされたフォルダ内に出力為、出力フォルダーを別途設定することをお勧めします。

CREATE DIRECTORY文で出力フォルダの指定が出来ます。

出力フォルダー作成

 

2.データベースのバックアップ

実際にデータベース全体のバックアップファイルを作成する場合は以下expdpコマンドを実行します。

フルバックアップのバックアップ

そんなに難しくは無いかなと思います。

他にも特定のユーザーデータのみエクスポートや、表を選択していエクスポートすることも出来ます。

 

3.データベースのリストア

リストアする場合、impdpコマンドを実行しインポート出来ます。

リストア時注意点:DROPは自動的に行われない為、リストアするデータベースに同じ名前のSEQUENCE、VIEWがある場合はインポートされません。

SEQUENCE、VIEWもインポートしたい場合は事前にDROPが必要です。

おわりに

今回はOracleDBのバックアップについて紹介させていただきました。

Oracle Data Pumpを使用すれば本番DBのデータをテストDBにそのままコピーしたい場合も対応出来ますので運用が楽になると思います。

意外と使いやすいと思いますのでOracleを使用している方はぜひ使用してみてください。