일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- owasp
- hacking
- API Gateway
- 클라우드
- S3
- Vulnerability
- VPC
- JavaScript
- 인터랙티브 자바스크립트
- EC2
- Lambda
- 웹 개발
- aws
- VUL
- web
- cloud
- Today
- Total
yubyeong
OWASP TOP 10 -A03 (Injection :인젝션) 본문
A01 | Broken Access Control (접근 권한 취약점) |
A02 | Cryptographic Failures (암호화 오류) |
A03 | Injection (인젝션) |
A04 | Insecure Design (안전하지 않은 설계) |
A05 | Security Misconfiguration (보안설정오류) |
A06 | Vulnerable and Outdated Components (취약하고 오래된 소스) |
A07 | Identification and Authentication Failures (식별 및 인증 오류) |
A08 | Software and Data Integrity Failures (소프트웨어 및 데이터 무결성 오류) |
A09 | Security Logging and Monitoring Failures (보안 로깅 및 모니터링 실패) |
A10 | Server-Side Request Forgery (서버 측 요청 위조) |
A03 : Injection (인젝션)
- slides down to the third position. 94% of the applications were tested for some form of injection, and the 33 CWEs mapped into this category have the second most occurrences in applications. Cross-site Scripting is now part of this category in this edition.
- 2017년 순위에서 3위로 밀려났다. 애플리케이션의 94%가 어떤 형태로든 인젝션 공격을 받았는지 테스트되었으며, 이 범주에 포함된 33개의 CWE는 애플리케이션에서 두 번째로 많이 발생하였다. 이번 버전에서는 크로스 사이트 스크립팅이 이 범주에 포함되었다. (2017년 1위 Injection + 2017년 7위 XSS ⇒ 2021년 3위)
- CWE-89: SQL 주입.
- CWE-74: 파일 이름 또는 경로의 외부 제어.
설명
- 입력 유효성 검사 및 데이터 처리의 부적절한 처리에 취약점을 이용. 공격자는 SQL 쿼리, 코드 스니펫 또는 명령을 웹 애플리케이션 양식 또는 URL에 주입. 이를 통해 공격자는 민감한 데이터에 액세스하고 애플리케이션의 동작을 조작 가능.
- SQL, NoSQL, OS 명령, ORM(Object Relational Mapping), LDAP, EL(Expression Language) 또는 OGNL(Object Graph Navigation Library) 인젝션 취약점은 신뢰할 수 없는 데이터가 명령어나 쿼리문의 일부분으로써,인터프리터로 보내질 때 취약점이 발생. ⇒ 주입식 공격
- 인젝션 공격에 취약한 애플리케이션
- 사용자가 제공한 데이터는 애플리케이션에서 검증, 필터링 또는 정리되지 않는다.
- 컨텍스트 인식 이스케이프가 업는 동적 쿼리나 매개변수화되지 않은 호출은 인터프리터에서 직접 사용된다.
- 적대적인 데이터는 ORM(객체 관계 매핑) 검색 매개변수 내에서 추가적이고 민감한 레코드를 추출하는데 사용.
- 악의적인 데이터가 직접 사용되거나 연결, SQL 또는 명령에 동적 쿼리, 명령 또는 저장 프로시저의 구조와 악의적인 데이터가 포함.
- 인젝션 공격에 취약한 애플리케이션
예방법
- 가장 좋은 방법은 소스 코드 검토이다. 모든 매개변수, 헤더, URL, 쿠키, JSON, SOAP, 및 XML 데이터 입력에 대한 자동화된 테스트를 강력히 권장.
- CI/CD 파이프라인에 정적(SAST), 동적(DAST), 대화형(IAST) 애플리케이션 보안 테스트 도구를 포함하여 프로덕션 배포 전에 인젝션 취약점을 식별 가능.
- 인터프리터를 완전히 사용하지 않고, 매개변수화된 인터페이스를 제공, ORM(객체 관계 매핑 도구)로 마이그레이션하는 안전한 API 를 사용.
- 잔여 동적 쿼리의 경우, 해당 인터프리터의 특정 이스케이프 구문을 사용하여 특수 문자를 이스케이프 처리.
- 테이블 이름, 열(속성) 이름 등의 SQL 구조는 이스케이프 처리할 수 없음에 사용자가 지정한 구조 이름은 위험하다.
- SQL 주입 시 대량의 레코드가 공개되는 것을 방지하기 위해 쿼리 내에서 LIMIT 및 기타 SQL 컨트롤을 사용.
공격 시나리오 예시
- SQL Injection (SQL 삽입): 데이터베이스 공격을 위해 SQL 쿼리를 주입하는 것으로, 공격자는 데이터베이스를 조작하거나 민감한 정보를 탈취할 수 있다.
- Cross-Site Scripting (XSS, 크로스 사이트 스크립팅): 주로 JavaScript 기반 브라우저 공격으로, 감염된 웹 페이지를 통해 세션 탈취, 쿠키 도용 또는 사용자에 대한 기타 공격을 수행.
- Command Injection (명령 삽입): 공격자는 애플리케이션에서 실행되는 시스템 명령에 악성 명령을 주입하여 서버를 제어하거나 무단 작업을 수행.
- LDAP Injection (LDAP 삽입): 공격자는 인증 및 권한 부여에 사용되는 LDAP 쿼리를 조작하여 액세스 권한을 얻는다.
- XML Injection (XML 삽입): 공격자는 XML 데이터에 악의적인 내용을 삽입하여 애플리케이션의 구문 분석 프로세스를 방해하고 액세스 권한을 얻을 수 있다.
- Server-Side Template Injection (SSTI, 서버 측 템플릿 삽입): 공격자는 서버 측 템플릿에 악성 코드를 주입하여 서버에서 코드를 실행할 수 있다.
- 시나리오 1:
String query = "SELECT \\* FROM accounts WHERE custID='" + request.getParameter("id") + "'";
- 시나리오 2: 프레임워크에 대한 애플리케이션의 맹목적인 신뢰로 인해 여전히 취약한 쿼리가 발생할 수 있다(예: Hibernate Query Language(HQL))
Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");
- 위의 두 경우 모두 공격자는 브라우저에서 ‘id’ 매개변수 값을 수정하여 ‘UNION SLEEP(10);—’ 를 전송. 예를 들어
http://example.com/app/accountView?id=' UNION SELECT SLEEP(10);--
이렇게 하면 두 쿼리의 의미가 모두 변경되어 계정 테이블의 모든 레코드 반환.
Injection 항목의 CWE 목록
CWE-74 하위 구성 요소에서 사용되는 출력의 특수 요소의 부적절한 중화('주입')
CWE-75 특수 원소를 다른 평면으로 살균하지 못함(특수 원소 주입)
CWE-77 명령에 사용되는 특수 요소의 부적절한 무력화('명령 주입')
CWE-78 OS 명령에 사용되는 특수 요소의 부적절한 무력화('OS 명령 주입')
CWE-79 웹 페이지 생성 중 입력의 부적절한 무효화('교차 사이트 스크립팅')
CWE-80 웹 페이지에서 스크립트 관련 HTML 태그의 부적절한 무효화(기본 XSS)
CWE-83 웹 페이지의 속성에 있는 스크립트의 부적절한 무력화
CWE-88 명령문에서 인수 구분 기호의 부적절한 무효화('인수 삽입')
CWE-89 SQL 명령에 사용된 특수 요소의 부적절한 무력화('SQL 주입')
CWE-90 LDAP 쿼리에 사용된 특수 요소의 부적절한 무력화('LDAP 주입')
CWE-91 XML 주입(일명 블라인드 XPath 주입)
CWE-93 CRLF 시퀀스의 부적절한 중화('CRLF 주입')
CWE-94 코드 생성의 부적절한 제어('코드 삽입')
CWE-95 동적으로 평가되는 코드에서 지시문의 부적절한 무력화('Eval Injection')
CWE-96 정적으로 저장된 코드의 지시문의 부적절한 무력화('정적 코드 삽입')
CWE-97 웹 페이지 내 서버 측 포함(SSI)의 부적절한 무력화
CWE-98 PHP 프로그램의 Include/Require 문에 대한 파일 이름의 부적절한 제어('PHP 원격 파일 포함')
CWE-99 리소스 식별자의 부적절한 제어('리소스 주입')
CWE-100 더 이상 사용되지 않음: 입력 검증 문제에 대한 포괄적인 용어였습니다.
CWE-113 HTTP 헤더의 CRLF 시퀀스의 부적절한 무력화('HTTP 응답 분할')
CWE-470 외부 제어 입력을 사용하여 클래스 또는 코드 선택('안전하지 않은 반사')
CWE-610 다른 영역의 리소스에 대한 외부 제어 참조
CWE-643 XPath 표현식 내 데이터의 부적절한 중립화('XPath 주입')
CWE-644 스크립팅 구문에 대한 HTTP 헤더의 부적절한 중립화
CWE-652 XQuery 표현식 내 데이터의 부적절한 중립화('XQuery 주입')
CWE-917 표현 언어 문장에 사용된 특수 요소의 부적절한 무력화('표현 언어 주입')
참고자료
https://owasp.org/www-project-top-ten/
'Web Hacking > OWASP TOP 10' 카테고리의 다른 글
OWASP TOP 10 -A05 (Security Misconfiguration :보안설정오류) (0) | 2025.05.06 |
---|---|
OWASP Top 10 -A04 (Insecure Design :안전하지 않은 설계) (2) | 2025.05.06 |
OWASP TOP 10 -A02 (Cryptographic Failures :암호화 오류) (1) | 2025.05.05 |
OWASP Top 10 -A01 (Broken Access Control :접근 권한 취약점) (2) | 2025.05.05 |
OWASP Top 10 List -2021 ver. (0) | 2025.05.05 |