블로그

개발자를 위한 보안 정복: 공유 및 학습 시리즈 - CRLF 인젝션

July 25, 2019
자프 카란 싱

이와 같은 블로그나 기사를 읽을 때 독자들은 문장 부호의 도움을 받습니다. 예를 들어, 마침표는 문장이 끝나는 지점을 알려주고, 쉼표는 목록의 항목을 구분하거나 잠시 멈춤을 유도하여 아이디어를 명확히 구분하게 합니다. 잘 작성된 블로그(이 글처럼)에서 문장 부호는 거의 눈에 띄지 않으며, 우리가 오래전부터 익숙하게 처리해 온 표준 배경 코드의 일부와 같습니다.

하지만 해커가 이 기사에 침입하여 엉뚱한 곳에 이상한 문장 부호를 삽입한다면 어떻게 될까요? 예를 들어 이런 식이죠:

내용,은! 바꾸지. 않았지만, 문장. 부호가? 정보를. 이해하기! 훨씬? 어렵게. 만들! 수, 있습니다!

이것이 바로 CRLF 인젝션 공격에서 일어나는 현상입니다. CRLF는 줄 바꿈을 나타내기 위해 단독 또는 함께 사용되는 캐리지 리턴(Carriage Return)과 라인 피드(Line Feed)의 약자입니다. 공격자가 기존 애플리케이션에 CR 또는 LF 코드를 삽입하면 때때로 애플리케이션의 동작을 변경할 수 있습니다. 그 영향은 다른 공격들에 비해 예측하기 어렵지만, 대상 조직에 미치는 위험성은 결코 작지 않습니다.

이번 에피소드에서는 다음 내용을 배웁니다:

  • 공격자가 CRLF 인젝션을 실행하는 방법
  • CRLF 인젝션이 위험한 이유
  • 이 취약점을 해결하는 기술.

공격자는 어떻게 CRLF 인젝션을 실행할까요?

기존 코드에 CRLF 문자를 삽입하여 특정 결과를 만들어내는 것은 불가능하지는 않지만 꽤 어려운 일입니다. 공격자가 대상 시스템의 운영 체제나 기타 환경에 따라 서로 다른 CRLF 조합을 사용해야 하기 때문에 더욱 까다롭습니다. 예를 들어, 최신 Windows 시스템은 줄 끝을 표시하기 위해 CR과 LF가 모두 필요하지만, Linux에서는 LF 코드만 있으면 됩니다. HTTP 요청은 줄을 끝내기 위해 항상 정확한 CRLF 코드를 요구합니다.

CRLF 공격은 구현하기 어렵고 결과를 예측하기는 더 어렵지만, 다른 인젝션 공격과 거의 같은 방식으로 시작됩니다. 악의적인 사용자가 웹사이트나 애플리케이션에서 입력을 허용하는 영역에 일반적인 입력 데이터 대신, 혹은 입력 데이터 뒤에 CRLF 코드를 입력하기만 하면 됩니다.

예를 들어, 공격자는 HTTPS 헤더 끝에 캐리지 리턴을 나타내는 ASCII 코드(%0d)와 라인 피드(%0a)를 입력할 수 있습니다. 그러면 전체 쿼리는 다음과 같은 형태가 됩니다:

https://validsite.com/index.php?page=home%0d%0a

데이터가 적절히 정제되거나 필터링되지 않으면, 위 코드로 인해 대상 애플리케이션이나 웹사이트에서 이상한 현상이 발생할 수 있습니다.

CRLF 인젝션은 왜 위험할까요?

CRLF 인젝션 공격은 다른 공격보다 정밀도는 떨어지지만, 때로는 상당히 위험할 수 있습니다. 가벼운 경우, 불필요한 줄을 추가하여 로그 파일을 엉망으로 만들 수 있으며, 이는 자동 보안 시스템이 관리자에게 허위 경고를 보내도록 유도할 수 있습니다. 하지만 이는 동시에 발생하는 실제 침입으로부터 관리자의 주의를 분산시키는 용도로 악용될 수 있습니다.

또한 CRLF 공격은 직접적인 피해를 줄 수도 있습니다. 예를 들어, 애플리케이션이 명령을 받아 특정 파일을 검색하도록 설계된 경우, 쿼리에 CRLF 코드를 추가하면 애플리케이션이 해당 프로세스를 숨기지 않고 화면에 표시하게 만들 수 있으며, 이는 공격자에게 귀중한 정보를 제공할 수 있습니다.

