π Introduction
ReDOSλ μ κ·ννμμ μ¬μ©μλ‘λΆν° μ λ ₯λ°μ λ λ°μν μ μλ 보μ λ¬Έμ μ λλ€. μΌλ°μ μΌλ‘ ReDOS, Regex DOS λ±μΌλ‘ λΆλ¦¬λ©° μ체μ μΌλ‘ λ°λ³΅λλ κ·Έλ£Ήν μ κ·μκ³Ό μ κ·μ κ²μ¦ λ‘μ§μ λ§μ‘±νλ λλμ λ¬Έμ λ±μ μ΄μ©ν΄μ νλ²μ μΉ μμ²μΌλ‘ μλΉμ€μ κ°μ©μ±μ λ¨μ΄λ¨λ¦¬λ λ°©λ²μ λλ€.
μ΄λ¬ν ReDOSλ Regexp μμ§μ΄ Backtracking κΈ°λ₯μ μ¬μ©ν λ λ°μνλ©° μ΄ κΈ°λ₯μ μ κ·ννμ μ²λ¦¬ μ κ°λ₯ν λͺ¨λ κ²½λ‘λ₯Ό νμνκΈ° μν΄ λΉ ν¨μ¨μ μΈ μμ μ μ¬λ¬λ² μλνκ² λ©λλ€. μ΄λ‘μΈν΄ μμ€ν μ μμμ κ³ κ°μν€λ©° DOSλ₯Ό μνν μ μμ΅λλ€.
μμΈμ Regexμ μκ³ λ¦¬μ¦μ΄ NFA(Nondeterministic Finite Automaton)μ ꡬμ±νκ³ μ΄λ₯Ό κΈ°λ°μΌλ‘ μ²λ¦¬νκΈ° λλ¬Έμ λλ€.
π‘ Offensive techniques
Detect
μΈλΆμμμ μΈμκ° λ±μΌλ‘ μ κ·ννμμ ν΅μ ν μ μλ€λ©΄ ν΄λΉ μ κ·ννμμ μ²λ¦¬μμ λΆνκ° λ λ§ν λΆλΆμ μ°ΎμμΌν©λλ€. λ§μ½ μ κ·ννμμ΄ ^(a+)+$
κ°μ ꡬ문μ μ¬μ©ν λ aaaaX
λ κ°μ΄ μ
λ ₯λλ©΄ μλμ κ°μ μ²λ¦¬λ₯Ό ν΅ν΄μ μ΄ 16λ²μ Pathκ° λ°μνκ² λ©λλ€.
μ΄ λ λ§μ½ μΈλΆ μ
λ ₯ κ°μ΄ aaaaaaaaaaaaaaaaX
λ‘ λ€μ΄μμ κ²½μ° 65536λ²μ Pathκ° λ°μνκ³ λ¬Έμλ λͺκ° μλμμ§λ§, μ κ·ννμ μ²λ¦¬λ₯Ό μν΄ λ°λ³΅λλ λμμ΄ ν¬κ² λμ΄λ¬μ΅λλ€. κ·Έλμ μ΄λ¬ν κ²½μ° ν¨μ¬ ν° a κ°μ΄ λ€μ΄κ°μ κ²½μ° BacktrackingμΌλ‘ μΈν΄ ν° λ£¨νκ° λ°μν©λλ€.
Exploitation
Regexp ν¨ν΄μ λ°κΏ μ μλ€λ©΄ regexp ν¨ν΄μ λ°λΌμ ν° μ²λ¦¬κ° λ°μνλλ‘ μ λν΄μΌν©λλ€. μλ₯Όλ€μ΄ μλμ κ°μ΄ email κ²μ¦ regexpκ° μλ€κ³ κ°μ ν©μλ€.
|
|
μΌλ°μ μΈ email κ²μ¦ regexpλ‘ λ³΄μ΄μ§λ§, μ΄λ¬ν κ²½μ° aaaaaaaaaaaaaaaaaaaaaaaa!
κ°μ΄ inputμΌλ‘ λ€μ΄κ°λ©΄ ν° μ€λ²ν€λκ° λ°μν©λλ€.
π‘ Defensive techniques
Regexp ν¨ν΄μ 체ν¬ν΄λ³΄κ³ λ°λ³΅μ μΈ μμ μ΄ λ°μν μ μλμ§ ν μ€νΈνκ³ λ³΄μν©λλ€. μ΄λ¬ν κ³Όμ μ test codeλ₯Ό ν΅ν΄ μ²λ¦¬νλ©΄ regexpκ° λ³κ²½λμ΄λ μ μ°νκ² λμ²ν μ μμ΅λλ€. λν ReScue, SafeRegex κ°μ ReDOS νμ§ λꡬλ₯Ό ν΅ν΄μ ReDOSμ κ°λ₯μ±μ 체ν¬ν΄λ³Ό μ μμ΅λλ€.
|
|