SQL Injection(SQLi)은 OWASP Top 10에 매년 등장하는 치명적인 웹 취약점입니다. 공격이 시도된 흔적은 데이터베이스가 아닌 웹 서버 액세스 로그에 먼저 나타납니다. 로그 분석만으로도 공격 시도를 탐지하고 사전에 차단할 수 있습니다.
공격자는 URL 파라미터나 POST 바디에 SQL 구문을 삽입합니다.
`` GET /api/users?id=1+UNION+SELECT+table_name+FROM+information_schema.tables-- HTTP/1.1 GET /search?q='+OR+1=1+-- GET /product?sku=1;+DROP+TABLE+products;-- GET /login?user=admin'--&pass=x `
` GET /api/data?id=1%27%20OR%20%271%27=%271 HTTP/1.1 GET /page?id=1%20UNION%20SELECT%20null,null,null-- HTTP/1.1 `
%27은 작은따옴표('), %20은 공백입니다.
| 패턴 | 설명 | |
|---|---|---|
| ------ | ------ | |
UNION SELECT | 다른 테이블 데이터 추출 시도 | |
OR 1=1 | 항상 참이 되는 조건으로 우회 | |
information_schema | DB 메타데이터 조회 시도 | |
DROP TABLE | 테이블 삭제 시도 | |
SLEEP(, BENCHMARK( | 시간 기반 블라인드 SQLi | |
LOAD_FILE(, INTO OUTFILE | 파일 시스템 접근 시도 | |
xp_cmdshell | MSSQL 명령 실행 시도 | |
| 공격 유형 | MITRE 기법 | 설명 |
| ----------- | ----------- | ------ |
| SQL Injection | T1190 | Exploit Public-Facing Application |
| DB 덤프 추출 | T1005 | Data from Local System |
| xp_cmdshell 실행 | T1059 | Command and Scripting Interpreter |
SQL Injection 공격은 로그에 UNION SELECT, OR 1=1` 같은 특징적인 문자열이 그대로 기록됩니다. 로그 모니터링으로 조기 탐지하고, 앱 코드에서 파라미터 바인딩으로 근본적인 방어를 갖추는 것이 핵심입니다.