技術者ブログ

クラウド型WAF「Scutum(スキュータム)」の開発者/エンジニアによるブログです。
金床“Kanatoko”をはじめとする株式会社ビットフォレストの技術チームが、“WAFを支える技術”をテーマに幅広く、不定期に更新中!

2017年10月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
  • お問い合わせはこちら
Scutum開発者/エンジニアによる技術ブログ WAF Tech Blog
▼ WAF Tech Blog 最新記事

Tomcatに見つかった3つの脆弱性について

2017年10月 3日

はじめに

Apache Tomcatに立て続けに見つかったCVE-2017-12615~12617の3つの脆弱性は基本的には同じ原因によるものでした。3つのうち2つは任意のJSPファイルをPUTリクエストでアップロードできてしまい、アップロード後にアクセスすることでJavaのコードが実行できてしまう、というパターンのRCE。残りの1つはJSPがそのまま静的ファイルとしてアクセス可能なためにソースコードが漏洩してしまう、というものです。

今回JPCERT/CCも注意喚起するなど、広く知られることになりましたが、一方でなかなかパッチが提供されないという状況にもなっています。今回はこの脆弱性についての調査を報告します。

続きを読む ≫ Tomcatに見つかった3つの脆弱性について

Struts2 S2-052を例とした脆弱性攻撃手法の調査及びそれらを考慮した防御機能の開発

2017年9月27日
野村 真作(Scutum開発者/株式会社ビットフォレスト シニアマネージャー)

はじめに

先日、Struts 2に新たな脆弱性S2-052(CVE-2017-9805)が発見され、修正されました。
これはリモートからの任意のコードの実行(RCE)が可能な脆弱性であり、「またか」と思われた方も多かったのではないかと思います...。
しかし実はこの脆弱性によるRCEは、過去繰り返しStruts2に報告されてきたOGNLインジェクションとは異なるメカニズムで発生するものでした。
ここでは、この脆弱性の原因と、RCEに至るメカニズムを解説してみようと思います。
多少プログラミングの知識のある方向けになってしまいますが、ご容赦ください。

続きを読む ≫ Struts2 S2-052を例とした脆弱性攻撃手法の調査及びそれらを考慮した防御機能の開発

機械学習とセキュリティについての勉強会で発表してきました

2017年9月13日

はじめに

2017/9/10(日)に「Security meets Machine Learning」に参加し、Scutumにおけるデータサイエンスの使い方について発表を行ってきました。今回は簡単な参加レポートをしたいと思います。

自分の発表

私はトップバッターでした。40分ほど時間を頂き、Scutumの防御機能の中核であるベイジアンネットワークや、最近導入を開始しているクラスタリングによる異常検知について紹介をさせていただきました。講演に使った資料は我々の主な敵であるスクリプトキディに見られたくない部分を含むため、非公開となっています。

現在、24時間休みなく、Scutum上を正常と異常が混ざった大量のデータが通過していきます。まさに「ビッグデータ」が手に入る状況ですが、それらすべてに「攻撃である・攻撃ではない」のようなラベルを付けることは現実的ではありません。そのためKaggleをウォッチして勉強した一般的な教師有り学習のテクニックは導入できておらず、クラスタリングによる教師無し学習によって正常(ありがち)とそれ以外を分けるところまでしかできていません。

教師有り学習にはできていないものの、やはりデータ量は正義であり、クラスタリングで得られた「ありがち」なデータをうまく使うことで、エキスパートの専門知識を量で上回り、それを使って誤検知を減らすことに繋げることができています。

40分も話ができる講演は久しぶりだったので最初はゆっくり喋っていたのですが、最後は結局時間が足りず、ちょっとあわただしい展開となってしまいすみませんでした。講演後、何人かの方から非常に参考になるフィードバックを頂くことができ、話をさせていただいて良かったと感じています。

続きを読む ≫ 機械学習とセキュリティについての勉強会で発表してきました

OGNLインジェクションのゼロデイ攻撃を想定した防御機能

2017年6月 1日

はじめに

私は以前の「Struts2が危険である理由」というブログ記事において

例えばS2-045については止めることが出来ていました(ゼロデイでも防ぐことが出来ていました)が、S2-046についてはギリギリ、わずか数時間の差で先にScutum側の防御機能のアップデートが間に合いました。これを受けて今後、より力を入れてStruts2のOGNLインジェクションに特化したゼロデイ攻撃を想定した防御機能を開発する予定です
と書きましたが、これを実際に開発し、現在稼働中の全てのScutumのサーバに対してデプロイしました。

続きを読む ≫ OGNLインジェクションのゼロデイ攻撃を想定した防御機能

Struts2が危険である理由

2017年3月27日

はじめに

