n4o847 / seccamp-redos

A tool for detecting ReDoS vulnerabilities based on automata theory.
https://n4o847.github.io/seccamp-redos/
7 stars 4 forks source link

攻撃文字列生成 #26

Closed n4o847 closed 3 years ago

n4o847 commented 3 years ago

実装途中ですが経過が見えたほうがいい気がするのでプルリクにします。

n4o847 commented 3 years ago

こちらも redefine_state_2 を取り込みましたが、差分をわかりやすくするため redefine_state_2 をベースにして最後に master に戻します

n4o847 commented 3 years ago

む、master も取り込んじゃってるせいであんまりきれいに差分表示できなかった

n4o847 commented 3 years ago

いま showMessageEDAshowMessageIDA が判定のみに特化していて、それと処理が重複するのでどう統合するかが現時点での問題ですね

n4o847 commented 3 years ago

変更点

まだできていない点

n4o847 commented 3 years ago

ところで検出メッセージについて、

と思いました

yapatta commented 3 years ago

僕のこのメッセージ結構適当に決めたので、適切に変えていただけるとありがたいです

n4o847 commented 3 years ago

いうて自分も決めかねるので、直接話し合うとき決めましょう~

n4o847 commented 3 years ago
// (a*)* has EDA?:  {
  status: 'Vulnerable',
  message: 'Detected EDA.',
  attack: 'aaaaaaaaaaaaaaaaaaaaa\u0000'
}

// (a+)+ has EDA?:  {
  status: 'Vulnerable',
  message: 'Detected EDA.',
  attack: 'aaaaaaaaaaaaaaaaaaaaa\u0000'
}

// (\w|\d)* has EDA?:  {
  status: 'Vulnerable',
  message: 'Detected EDA.',
  attack: '00000000000000000000000000000000000000000\u0000'
}

// a*a* has IDA?:  {
  status: 'Vulnerable',
  message: 'Detected IDA.',
  attack: 'aaaaaaaaaaaaaaaaaaaaa\u0000'
}

// (.*)="(.*)" has IDA?:  {
  status: 'Vulnerable',
  message: 'Detected IDA.',
  attack: '\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000="\u0000'
}
n4o847 commented 3 years ago

アルゴリズム自体はできているんですが、 #38 が終わってから各種コンフリクトを直す必要があるのでそしたら WIP を外します。

n4o847 commented 3 years ago

PrunedNFA に置き換えたら suffix が作れなくなってしまったので考え中です

n4o847 commented 3 years ago

アルゴリズムを変えたらいい感じになりました。

$ git checkout master
$ npm test > out/master
$ git checkout add_attacker
$ npm test > out/attack
$ diff out/master out/attack 
834c834,838
< // (a*)* has EDA?:  { status: 'Vulnerable', message: 'Detected EDA.' }
---
> // (a*)* has EDA?:  {
>   status: 'Vulnerable',
>   message: 'Detected EDA.',
>   attack: 'aaaaaaaaaaaaaaaaaaaaa\x00'
> }
915c919,923
< // (a+)+ has EDA?:  { status: 'Vulnerable', message: 'Detected EDA.' }
---
> // (a+)+ has EDA?:  {
>   status: 'Vulnerable',
>   message: 'Detected EDA.',
>   attack: 'aaaaaaaaaaaaaaaaaaaaa\x00'
> }
2041c2049,2053
< // (\w|\d)* has EDA?:  { status: 'Vulnerable', message: 'Detected EDA.' }
---
> // (\w|\d)* has EDA?:  {
>   status: 'Vulnerable',
>   message: 'Detected EDA.',
>   attack: '00000000000000000000000000000000000000000\x00'
> }
3225c3237,3241
< // a*a* has IDA?:  { status: 'Vulnerable', message: 'Detected IDA.' }
---
> // a*a* has IDA?:  {
>   status: 'Vulnerable',
>   message: 'Detected IDA.',
>   attack: 'aaaaaaaaaaaaaaaaaaaaa\x00'
> }
3472c3488,3492
< // (.*)="(.*)" has IDA?:  { status: 'Vulnerable', message: 'Detected IDA.' }
---
> // (.*)="(.*)" has IDA?:  {
>   status: 'Vulnerable',
>   message: 'Detected IDA.',
>   attack: '\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00="\x00\x00'
> }
yapatta commented 3 years ago

EDA判定のバグ修正してくださりありがとうございます。 以前(n,n)(m,k)(m!==k)の場合EDA検出をしたが、nとmとkが違うかという判定をしていなかった気がする。。。(m!==kだけ判定していたので, (a,a)(a,b)(a!==b)のようなグラフを通してしまっていた) 全部見るのにもう少しかかります、お待ちを

yapatta commented 3 years ago

コードの方はいい感じです! しかし自分が攻撃文字列生成について納得できない部分(getSuffixの空集合からQ_fに遷移してしまうところ)があったので、一旦スラックに投げました。