블로그

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

January 17, 2019
자프 카란 싱

대다수의 컴퓨터 시스템은 경량 디렉터리 액세스 프로토콜(LDAP)을 사용합니다. 이는 모든 IP(인터넷 프로토콜) 네트워크에서 분산 디렉터리 정보 서비스를 유지하는 데 사용됩니다. 즉, 기본적으로 사용자 정보를 추적하는 수단으로 기능합니다.

LDAP은 애플리케이션이 사용자의 권한을 확인하여 특정 작업을 수행할 수 있는지 판단하는 인증 소스로 자주 사용되며, 특히 조직 내에서 정의된 역할과 관련하여 중요하게 쓰입니다. 예를 들어, 회계 부서 직원만 회계 소프트웨어를 사용할 수 있도록 제한하는 식입니다. 애플리케이션은 사용자가 설정된 권한 내에서 활동하는지 확인하기 위해 LDAP 테이블을 조회하도록 프로그래밍되는 경우가 많습니다.

악의적인 사용자가 LDAP 쿼리를 조작할 수 있을 때 문제가 발생합니다. 이를 통해 수신 서버를 속여 정상적으로는 허용되지 않는 잘못된 쿼리를 실행하게 하거나, 비밀번호 없이도 권한이 없는 사용자에게 높은 수준의 관리자 권한을 부여하게 만들 수 있습니다.

LDAP 인젝션은 까다로울 수 있지만, 이번 에피소드에서는 다음 내용을 배웁니다.

  • 작동 원리
  • 위험한 이유
  • 이를 방어하기 위한 보안 조치 방법

공격자는 어떻게 LDAP 인젝션을 사용할까요?

LDAP 기반 공격이 수년간 인기를 끄는 이유 중 하나는 거의 모든 컴퓨터 시스템이 이를 사용하기 때문입니다. LDAP은 오픈 소스이며 매우 효율적으로 작동하기 때문에, 이를 대체할 만한 대안이 많지 않습니다.

핵심적으로 LDAP은 IP 기반 컴퓨터 시스템이나 네트워크 내의 유효한 사용자를 추적하는 데이터베이스입니다. 이를 통해 사용자는 시스템, 네트워크, 서버, 애플리케이션, 심지어 동일 네트워크상의 다른 사용자에 대한 정보를 공유할 수 있습니다.

LDAP은 정보를 고유 이름(Distinguished Name, DN)이라고 불리는 데이터베이스 행이나 레코드와 유사한 형태로 저장합니다. 각 DN은 고유합니다. 예를 들어, 대기업의 시카고 회계 사무소에서 근무하는 사용자의 DN은 다음과 같을 수 있습니다.

cn=James Smith, ou=Corporate Accounts, dc=Chicago, do=Parkview

각 DN의 고유성을 보장하기 위해 레코드에 "+", "/", "="와 같은 다양한 코드가 추가될 수 있습니다. 또한 레코드 앞뒤에 공백을 삽입하여 시카고 파크뷰 사무소의 기업 회계 부서에 동명이인인 James Smith가 두 명 있더라도 각각 개별적인 DN을 갖도록 할 수 있습니다.

애플리케이션은 일반적으로 사용자가 특정 DN에 대한 쿼리를 보낼 수 있도록 LDAP을 사용합니다. 예를 들어, 급여 명세서 오류를 문의하기 위해 급여 담당자의 연락처를 찾을 때가 이에 해당합니다. LDAP 인젝션은 검색 쿼리에서 사용자가 제공한 매개변수에 대한 검증이 이루어지지 않을 때 발생할 수 있습니다. 이 경우 해커는 정상적인 검색을 조작하여 인증 메커니즘을 우회하거나 임의의 추가 쿼리를 실행할 수 있습니다. 이는 서버를 속여 사용자 비밀번호와 같이 허용되지 말아야 할 결과를 표시하게 하거나, 심지어 유효한 비밀번호 없이도 네트워크 내의 보안 구역에 접근 권한을 부여하도록 애플리케이션을 유도할 수 있습니다.

