[웹 취약점] 1. 버퍼 오버플로우, 2. 포맷 스트링, 3. LDAP 인젝션

1. 버퍼 오버플로우

  • 점검내용: 사용자가 입력한 파라미터 값의 문자열 길이 제한 확인
  • 대상: 웹 애플리케이션 소스코드
  • 조치방법: 파라미터 값을 외부에서 입력받아 사용하는 경우 입력 값 범위를 제한하며, 허용 범위를 벗어나는 경우 에러 페이지가 반환되지 않도록 조치

점검 사항

  • input에 해당하는 곳에 maxlength 지정 여부
  • 정수 입력일 시 정수 허용 범위에 포함되는 값인지 여부

2. 포맷 스트링

  • 점검내용 : 웹 애플리케이션에 포맷 스트링 취약점 존재 여부 점검
  • 대상 : 웹 애플리케이션 소스코드, 웹 기반 C/S 프로그램
  • 조치방법 : 웹 서버 프로그램을 최신 버전으로 업데이트하고 포맷 스트링 버그를 발생시키는 문자열에 대한 검증 로직 구현

참고

  • 포맷 스트링 버그(format string bug): printf 등의 함수에서 문자열 입력 포맷을 잘못된 형태로 입력하는 경우 나타나는 취약점으로 루트 권한을 획득하는 것도 가능함. 포맷 스트링의 종류에는 여러 가지가 있으며 그 중 C언어에서 일반적으로 Data(변수)를 입·출력문에서 일정한 형태로 받아들이거나 출력하기 위하여 사용하는 기호로는 다음과 같은 것들이 있음
    %d : 정수형 10진수 상수
    %f : 실수형 상수
    %lf : 실수형 상수
    %c : 문자값
    %s : 문자 스트링
    %u : 양의 정수(10진수)
    %o : 양의 정수(8진수)
    %x : 양의 정수(16진수)
    %n : 쓰인 총 바이트 수
  • %n 은 이전까지 입력되었던 문자열의 길이(Byte)수 만큼 해당 변수에 저장시키기 때문에 메모리의 내용도 변조 가능하므로 Format String 취약점에서 핵심이기도 함. 문자열의 길이를 변조시키고 싶은 값의 길이만큼 만든 후 %n을 써주게 되면 메모리상에 공격자가 원하는 값을 넣을 수 있게 됨

보안 위협

C언어로 만드는 프로그램 중 변수의 값을 출력하거나 입력받을 때 입력받은 값을 조작하여 프로그램의 메모리 위치를 반환받아 메모리 주소를 변조하여 시스템의 관리자 권한을 획득할 수 있음


3. LDAP 인젝션

  • 점검내용 : 웹페이지 내 LDAP 인젝션 취약점 점검
  • 대상 : 웹 애플리케이션 소스코드, 웹 방화벽
  • 조치방법 : 지정된 문자열만 입력 허용하고, 임의의 LDAP 쿼리 입력에 대한 검증 로직 구현

참고

LDAP 인젝션: 사용자 입력을 기반으로 LDAP(Lightweight Directory Access Protocol)구문을 구축하여 웹 기반 응용 프로그램을 악용하는 데 사용되는 공격

 

보안설정방법

  • 사용자 입력 값을 화이트 리스트로 지정하여 영문(a-z, A-Z)과 숫자(0-9)만을 허용
  • DN과 필터에 사용되는 사용자 입력 값에는 특수문자가 포함되지 않도록 특수문자 제거
  • 특수문자를 사용해야 하는 경우 특수문자(DN에 사용되는 특수문자는 '\', 필터에 사용되는 특수문자는 =, +, <, >, #, ;, \ 등)에 대해서는 실행 명령이 아닌 일반문자로 인식되도록 처리

필터링 대상

점검방법

  1. 사용자 입력 값에 변조된 LDAP 쿼리 삽입 후 실행되는지 확인
    • id = *)(&
    • password = *)(&

 

 

 

참고자료

주요정보통신기반시설_기술적_취약점_분석ㆍ평가_방법_상세가이드

https://lts0606.tistory.com/535

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=trinitysoft2&logNo=221358757998 

https://velog.io/@woounnan/ROOTME-LDAP-Injection

https://aawjej.tistory.com/145

728x90