2017年3月、Struts2にまたしても新たな脆弱性(S2-045、S2-046)が見つかり、複数のウェブサイトにおいて情報漏洩等の被害が発生しました。筆者は2014年4月(およそ3年前)に「例えば、Strutsを避ける」という記事を書きましたが、今読み返してみると「やや調査不足の状態で書いてしまったな」と感じる点もあります。今回、良いタイミングなのでもう一度Struts2のセキュリティについてざっとまとめてみたいと思います。

続きを読む ≫ Struts2が危険である理由

超高速のPostgreSQLとしてGreenplumを気軽に使う

2016年2月23日

はじめに

ビッグデータ、データサイエンスという言葉の流行を大きく後押ししたのは大規模なスケールアウト、分散処理を可能としたHadoopの存在です。しかしデータサイエンティストは日々のデータ処理作業において必ずしも複数台のマシンを必要とするような大規模な処理ばかり行っているわけではありません。自身の開発用ワークステーション1台で完結するような処理も多数存在します。

2016年ではもはや当たり前ですが、多くのワークステーションはマルチコアのCPUを搭載しており、CPUがボトルネックになるようなデータ処理をマルチコアを活かして並列処理する重要性は高まっています。しかし、意外に多くのソフトウェアが、この当たり前に期待される「マルチコアを活かして単一ワークステーション上で高速並列処理すること」が出来ていません。

この悩みから、筆者は過去にテキストデータ処理を簡単にマルチコア対応にするJavaフレームワーク、MCPを開発してegrepより10倍速い行ベースの正規表現による検索を実装しました。また同様にWEKAのK-Meansクラスタリングをマルチスレッド対応させ、1台のワークステーション上でのクラスタリングを高速化しました。

続いて筆者の頭を悩ませたのは、RDBでのデータ解析です。データを対話的に解析するためにSQLを頻繁に利用しているのですが、メインで使っているPostgreSQLは基本的に1つのクエリは1つのCPUコア上で処理するため、マルチコアのパワーを全く活かせません(RDBではディスクアクセスがボトルネックになることが多いと思われていますが、CPUがボトルネックになるケースも結構あります)。

上記のMCPやWekaとは異なり、RDBのクエリを並列処理させるのはちょっとした開発で行えるような簡単なものではないので、どうしようかと悩んでいました。しかし最近になり、並列処理可能なRDB(MPPデータベースなどと呼ばれる)のうちの一つであるGreenplumがオープンソース化され、誰でも自由に使えるようになりました。

Greenplumを使うことで、マルチコアを全て活かした高速なデータ解析が行えるようになります。

続きを読む ≫ 超高速のPostgreSQLとしてGreenplumを気軽に使う

HTTP/2のRFCを読んだ感想

2015年5月27日

はじめに

私は自ら「串職人」と名乗るほどウェブの(つまりHTTPの)Proxyサーバが好きで、もう10年以上もプロキシサーバを作り続けています。このブログの主題であるクラウド型WAF、Scutumもそのひとつです。そもそもプロトコルとしてのHTTPが好きです。ウェブの裏側に、とてもシンプルな、テキストベースのHTTPプロトコルが活躍しているということが私の串職人としての出発点です。

続きを読む ≫ HTTP/2のRFCを読んだ感想

JavaのString生成方法がボトルネックになっていた話

2015年5月 7日

はじめに

先日、私たちが開発しているクラウド型WAFサービス、Scutum(スキュータム)において、予想していなかった箇所の修正によってサーバの負荷が大幅に減るということがありました。原因はこのエントリのタイトルにもあるように、Stringクラスのインスタンスを生成する際の方法にありました。

続きを読む ≫ JavaのString生成方法がボトルネックになっていた話

Tomcat 8.0.21でサーバ側SSL暗号スイート選択が可能に

2015年4月15日

はじめに

以前のエントリに書いたように、Java7以前では、SSL通信の際にサーバソケット側で暗号スイートを決定することができず、どうしてもやりたい場合にはJSSEのソースコードを書き換える必要がありました。しかし昨今、SSLに関連する多くの脆弱性や問題が相次いで見つかるようになっており、サーバ側でも暗号スイートをコントロールしたいというニーズは高まっていると思います。Java8ではJSSEにおいてサーバ側暗号スイート選択の機能が実装され、またTomcatでも8.0.21においてこれが可能になりました。

続きを読む ≫ Tomcat 8.0.21でサーバ側SSL暗号スイート選択が可能に

Tomcat/Javaで対話的にデータサイエンスする

2015年3月23日

はじめに

Scutumではベイジアンネットワークをはじめ、データサイエンスを積極的に導入して高性能のWAFを実現することを目指しています。データサイエンスやデータマイニングでは、解析対象のデータに対して対話的に解析を行うことが多くなります。今回は基本的には「対話的プログラミング環境でない」Javaで、データを対話的に解析する方法をご紹介します。

続きを読む ≫ Tomcat/Javaで対話的にデータサイエンスする