LDAP 인젝션이 위험한 이유는 무엇일까요?

LDAP 인젝션의 가장 큰 위험은 전 세계 대부분의 IP 컴퓨터 네트워크에 이 프로토콜이 널리 퍼져 있다는 점입니다. 이는 정보를 훔치거나 네트워크 권한을 상승시키려는 해커에게 쉬운 발판이 됩니다. 숙련된 해커라면 LDAP 인젝션 가능성을 반드시 확인하므로, 보안 팀은 이러한 취약점이 항상 차단되도록 해야 합니다.

구체적으로, 많은 애플리케이션이 유효한 사용자가 조직 내 사용자 및 그룹에 대한 제한된 정보나 DN에 포함된 기타 정보를 찾을 수 있도록 프로그래밍되어 있습니다. 예를 들어, 앱을 통해 LDAP으로 시카고에서 근무하는 기업 회계사의 연락처 정보를 검색하면 앞선 예시의 James Smith 정보가 반환될 수 있습니다. 권한 설정에 따라 이는 LDAP 쿼리의 매우 정상적인 사용 사례일 수 있습니다.

위험은 악의적인 사용자가 필터링되지 않은 매개변수를 쿼리에 추가하여 검색의 성격을 바꾸고, 서버를 속여 정상적으로는 제공되지 말아야 할 정보를 얻어낼 때 발생합니다. 예를 들어, user=* 문자열을 추가하면 공격자는 조직 전체의 모든 사용자 정보를 얻을 수 있는데, 이는 결코 허용되어서는 안 되는 일입니다.

LDAP을 인증에 사용하는 애플리케이션의 경우 문제는 더욱 심각해질 수 있습니다. 공격자는 LDAP 쿼리 끝에 (&) 문자열 등을 사용하여 서버가 해당 인수를 참(True)으로 인식하도록 속일 수 있습니다. 앱이 LDAP을 사용하여 비밀번호를 검증하는 경우, LDAP 인젝션을 통해 참(True) 인수를 강제로 주입하면 권한이 없는 사용자도 비밀번호 없이 관리자 권한으로 네트워크에 로그인할 수 있게 됩니다.

네트워크에서 LDAP 인젝션을 방지하는 방법

LDAP 인젝션을 방지하는 가장 좋은 방법 중 하나는 LINQtoAD와 같이 이를 방지하도록 설계된 프레임워크를 도입하는 것입니다. 이미 LDAP 쿼리를 사용하는 애플리케이션이 네트워크에 있다면 적용이 어려울 수 있지만, 향후 개발되는 모든 신규 애플리케이션에는 인젝션 방지 프레임워크를 사용하는 것이 좋습니다.

기존 LDAP 사용 애플리케이션도 화이트리스트 검증과 입력값 정제(sanitization)를 통해 인젝션 공격을 방어할 수 있습니다. 가능한 경우 사용자 입력을 신뢰할 수 있는 제한된 값으로만 허용하십시오. 그렇지 않은 경우, LDAP 쿼리에 포함되는 사용자 입력은 반드시 먼저 정제해야 합니다. 이때 GET 및 POST 파라미터, 쿠키, HTTP 헤더도 공격 벡터가 될 수 있으므로 잊지 말고 포함하십시오. 직접 입력 정제 함수를 작성하지 말고, 신뢰할 수 있는 타사 보안 라이브러리나 프레임워크 내장 API를 사용하십시오.

표적 수정 외에도 LDAP 쿼리 애플리케이션에 네트워크상에서 필요한 최소한의 권한만 부여하는 것과 같은 좋은 컴퓨팅 관행이 도움이 될 수 있습니다. 이렇게 하면 최악의 상황에서 LDAP 인젝션이 발생하더라도 피해를 최소화할 수 있습니다.

LDAP 인젝션에 대한 추가 정보

더 자세한 내용은 OWASP의 LDAP 인젝션 관련 문서나 인젝션 방지 치트 시트를 참조하십시오. 또한 사이버 보안 팀을 최고의 사이버 전사로 훈련시키는 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 기반 개발 보안 확보

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

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