-
Notifications
You must be signed in to change notification settings - Fork 208
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Change regex engine? #191
Comments
#148 でいっぺんにやっちゃう感じになるかな。と思いました。 |
ちょっと、どうするのが良いのか話す必要が有りますねー |
擬似メモ: Rustでなければokかもしれないが、基準となるルールがわからない状態 |
主なregexエンジンがrustのデフォルトcrate、hyperscan、PCRE2のようです。(参考: https://sr.ht/~pierrenn/ripgrep/) SigmaがPCRE2を使っている情報は見つからなかったけど、昔から人気な正規表現なので、もしかしてPCRE2を使ったら、より多く検知できるかもしれません。実装してみないとなんともいえませんが。とりあえずhyperscanに変えてみましょう。 @kazuminn さんがやりたいと仰っているので、アサインします。 |
ありがとうございます。 現在、sigmaは、ElasticSearchの正規表現だけをサポートしており、それはjavaで実装されており、ライブラリはjava.util.regexのようです。
と書いてありました。 Perlなので、PCRE2があってるかもしれませんが、perlと"似た"なので、何とも言えません。 とりあえず、hyperscanで実装してみます。 |
なるほど、調べてくれてありがとうございます! |
@kazuminn
が、 https://regex101.com/ で試したら、PCREもPCRE2もパースできました。hyperscanはPCREベースなので、そちらを使った方が速くなるだけではなくて、Sigmaルールとの互換性があって、コンバータスクリプトで正規表現を手直ししなくても良いようになるかも。 |
hyperscanのPCREを使ったhayabusaをコンパイルできましたが、リンクできませんでした。 @YamatoSecurity どうしましょうか?
|
@kazuminn |
うっ。私も二日前に質問していました。報告漏れてすみません。 このまま両方残しておいて、レスポンスの遅い方をdeprecatedってことで閉じるのでいいかなとおもいます。 |
なるほど、決まっていないっぽいので、返事は少し時間がかかるかもしれません。。(作者によって正規表現の書き方が違う気がします・・) こちらで、Python等でルールの正規表現を抽出して、PCREとPCRE2で書き方が正しいかどうかチェックするしかないかもしれません。 |
@kazuminn こちらで確認しました。Sigmaルールの正規表現はPCREでもPCRE2でもパースエラーが出ませんでした。 |
@YamatoSecurity 承知しました。 |
@kazuminn
|
@YamatoSecurity お知らせありがとうございます。 なるほど。 |
@kazuminn |
@kazuminn 実装はどこまで進んでいますか? |
@YamatoSecurity 今、一度コンパイルが成功しましたが、テストとclippyが通らない状況です。 |
@kazuminn ありがとうございます! |
@kazuminn まだテストとclippyに失敗しても良いので、コンパイルできる状態だったら、こちらでどのぐらい速くなっているか等検証したいのですが、ドラフトのPRを上げて頂けますか? |
@YamatoSecurity 上げましたー。#821 |
参考: hscheckツールでsigmaの正規表現をPCREなしのHyperscanで使えるかどうかチェックできるようです: https://intel.github.io/hyperscan/dev-reference/tools.html |
今更気づいて、申し訳ございませんが、hyperscanはIntelが作っているせいかARMに対応していないようなので、そもそも使えないです。。(MAC M1にも対応したいので・・) PCRE-JITはMac M1に対応しているかな?(ARM v5, v7, and Thumb2に対応しているようですが) |
メモ: |
The parsing errors in sigma rules were due to unneeded escapes in the regex so we submitted PRs to fix them and now we have no parsing errors with the regex crate. The regex crate is faster than PCRE2-JIT now, has the highest number of detections, and is more maintained than the pcre2 crate. hyperscan was also a candidate but only works on intel CPUs so we decided to keep using the regex crate. The only problem would be if people write regular expressions with lookarounds and/or back references which the regex crate does not support for performance reasons. In that case we may use pcre2 just for those rules but is not needed at the moment. |
SIGMAルールの正規表現とRustの正規表現に違いがあって、パースできないケースがある。というか、Rustの正規表現エンジンはちょっと特殊で細かいルールが普通の正規表現エンジンとちょっと違う。例えば、
\/r
という正規表現はSIGMAルール的にはOKだが、Rustではパースエラーになってしまう。他にも.*{
という正規表現もSIGMAルール的にはOKだが、Rustではパースエラーになってしまう。今は小手先の修正で対応しているが、結構怪しい実装になっているので他の正規表現エンジンを使いたい。他の正規表現のクレートを探すか、Rustから他の言語(例えばGolangとか)の正規表現エンジンを呼び出すような実装にしておいた方が無難。
現状での候補
The text was updated successfully, but these errors were encountered: