S2-053

gamzatti
Vote 0 Votes

引き続きでたS2-053を検証。

またOGNL関連ですね。

FreeMarkerなるタグライブラリを使って、ユーザからの入力値を参照しているような場合に影響を受けるようです。

FreeMarkerは使ったことがなく、使い方がよくわかりませんでしたが、以下の通りにやると

確かに任意のコード実行できる。

S2-053 复现分析过程(附POC)

とはいえ、攻撃成立には条件があるので、影響は限られているのかもしれないと思いました。

S2-052

gamzatti
Vote 0 Votes

仕事がひと段落したので、前から気になっていたS2-052を検証。

ProcessBuilderなどの外部プロセスを起動するコマンドが含まれるXMLをリクエストで投げると、

XStream.fromXML()でXMLをデシリアライズする処理の延長で任意のコードが実行されるようです。

私が試したのは以下。

S2-052的POC测试

ProcessBuilderのcommandメソッドの仕様は、引数が持つプログラムを実行したい場合、

ProcessBuilder pb = new ProcessBuilder();
pb.command("touch", "/tmp/attack")


のようにcommandメソッドの引数に指定するので、

<command> <string>touch</string><string>/tmp/attack</string> </command>

のように指定すると、好きな外部プロセスを起動できてしまう。

自サーバに入れているフィルタはOGNL系の文字列をブロックするようにしていますが、

今回はOGNL系の攻撃ではないので、これでは防げない。

リクエストにjava.lang.ProcessBuilderとかjava.lang.Runtimeなどが入っていたらブロックする、

なども検討した方がいいのかもしれないなと。

引き続き調査です。

7月末にパリ出張へ。

9年前に出張でオランダのHilversumに行って以来、人生二回目のヨーロッパ。

ヨーロッパが二回とも出張って、IT 系にしては珍しいので幸運だと思う。

今回のミッションは日本で開催していないセキュリティ系のトレーニングを受講することだったので、スケジュール的にも余裕があり、色々楽しめた。


1日目は12時間半のフライトを経て、現地時刻16時半にシャルル・ド・ゴール空港に到着。

1_frightmeal.jpg

"RER"(rarではない:-)) と呼ばれる高速郊外鉄道でパリ市内へ。

海外へ行くと、大抵最初に迷うのが電車の乗り方。

パリはメトロがたくさん走っていて、今回も路線や切符の買い方に少し迷う。

Denfert-Rochereauという駅で降りてホテルへ。

RERは郊外電車らしく、一駅の間隔が長いので、ホテルに着いた頃には結構良い時間になっていた。

移動疲れもあるので、初日の夜はホテルのラウンジで夕食を済ませることに。

このラウンジがとても良かった。静かで落ち着いていて、料理も美味。

1_hotelrestrunt.jpg

何より驚いたのが、夏のパリは日没が遅く、22時頃まで明るいこと。

夕食後は部屋から美しい夕日が見えた。


パリ旅の幕開けは、こんな感じでスタート。

s2-048

gamzatti
Vote 0 Votes

s2-048の脆弱性、 自分のサーバがやばいかなと思ってPoCを実行してみたら、

s2-045 の時に作ったサーブレットフィルタがブロックしてくれていました。

あまり脆弱性の詳細をちゃんと調べていないけれど、s2-048もペイロードを見たらやっぱりOGNL関連だからかな。

リクエストに含まれるOGNLコードをサーブレットフィルタやWAFでブロックするのは、回避策としてなかなか効果がありそうです。

今話題騒然のランサムウエアをチームみんなで分析しました。

http://sisoc-tokyo.iii.u-tokyo.ac.jp/wp-content/uploads/2017/05/20170518_WannaCry_report.pdf

JEP 290: Filter Incoming Serialization Data

Java9から、 ObjectInputFilter という新しいAPIを使って、セキュアにデシリアライズを行う仕組みが提供されるそうです。


- ちらっと読んだ感じでは、デシリアライズ対象オブジェクトが参照するオブジェクトの数や、
  深さ(ネスト)を制限する仕組みっぽい
-ObjectInputStream#resolveClass()のように、デシリアライズするクラスを制限することも出来るっぽいが、
  "Non-Goals"に特定のクラスに対するポリシーを制限するものではないというような記載もあり、
   コンセプトが不明。
- システムプロパティとプログラム個別、どちらでも設定出来る
- これらの機能はJava8以前のバージョンにもバックポートされる予定とのこと。
  →現段階では最新のJava8にもバックポートされていないようです。

時間が出来たら試してみよう。 なお、Java9は今年の7月にリリースされるようです。

2年間の出向先での任期が終わった。

仕事内容も環境も大きく変わったので、最初は悩み、格闘する毎日。

これまでも割と頻繁に仕事が変わっていたので、変化には慣れていたはずだったけど、

自分で感じている以上に、プレッシャーを感じていたのだと思う。

挫折しかけた時もあったけど、ここで逃げたら11年のキャリアが終わってしまうと思った。

時間がかかっても地道にやるしかないと思って、先が見えないながら模索しつつ少しづつ進んでいくうちに、

いつの間にか自然に頭と手が動くようになって、仕事が楽しい、活躍できていると感じるようになった。

周りの人と打ち解けてから本音で話してみると、みんな私と同じように悩んだり焦っていたことも分かって、

少し安心すると同時に、一見余裕に見える人でも、みんな裏では悩みながら必死で頑張っているのだなぁと。

「成果が出なくても、悩んだり失敗したりした過程は決して無駄にはならない」

一緒に頑張ってきた仲間が教えてくれた言葉がとても印象的で、それは真実だと思った。

ログ監視(続編)

gamzatti
Vote 0 Votes

Struts を狙う攻撃のログ監視

でContent-typeをapacheのログに記録するように設定したら、

それなりにスキャンが見られました。

今のところ、新しいようなリクエストのパターンは見られず、

すでに公開されている攻撃コードの典型的なパターンが多いようです。

サンプルアプリなどに入っていそうな名前の、xx.action などの

パスへのリクエストが多そうです。

存在するパスに対しても、サーブレットフィルタがブロックしてくれていました。

引き続き、観測を続けたいと思います。

初めてのログ監視

gamzatti
Vote 0 Votes

Struts 2 の脆弱性の攻撃が多いので、リクエストの傾向を見てみたいと思い、 自サーバにStrutsを立てて、ログを監視することに。 Strutsは(もちろん)最新版を入れて、サーブレットフィルタもかけたものの、 次々に脆弱性が出てくるのでちょっとドキドキします^^; 反面、環境整えたから来て欲しいような。。(笑) ログ監視ツールを入れたものの、全然活用できてなかったので、これはいい機会と思い 検知したらアラートメールを送るように設定。 ちなみに今のところは、それらしきリクエストは来てない様子。 有用な情報が得られることに期待。

Example of Servlet filter

約二年間の集大成とも言えるドキュメントが無事公開されました。

Active Directoryに対する攻撃の検知と対策手法のドキュメント、JPCERT/CCが公開
ログを活用したActive Directoryに対する攻撃の検知と対策

現場でみなさまに活用していただけることを願ってやみません。

良い反響もそうでない反響も受け止めて、良いドキュメントに改善されていくと共に、

これからもより有効な情報を展開していければいいなと思います。