1. 개요
SQL Injection은 웹 사이트의 주요 공격 벡터(Attack Vector)이자 웹 애플리케이션에서 흔하게 발생할 수 있는 보안 위협입니다. 대부분의 웹 애플리케이션 방화벽(WAF)은 SQL Injection 공격을 기본적으로 탐지하고 차단할 수 있습니다. 그러나 다수의 WAF 공급업체가 JSON 연산자 및 함수를 악용하는 SQL Injection 공격을 탐지하지 못하는 것으로 확인되어, 이를 대응하기 위한 방안을 분석하였습니다.
2. 공격 유형
JSON 연산자 및 함수를 사용하는 SQL Injection 공격 시도는 DBMS에서 JSON 내 구문을 제대로 검사되지 않아서, 해당 WAF를 우회하도록 허용됩니다. PostgreSQL, MySQL, SQLite 및 Microsoft SQL Server와 같은 주요 데이터베이스는 JSON을 지원하므로 공격자는 이 기능을 악용하여 JSON 연산자 및 함수 기반 SQL Injection 공격을 시도할 수 있습니다.
다음은 각 DBMS별 JSON 연산자 및 함수를 악용한 SQL Injection 공격 샘플 구문입니다.
- PostgreSQL
' or "[1,2,3]"::json ->> 2='3'
' or json_array_length({}) <= 3
...
- MySQL
' or json_contains('{"a":1, "b":2}', '1', '$.a');
' or JSON_MERGE('[1, 2]', '[true, false]');
...
- SQLite
' or '{"a":1,"b":2}'::jsonb ->> 'b'='2
' or json_extract('{"a":2,"c":[4,5,{"f":7}]}', '$.c[2].f');
...
- MSSQL
' or ISJSON('{"a":"1"}') = '1
' or JSON_VALUE('{"info":{"address":[{"town":"Paris"},{"town":"London"}]}}', '$.info.address[0].town')='Paris
...
3. 대응
SQL Injection 공격 유형에 JSON 연산자 및 함수 형식에 SQL Injection 공격 구문이 포함될 경우 탐지하도록 합니다.
저희 AIWAF 제품에서는 <SQL Injection (JSON Operators of Functions)> 패턴으로 해당 취약점을 악용한 공격 구문을 탐지합니다.
4. 결론
SQL Injection based JSON에 대한 취약점들이 많이 발견되고 있으며, 이에 따른 업데이트도 계속 나오기 때문에 주기적으로 점검 및 업데이트가 필요합니다.
저희 AIWAF 제품에서는 SQL Injection based JSON에서 발생하는 취약점들에 대해 패턴을 다수 개발하여 대응하고 있으며, 앞으로도 발견되는 SQL injection based JSON 관련 취약점들에 대해서도 신속하게 대응할 예정입니다.
5. 참조
https://www.picussecurity.com/resource/blog/waf-bypass-using-json-based-sql-injection-attacks
https://www.securityweek.com/wafs-several-major-vendors-bypassed-generic-attack-method/
https://docs.monitorapp.com/books/juseok/page/7646-json-syntax-sqli-202301