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

H2Oが自動生成したRandom Forestソースコードをハックする
はじめに

筆者が使ってみた感じ、以下のような特徴があるようです
- Javaでフルスクラッチで開発されている
- しかし、PythonやRのユーザも取り込めるように、PythonとRのインターフェースもきちんと用意されている
- 使用できるアルゴリズムの数は非常に少ないが、どれもKaggle等でよく使われる厳選されたものになっている(上画像を参照)
- そのため、「サービスやプロダクトに機械学習を実用する」という視点だと、迷いがなく非常に使いやすい
- 研究や学習向けではなく、完全に実用向き
- 学習時に並列処理が行われるので、マルチコアCPUの良さを十分に活かすことができる。(H2Oでクラスタを作成することもできるようだが、筆者はそちらは調べていない)
- OSSであるが、非常にお金がかかっている印象。UIが洗練されており、ヘルプやドキュメントも含めてとても使いやすい
- 学習の結果生成されたモデルはPOJOとして自動生成されたJavaソースコードの形でダウンロードでき、Javaプロダクトに組み込みやすい
- (H2Oと同じJava製の)WekaやRapidMiner、あるいはPythonやRなどの機械学習環境やライブラリよりも、コンセプトも設計も新しく、ビッグデータ(文字通り、非常に大量のデータ)を扱うことを当たり前のように前提にしている。
- 多くの(主に英語圏の)大企業で実績がある。PayPalの事例などがインターネット上で公開されている
- AutoML機能で、複数のアルゴリズムでのモデル生成やそれらのアンサンブルなどまで一気にやってくれる。有料となるH2O Driverless AIだとさらに凄い(特徴エンジニアリングまでやる)らしい
まだまだ日本語の情報は少なく感じますが、特にJavaのプロダクトに機械学習を導入する際には、非常に有力なソフトウェアだと思います。
WAFとHTTPリクエストスマグリング
HRSとは
2018年の7月に、「XSS due to the header Transfer-Encoding: chunked」というタイトルでPHPの脆弱性報告がありました。
https://bugs.php.net/bug.php?id=76582
日本語の情報源としては徳丸さんによるこちらの記事が参考になります。
この脆弱性は下記のように、HTTPリクエストヘッダ内に一見矛盾していたり、明確でない内容が含まれている場合の挙動についてのものでした。
Transfer-Encoding: chunked Content-Length: 25
この問題はHTTPリクエストスマグリング(HTTP Request Smuggling、以下HRS)と呼ばれていて、今から13年前、2005年に知られたものです。筆者は今から11年前に「ウェブアプリケーションセキュリティ」という本(通称:金床本)を上梓しましたが、その中で第12章がHTTPリクエストスマグリングの解説に当てられています。

Transfer-Encoding: chunkedとContent-Lengthの両方がリクエスト中に存在するケースというのはHRSの基本中の基本で、2018年になってPHPほどメジャーなソフトウェアにこの脆弱性が出てきたというのは個人的にガックリきました。
しかし、上記でリンクした脆弱性情報のページおよび徳丸さんの記事どちらにおいてもHRSという脆弱性の分類、名前が登場していないことから、意外とHRSは知名度が低いのかもしれません。