www.morihi-soc.net

誰もが安心して使える、安全なインターネットを目指して

ログ分析の注意点と文字列操作スクリプト公開

どうも。ハニーポッターの森久です。
最近、ハニーポットを植える人が増えたり、ハニーポットに関する勉強会が開かれたり、ハニーポット業界(?)が盛り上がってきていて何よりです。
ハニーポットの運用を始めると、ログ分析をする機会も増えてくると思います。

今回はログ分析をするときに気をつけなければいけないことと、ハニーポッター向け「ブラウザで完結! 文字列操作スクリプト」のツール紹介をします。

 

ハニーポットの運用とはログ分析をすること

本ブログを御覧頂いているみなさまであれば、すでにご承知のことかと思いますが、ハニーポットは攻撃者の行動を記録し観察して、その悪意をつまびらかにするために使います。
攻撃者の行動はハニーポットが自動的にログとして記録しますが、ログ分析はハニーポッターである人がおこなわなくてはなりません。
ログ分析は、想像力を働かせながらアレコレ考える必要があるので、ハニーポットの楽しみ方の1つではあるのですが、特に初めてログ分析をする人にとってはなかなか難しい作業です。
さらに、攻撃者はセキュリティ機器の検知から逃れるために、様々な手法を使います。これがまた、ログ分析を難しくさせる要因の一つになっています。
せっかくハニーポットを植えて攻撃のログが残ったとしても、分析ができなければおもしろさもハニーポット運用の意味も半減してしまいますよね。

 

ログ分析のときに気をつけること

私もハニーポッター歴が長くなってきましたが、今でもログ分析をするときに気をつけていることはたくさんあります。
そのうちの1つは、自分の管理していないサイトに対する通信の発生の抑制です。

ハニーポッターでなくとも、外部サイトに対する攻撃行為はしてはいけないということはご理解いただいていると思います。
おそらく多くの人は、ログ分析時に、この点に気をつけながら外部サイトのサービスを利用していると思います(たとえばブラックリストと攻撃元 IP アドレスの照合や、VirusTotal への不審なファイルのアップロードなど)。

ここでログ分析を始めたばかりの人にとっては気づきにくいのですが、意図せず外部サイトに対して攻撃行為や情報漏えいをしている場合があります。
その中でも注意して欲しいパターンは、文字列の操作(デコード)サービスに対するものです。

 

外部サイトへの攻撃や情報漏えいの例

具体例を示しましょう。次に示すログは、私のハニーポットで得られたものです。

ログ1

ログ1はmethod: から始まっていることとパラメータに OGNL 式が含まれていることより、Struts の S2-032 の脆弱性を狙った攻撃です。
ただパラメータに % から始まる文字が複数含まれているので、ひと目でどのような OGNL 式なのか分かりづらいですよね。

ここでもしも、% エンコードされているパラメータをデコードするために、Web 上のデコードサービスを使ったらどうなるか考えてみてください。
想像に難くないのですが、デコードサービスを提供している Web サイトに対して、S2-032 の攻撃をしていることとほぼ変わりません。
攻撃者による攻撃内容を元にして、デコードサイトへ入力をしているのですから、攻撃の仲介をしているイメージです。

別のログを示しましょう。

ログ2

ログ2では、POST のデータ部分に pwd というパラメータで「cm9vdA==」が指定されていますね。
文字列の後ろに==があるので、BASE64でエンコードされた文字列だと予想がつきますね。
普通の人は、この文字列から、BASE64でエンコードされる前の文字列はわからないと思います。分かる人は変態だと思います(褒め言葉)

私は普通の人なので、コマンドを使ってデコードします。

% echo cm9vdA== | base64 -D
root

はい。エンコードされる前の文字列はrootですね。

ここでログ2の意味を考えてみましょう。
アクセスしているファイル名が authLogin.cgi で user パラメータに root が入力されていて、pwd パラメータには root を BASE64 でエンコードした文字列が入っていることを総合的に考えると、ログイン試行の可能性のある通信と想像できます。
つまり攻撃者が、何らかのアクセス認証のある cgi ファイルに対して、root アカウントの root パスワードでログインしようとしているということです。
これはハニーポットで得られた攻撃者のログなので、入力されるパスワードはおそらく辞書攻撃に使われる辞書に載っているものでしょう。

