The Shell Rewrites Your Filter: How Command Blocklists Get Beaten
Attackers defeat text command filters by rewriting a command into a form that means the same thing but does not match the string. The fix is two layers: normalize before matching, and read the real argv in-kernel at execve.