技術者ブログ

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

2018年3月

        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 最新記事

異常検知システム開発の難しさ

2018年3月20日

はじめに

「異常検知したい」と考えている人は多いと思います。もはや囲碁ですら機械が人間を上回る時代となったので、システムの故障を発見したりクレジットカード詐欺を見つけたりという異常検知システムも、データサイエンスを使えば人間以上に優秀なものを作れるのではないか?と考えるのも自然でしょう。

一方で、実際に異常検知システムの開発に乗り出してみたものの、意外と上手く完成まで辿りつけなかったり、せっかく作ったけれども結局誤検知だらけでお蔵入りしたり、というケースもあるのではないかと思います。この記事では実際に異常検知システムをゼロから開発してみた経験からいくつかの点について書いてみたいと思います。

この記事にはアルゴリズム的な、技術的な知見は含まれていません。「もし居酒屋で異常検知をネタに呑むとしたら、このへんで盛り上がるかな」的な記事として書いてみましたので、お時間あるときに気軽に読んでいただけたら幸いです。

続きを読む ≫ 異常検知システム開発の難しさ

ヒストグラムベースの異常検知アルゴリズムHBOSとは何か

HBOSの概要

HBOSはヒストグラムベース、統計ベースの教師なし異常検知アルゴリズムです。非常にシンプルでわかりやすく、論文も読みやすいです。ラベルがついていないデータセットに対して適用し、各データについて異常度(Anomaly Score)を算出してくれます。利用者は結果と相談しながらこの異常度に対して閾値を決め、それ以上を異常として扱うような形で使うことができます。こちらの研究レポートでHBOSが速度・検出精度ともに優秀であることが紹介されています。

続きを読む ≫ ヒストグラムベースの異常検知アルゴリズムHBOSとは何か

クラスタリングベースの異常検知アルゴリズムXBOSとは何か

XBOSの概要

XBOS(Cross interaction based outlier score)はクラスタリングを使う教師なし異常検知アルゴリズムです。異常と正常両方を含んだラベルなしのデータセットに対して適用し、それぞれのデータに対して異常度のスコア付けを行う形で使用します。発想も実装も非常にシンプルで、Pythonではわずか55行のコードの実装になっています。Scutumにおけるアノマリ検知のために開発されたもので、こちらの記事で書いたようにかなり良い性能を発揮します。

XBOSの処理は大きく2つのステップに分かれており、まずクラスタリングを行い、次にクラスタ間の調整を行います。

続きを読む ≫ クラスタリングベースの異常検知アルゴリズムXBOSとは何か

Kaggleクレジットカード詐欺データセットで3種の異常検知アルゴリズムを比較

はじめに

Scutumでは2017年の初旬からアノマリ検知(異常検知)による防御機能の開発を本格的にスタートし、1年ほどかけて徐々に実用性を高めてきました。ここで行っているのはいわゆる「教師なし学習による異常検知」で、中核としているアルゴリズムはXBOSというものです。

しばらくの間は完全に手探りでシステム開発を進めていて、異常検出のアルゴリズムの定量的な性能については科学的な裏付けに乏しい状態でした。「なんとなく動いている(異常を見つけることができている)ようだから、これでいいか」という感じの状態でデプロイし、結果を見て改善を重ねるというサイクルを繰り返してきた形です。

2018年になり、これまで殆ど目を通すことができていなかった異常検知に関する学術的な情報(論文等)を見ていたところ、いくつか面白い発見がありました。そこで今回、少し自分でも手を動かして調査したポイントのうちの1つ、3つの異常検知アルゴリズムの性能比較をこの記事にまとめてみました。

続きを読む ≫ Kaggleクレジットカード詐欺データセットで3種の異常検知アルゴリズムを比較

続・デシリアライズ / jackson-databind編

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

TL;DR

アプリケーション側の問題をライブラリの責任にするのはどうかと思います(;´Д`)

続きを読む ≫ 続・デシリアライズ / jackson-databind編

さよならCSRF(?) 2017

2017年11月29日

はじめに

2017年、ついにOWASP Top 10が更新されました。筆者が一番印象的だったのは「Top 10にCSRFが入っていない」ということです。

なぜCSRFが圏外になってしまったのかは4ページのリリースノートで軽く説明されています。「retired, but not forgotten」つまり「引退したね...でも君の事は忘れてないよ」という感じでしょうか。全米がCSRFのために泣きそうです。

それはさておき、具体的には「as many frameworks include CSRF defenses, it was found in only 5% of applications.」という部分が引退理由だと思われます。「多くのフレームワークがCSRF対策を備えた結果、5%のアプリケーションにしかCSRFは見つからなかった」というのが引退の理由です。

この理由を読むと、「ということは、XXEは5%よりも多いのか?」「5%に対して”only”という表現になっているが、5%というのは少ない数値なのか?」「そもそも5%の母集団は何なのか?」など色々な疑問が湧き上がりますが、まぁOWASP Top 10というからには10個にまとめないといけないという性質上、皆が飽き気味のCSRFがスケープゴートにされたというところでしょうか。

さて、OWASP Top 10から引退してしまったとはいえ、CSRFは対策が必要な攻撃手法であり続けます。今回の記事では「2017年時点のCSRF対策」について簡単にまとめてみたいと思います。

続きを読む ≫ さよならCSRF(?) 2017

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インジェクションのゼロデイ攻撃を想定した防御機能