しかし、もしもハニーポットのログ分析ではなく、通常の Web サーバのログ分析の過程で、外部の Web のデコードサービスを使ってデコードしたらどうなるでしょうか?
外部の Web のデコードサービスへ、パスワードを入力していることと変わりありませんね。

この状況は情報漏えいに近いイメージです。
(外部サイトにパスワード情報を漏らしてしまった。外部サイト視点では、パスワードかどうかは判断できないかもしれませんが)

 

安全にデコードするには

先程のログ1やログ2で、よくある外部サイトへの攻撃や情報漏えいの危険性などを示しました。
さてこれらのログを安全にデコードしつつ、ログ分析するにはどうしたらいいのでしょうか。

答えは簡単です。

外部の Web サイトを使わず、ローカルだけで完結させればいいのです。
たとえばログ2のところで解説したように、コマンドを使ってデコードすれば、外部サイトへの通信は発生しないので、意図せぬ攻撃や情報漏えいは起こりえません。
ただいつでもコマンドを使える環境があるとは限らないですよね。

そこで、悩めるハニーポッター向けに、ブラウザだけで完結する文字列操作のスクリプト(strscript.html)を作成しました。

GitHub で公開しています。
https://github.com/morihisa/strscript

 

使い方は次のとおりです。

  1. GitHub からダウンロードしたファイルをブラウザで開く
  2. 操作の種別を選択する(URL/BASE64/HEX)
  3. デコード/エンコードのどちらかを選択する
  4. 操作したい文字列を入力して「うりゃ!」ボタンをクリック

 

実際にログ1の内容をデコードしてみましょう。
ログ1のURL部分だけをコピーしておいて、「ここに入力の」テキストエリアにペーストします。
URL(%)とデコードを選択していることを確認してから「うりゃ!」してください。

左側のテキストエリアに入力した内容がデコードされて、右側のテキストエリアに表示されました。

ね。簡単でしょ。

ソースコードを見ていただければわかりますが、モダンなブラウザに標準搭載されている JavaScript を使っているだけです。(コーディングの汚さは許して・・・)
外部ライブラリなどは使用しておらず、ローカルのブラウザだけで動作します。
もちろん操作する際にどこへも通信は発生しません。

下記のブラウザで動作確認をしています。

  • Firefox 54.0.1
  • Safari 10.1.2
  • Chrome 60
  • Internet Explorer 11
  • Microsoft Edge 40

デコード練習

最後にハニーポッター向けのデコード練習をします。ぜひ strscript.html をダウンロードして、手元で操作しながら試してみてください。
次のログ3は SQL インジェクション攻撃のログです。

ログ3

p  パラメータに指定されている値が URL エンコードされていますね。さっそくデコードしてみましょう。
union select の文字列が見えました。ただ、まだ 0x から始まる文字列がありますね。

0x は16進数(HEX)を意味するので、これもデコードしてみましょう。
※HEX  をデコードするときは、数字以外の余計な文字は削除しておく必要があります。

 

画像だと文字が小さくなってしまいましたが、「5E5B7D7E」をデコードしたところ「^[}~」という文字列が得られました。
つまりログ3は union select を使った SQL インジェクション攻撃で、攻撃成功時の文字の区切りとして「^[}~」を利用していると分析できますね。

 

最後に

今回は、ハニーポットのログ分析をするときには、外部サイトへの意図せぬ攻撃や情報漏えいに気をつけて欲しいということを事例を交えて紹介しました。
またこれらの事故を起こさないために、ブラウザだけで完結する文字列操作スクリプトを紹介しました。

なおこの文字列操作スクリプトは、ログ分析の初心者やハニーポッター向けです。
エラー処理は最低限しかしておらず、機能も最小限に留めています。
物足りない人は、自分好みのスクリプトなりプログラムをなりを作成してみてください。

※エンコードの練習は特にしませんが、デコードした文字列と比較したいときなどにお使いください。

GitHub
https://github.com/morihisa/strscript

 

Written by 森久

8月 7th, 2017 at 8:00 pm

Posted in Honeypot,Security