본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
LDAP Injection; LDAP 삽입
외부 입력값을 검증하지 않고 LDAP 검색 필터나 DN 에 그대로 넣어, 공격자가 조회 조건을 바꾸거나 인증을 우회하게 만드는 공격

LDAP 디렉터리는 사용자 계정·조직 정보를 담고 있어 로그인 인증이나 주소록 검색에 자주 쓰인다. 애플리케이션이 사용자가 입력한 아이디를 (&(uid=입력값)(userPassword=입력값)) 같은 검색 필터 문자열에 그대로 이어 붙이면, 입력값 안의 *, (, ), &, | 같은 필터 문법 문자가 조건으로 해석된다. 구조는 SQL 인젝션과 같고, 질의 언어가 SQL 이 아니라 LDAP 필터라는 점만 다르다.

# 의도한 필터
(&(uid=사용자입력)(userPassword=비밀번호입력))

# 아이디에 *)(uid=*))(|(uid=* 를 넣으면
(&(uid=*)(uid=*))(|(uid=*)(userPassword=아무값))
  • 앞쪽 조건이 항상 참이 되어 비밀번호를 몰라도 인증이 통과되거나, 검색 결과로 디렉터리 전체 사용자가 노출될 수 있다
  • 와일드카드 * 만 넣어도 다른 사용자의 속성을 한 글자씩 추측해 알아내는 블라인드 공격이 된다
  • LDAP 필터에 들어갈 입력값의 특수문자(* ( ) \ NUL)를 이스케이프한다. DN 에 들어가면 , + " \ < > ; 도 이스케이프한다
  • 허용 문자만 받는 화이트리스트 검증을 한다(아이디는 영문·숫자만 등)
  • LDAP 바인드 계정에 최소 권한만 준다
  • 검색 결과 건수가 1건이 아니면 인증을 실패로 처리한다

소프트웨어 개발보안 가이드에서

편집 원본 편집
  • 구현단계 보안약점 입력데이터 검증 및 표현 유형의 하나로 'LDAP 삽입' 이 있다
  • 설계단계 보안요구항목 중 디렉터리 서비스 조회 및 결과 검증이 이 보안약점을 막기 위한 항목이다 → 소프트웨어 개발 보안