기록하는 공부
CRLF 인젝션 / HTTP 응답 스플리팅 (HTTP response splitting) 본문
728x90
반응형
CSLF Injection
HTTP 메시지에서는 줄 바꿈을 나타내기 위해서 CR(Carriage Return ,\r)과 LF(Line Feed, \n)라는 특수문자를 사용한다.
이 특수문자를 묶어 CRLF와 같이 함께 사용하는데 CRLF는 메시지의 각 라인이 끝임을 알려주는 중요한 구분자가 된다.
특히, HTTP 메시지에서 헤더와 바디가 구분될 때 빈 줄에는 CRLFCRLF처럼 CRLF가 두 번 사용된다.
이름 | 아스키 코드 | URL 인코딩 | 문자 |
CR( Carriage Return) | ASCII 13 | %0D | \r |
LF(Line Feed) | ASCII 10 | %0A | \n |
CSLF 인젝션 정의
- CRLF 인젝션 : 악의적인 사용자가 웹 애플리케이션에 특수한 개행 문자를 삽입하여 웹 서버와 클라이언트 간의 통신 흐름을 조작하거나 공격
- HTTP 매개변수 혹은 URL을 수정하여 코드가 실행되거나 데이터 노출, 로그 파일 조작 등을 발생시킬 수 있다.
CSLF 인젝션 원리
- HTTP 헤더는 보통 CRLF로 끝나며, 공격자는 이를 이용하여 새로운 헤더를 삽입하거나 기존 헤더를 조작하여 악용
- 주로 Carriage Return (CR)과 Line Feed (LF) 문자가 사용
CSLF 인젝션 공격 방식
- 헤더 삽입 (Header Injection) : 입력 데이터에 CRLF 문자를 삽입하여 새로운 헤더를 생성하거나 이미 존재하는 헤더를 변경
User-Agent: maliciousUser\r\nInjected-Header: attackPayload\r\n
- 응답 조작 (Response Manipulation) : CRLF Injection을 통해 공격자는 응답 내용을 변경하거나 조작
HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE html><html><body>\r\nHacked Content\r\n</body></html>
CSLF 인젝션 종류
- 헤더 CRLF 인젝션 (Header CRLF Injection) : HTTP 헤더에 CRLF 문자를 삽입하여 헤더를 조작하는 공격
User-Agent: maliciousUser\r\nInjected-Header: attackPayload\r\n
- 쿠키 CRLF 인젝션 (Cookie CRLF Injection) : HTTP 쿠키 값에 CRLF 문자를 삽입하여 쿠키를 조작하는 공격
Cookie: sessionid=123\r\nSet-Cookie: isAdmin=true\r\n
- 리다이렉션 CRLF 인젝션 (Redirection CRLF Injection) : 리다이렉션 헤더를 조작하여 사용자를 악성 사이트로 리다이렉트 시키는 공격
Location: https://malicious-site.com\r\n
- 메일 헤더 CRLF 인젝션 (Mail Header CRLF Injection) : 이메일의 헤더를 조작하여 스푸핑된 이메일을 전송하는 공격
To: victim@example.com\r\nSubject: Spoofed Subject\r\n
- 로그 기록 CRLF 인젝션 (Log Injection) : 그 기록에 CRLF 문자를 삽입하여 로그를 변조하거나 조작하는 공격
Malicious input detected\r\nAttacker's payload\r\n
대응방안
- 입력 검증 : 사용자 입력을 받을 때, 적절한 입력 검증 및 이스케이프를 수행하여 CRLF 문자를 필터링
- 헤더 값 인코딩 : 헤더 값에 대한 인코딩을 수행하여 제어 문자를 방지
HTTP 응답 스플리팅 (HTTP response splitting)
HTTP 응답 스플리팅 정의
- 공격자가 응답 헤더를 조작하여 여러 응답을 하나로 결합하거나 악성 컨텐츠를 삽입하는 공격
- 주로 CRLF (Carriage Return Line Feed) 문자를 이용하여 수행
HTTP 응답 스플리팅 원리
- CRLF 문자 삽입 : 공격자는 입력 데이터에 CRLF 문자 (\r\n)를 삽입하여 응답 헤더를 조작
- 응답 분할 : 삽입된 CRLF 문자를 기반으로 여러 개의 응답이 하나의 응답으로 인식되어 클라이언트에 전송
- 악성 응답 헤더 삽입 : 공격자는 삽입된 CRLF을 이용하여 악성 헤더를 추가하거나 원하는 내용을 삽입
HTTP 응답 스플리팅 공격 방식
- 헤더 분리 (Header Splitting) : 공격자는 응답 헤더를 두 개 이상의 부분으로 나누어 클라이언트로 전송함으로써 클라이언트는 공격자가 추가한 헤더를 갖는 새로운 응답을 해석
HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nMaliciousHeader: attackPayload\r\n\r\nInjected Content
- 리다이렉션 : 공격자는 리다이렉션 헤더를 삽입하여 클라이언트를 악성 사이트로 리다이렉트
HTTP/1.1 302 Found\r\nLocation: https://malicious-site.com\r\n\r\n
대응 방안
- 입력 유효성 검사 : 입력값에 대한 검증 및 이스케이프를 통해 CRLF 문자를 필터링하거나 대체
- 헤더 값 검증 : 서버에서 생성되는 응답 헤더 값에 대해 검증을 수행하여 이상한 문자열이나 CRLF 문자를 제거
CRLF 인젝션과 HTTP 응답 스플리팅 차이
목적 | 공격 방식 | 예시 | |
CRLF 인젝션 | - 주로 HTTP 헤더에 삽입된 제어 문자를 통해 공격자가 응용 프로그램의 동작을 변경하거나 악용 - CRLF 문자를 삽입하여 헤더를 조작 |
주로 입력 값에 CRLF 문자를 삽입하여 새로운 헤더를 생성하거나 기존 헤더를 조작 |
User-Agent: maliciousUser\r\nInjected-Header: attackPayload\r\n |
HTTP 응답 스플리팅 | 응답 헤더를 조작하여 여러 응답을 하나로 결합하거나 악성 컨텐츠를 삽입하는 것이 목적 | 주로 CRLF 문자를 이용하여 응답 헤더를 분할하고, 그 사이에 악성 헤더나 컨텐츠를 삽입 | HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nMaliciousHeader: attackPayload\r\n\r\nInjected Content |
■ 차이점
- 대상
- CRLF 인젝션은 주로 서버에서 사용자 입력을 받는 부분에서 발생
- HTTP 응답 스플리팅은 주로 서버에서 생성된 응답 헤더를 조작하는 부분에서 발생
- 목적
- CRLF 인젝션은 주로 헤더 조작을 통한 다양한 공격을 목적
- HTTP 응답 스플리팅은 주로 응답의 왜곡이나 여러 응답을 하나로 합치는 것이 목적
참고자료
728x90
반응형
'정보보안 > 보안 공부' 카테고리의 다른 글
접근통제 모델 (0) | 2023.07.25 |
---|---|
보안 컴플라이언스 (compliance / 준법 감시) (0) | 2023.07.19 |
subdomain Takeover/DNS Zone Takeover이란 ? (0) | 2023.07.10 |