9.7.2 SQL 인젝션, XSS 등 주요 보안 취약점 패턴 매칭
코드 생성 AI는 종종 ’가장 빠른 구현’을 목표로 삼기 때문에, 프레임워크가 제공하는 안전한 보안 계층을 통째로 우회(Bypass)하는 날 것의 패턴(Raw Pattern)을 뱉어내는 성향이 있다.
가령, 데이터베이스 쿼리를 작성할 때 ORM(Object-Relational Mapping)이나 PreparedStatement를 사용하는 대신, 낡은 PHP 튜토리얼에서 배운 것처럼 사용자의 입력값을 그대로 SQL 문자열에 이어 붙이는(String Concatenation) 코드 방식을 구사한다. 이는 곧바로 OWASP Top 10에 등재되는 심각한 취약점인 SQL Injection으로 이어진다. 더불어 프론트엔드 React 코드를 짤 때도 브라우저의 보호 매커니즘을 무시하고 dangerouslySetInnerHTML을 남용하여 XSS(Cross-Site Scripting) 취약점을 양산한다.
이러한 고위험 패턴들을 정지된(Static) 코드 위에 매핑하고 차단하는 것이 보안 분석(SAST) 오라클의 두 번째 임무다.
1. 정적 Taint Analysis(오염 분석) 기법
단순한 키워드(예: SELECT * FROM) 검색만으로는 SQL 인젝션을 잡아낼 수 없다. 오염 분석(Taint Analysis)은 신뢰할 수 없는 외부 입력값(Source, 예를 들어 HTTP Request Body)이 보안상 치명적인 함수(Sink, 예를 들어 db.execute())에 도달하기까지의 데이터 흐름(Data Flow)을 추적하는 고도화된 스캐닝 방식이다.
- Source 지정: LLM이 생성한 컨트롤러 계층의 라우팅 함수에서 파라미터(예:
req.body.username)를 ’오염원(Tainted Source)’으로 태깅(Tagging)한다. - 흐름 추적: 이 오염원이 내부의 어떤 변수에 할당되고 리턴되는지 코드 구조(AST)를 따라가며 모니터링한다.
- Sink 도달 검증: 이 오염된 데이터가 적절한 이스케이프 함수(Sanitization, 예:
sql.escape())를 거치지 않고 직접적으로 데이터베이스 드라이버나 렌더링 엔진으로 삽입되는 논리적 결로가 발견되면 즉각 발포(Trigging)한다.
이러한 Data Flow 검사는 Bandit(Python), Gosec(Go), ESLint-plugin-security 등 언어별 생태계의 대표적인 SAST 도구들에 내장되어 오라클을 구동하는 백본 엔진으로 활약한다.
2. 브라우저 및 DOM 취약점을 겨냥한 XSS 차단
생성형 AI를 이용해 풀스택을 개발할 경우 프론트엔드 취약점이 쏟아진다. 특히 사용자가 제출한 문자열(HTML, Script Tags)을 필터링 없이 렌더링하는 XSS 공격은 LLM이 만들어낸 코드에서 만연하게 발견된다.
- React나 Vue.js 같은 모던 컴포넌트를 LLM이 출력했을 때, 오라클 러너(Runner)는
dangerouslySetInnerHTML또는 바닐라 자바스크립트의innerHTML에 입력값이 동적으로 바인딩되어 있는지 스캔한다. - 만일 신뢰되지 않은 데이터 소스가 DOM API로 직접 주입되는 경로가 포착되면, 오라클은 즉시 코드를 무효화하고 피드백을 생산한다.
“당신이 생성한 렌더링 로직(라인 45)에 크로스 사이트 스크립팅(XSS) 취약점이 발견되었습니다.
innerHTML대신textContent를 사용하거나,DOMPurify와 같은 HTML 새니타이저(Sanitizer) 라이브러리를 통과시키도록 파이프라인을 재작성하십시오.”
3. CWE(Common Weakness Enumeration) 표준 매핑
SAST 오라클은 검출된 보안 결함을 자체적인 중구난방식 규칙으로 명명하지 말고, 반드시 국제 표준인 CWE(Common Weakness Enumeration) 코드에 매핑하여 체계적으로 분류해야 한다.
- 예를 들어, 암호화 과정에서 안전하지 않은 MD5나 SHA-1 해시 알고리즘을 사용한 코드를 LLM이 뱉어내면, 오라클은 이를 단순한 ’에러’가 아닌 **
CWE-327: Use of a Broken or Risky Cryptographic Algorithm**으로 명확히 규정하고 분류한다.
이렇게 모델의 산출물을 CWE라는 강력한 글로벌 보안 분류법으로 심사함으로써, 오라클 시스템은 개별 개발자의 경험치에 의존하지 않고 전 세계 보안 엔지니어들의 정제된 두뇌(Collective Intelligence)로 작성된 일관적이고 비타협적인 컴플라이언스 기준을 코드 생성 AI에게 강제할 수 있다.