인젝션
IT위키
더 많은 작업
인젝션(Injection, 삽입 공격)은 신뢰할 수 없는 입력이 명령어나 질의문의 일부로 인터프리터에 전달될 때, 공격자가 넣은 문자열이 데이터가 아니라 명령으로 해석되어 의도하지 않은 명령이 실행되거나 허가되지 않은 데이터에 접근되는 취약점이다.
응용 프로그램이 사용자 입력을 문자열로 이어 붙여 SQL·운영체제 명령·LDAP 필터·XPath 식 같은 인터프리터가 해석하는 문장을 만들면, 입력 속의 따옴표·세미콜론·논리 연산자가 문장의 구조를 바꿀 수 있다. 인터프리터는 어디까지가 개발자가 쓴 코드이고 어디부터가 입력값인지 구분하지 못한다. OWASP Top 10 은 2013년판과 2017년판에서 인젝션을 1위(A1)에 두었고, 2021년판에서는 크로스사이트 스크립트를 합쳐 3위(A03)에 두었다.[1]
| 종류 | 해석하는 곳 | 예 |
|---|---|---|
| SQL 인젝션 | DBMS 의 SQL | ' OR '1'='1 로 로그인 우회, UNION 으로 다른 테이블 조회
|
| 명령어 삽입(OS 명령 인젝션) | 운영체제 셸 | ; cat /etc/passwd 를 붙여 셸 명령 실행
|
| LDAP 인젝션 | 디렉터리 서비스의 검색 필터 | *)(uid=*)) 로 조건 무력화
|
| XPath 인젝션 | XML 문서 질의 | ' or '1'='1 로 XML 사용자 정보 열람
|
| 코드·표현식 인젝션 | 스크립트 엔진, 템플릿·표현 언어 | eval 에 넘긴 입력, 서버 측 템플릿 인젝션 |
| 크로스사이트 스크립트 | 피해자 브라우저의 HTML·자바스크립트 | 게시글에 스크립트 삽입(OWASP 2021 은 인젝션에 포함) |
원인은 입력을 검증하지 않고 명령 문자열에 직접 이어 붙이는 것이다. 대응은 데이터와 명령을 처음부터 따로 넘기는 것이 기본이다.[2]
- 매개변수화 질의(Prepared Statement, 바인드 변수)를 쓴다 → 자바 PreparedStatement
- 운영체제 명령은 셸을 거치지 않는 API 를 쓰고, 허용 목록(화이트리스트)에 있는 값만 받는다
- 서버 측 입력값 검증과 특수 문자 이스케이프, 최소 권한 DB 계정, 자세한 오류 메시지 숨기기
- 정적 분석·동적 점검으로 시큐어 코딩 규칙 위반을 찾는다
| 항목 | 핵심 |
|---|---|
| 인젝션 | 신뢰할 수 없는 데이터가 명령·질의의 일부로 인터프리터에 전달된다 |
| 인증 및 세션 관리 취약점 | 인증·세션 토큰 처리가 잘못되어 다른 사용자로 가장할 수 있다 → 인증 및 세션 관리 취약점 |
| 보안 설정 오류(잘못된 보안 구성) | 기본 계정·불필요한 서비스·패치 누락·자세한 오류 메시지 등 설정 문제 |
| 알려진 취약점이 있는 컴포넌트 사용 | 취약점이 공개된 라이브러리·프레임워크를 그대로 쓴다 → 소프트웨어 구성 분석 |