CRLF 인젝션은 '응답 분할(response splitting)' 공격을 수행하는 데 사용될 수도 있습니다. 줄 바꿈 코드를 이용해 유효한 응답을 여러 조각으로 나누는 방식입니다. 이를 통해 해커는 CRLF 코드 이후의 헤더를 제어하여 추가 코드를 삽입할 수 있습니다. 또한 공격자가 자신의 코드를 완전히 삽입할 수 있는 통로를 만들고, CRLF 공격으로 분할된 이후의 줄에서 다른 형태의 공격을 유도할 가능성도 있습니다.

CRLF 인젝션 취약점 제거하기

이번 시리즈에서 기억해야 할 핵심 메시지가 하나 있다면, 그것은 '사용자 입력을 절대 신뢰하지 말라'는 것입니다. 이번 시리즈에서 다룬 대부분의 취약점은 어떤 방식으로든 사용자 입력 영역과 관련이 있었으며, CRLF 인젝션 결함도 예외는 아닙니다.

사용자가 입력을 할 수 있는 모든 지점에는 애플리케이션이나 서버가 잘못 해석할 수 있는 무단 코드 삽입을 방지하기 위한 필터가 적용되어야 합니다. CRLF 공격의 경우 HTTP 헤더를 엄격히 관리하는 것이 특히 중요하지만, GET 및 POST 매개변수나 쿠키도 간과해서는 안 됩니다. CRLF 코드가 추가적인 인젝션 공격으로 이어지는 것을 막는 좋은 방법 중 하나는 사용자의 브라우저로 전송되는 모든 데이터에 HTML 인코딩을 적용하는 것입니다.

CRLF 인젝션에 대한 추가 정보

더 자세한 내용은 CRLF 인젝션에 대한 OWASP의 설명을 참고하시기 바랍니다. 또한, 사이버 보안 팀을 최고의 사이버 전사로 양성하는 Secure Code Warrior 플랫폼의 무료 데모를 통해 방금 습득한 방어 지식을 직접 테스트해 볼 수 있습니다. 이 취약점과 다양한 위협을 방어하는 방법에 대해 더 알아보려면 Secure Code Warrior 블로그를 방문해 주세요.

태그라인

배포 전 AI 기반 개발 거버넌스 확보

AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.

데모 예약하기
리소스 라이브러리

더 많은 블로그 살펴보기

보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.

전체 보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

하나의 보안 문화: Sage는 어떻게 챔피언 프로그램을 구축했는가

Sage가 유연하고 관계 중심적인 접근 방식을 통해 보안을 강화하고, 200명 이상의 보안 챔피언을 양성하며 실질적인 위험 감소를 달성한 사례를 확인해 보세요.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

2026년 사이버 보안 인식의 달: 기업 방어의 핵심, AI 보안 이해하기

주요 AI 기업 대부분이 안전 가이드라인이 마련될 때까지 AI 개발 속도를 전 세계적으로 늦춰야 한다고 공개적으로 촉구하는 시점에 이르렀지만, 사실 심각한 보안 문제는 이미 현실화되었습니다. 이로 인해 AI 도입에 따른 금전적 비용과 위험 부담이 계속 쌓이면서 수많은 보안 책임자와 경영진이 절박한 상황에 놓였습니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

인에이블러 8: 프로그램 브랜딩

성공적인 보안 코딩 프로그램을 위해서는 훌륭한 콘텐츠 그 이상의 것이 필요합니다. 인에이블러 8에서는 브랜딩을 통해 참여를 누구나 선망하는 위상 중심의 경험으로 바꾸는 방법을 알아봅니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

이제 모든 직원이 AI 사이버 보안의 최전선에 있습니다

엔터프라이즈 기술 환경은 너무 늦기 전까지는 아무도 예상하지 못한 속도로 변화하고 있습니다. 우리는 공식적으로 사람이 직접 작성한 코드와 기본적인 코파일럿 지원의 시대를 지나 '에이전트 기반 개발 수명 주기(ADLC)'의 시대로 진입했습니다. 자율형 AI 에이전트는 여러 기능 전반에 걸쳐 전례 없는 효율성을 약속하지만, 동시에 완전히 새로운 차원의 보안 및 규제 위험을 야기합니다.

더 알아보기

배포 전 AI 기반 개발 보안 확보

소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.

데모 예약하기
항목이 없습니다.