습관제작소

Web(1-4) 본문

1. 버퍼 오버 플로우 (상)

점검내용

  • 사용자가 입력한 파라미터 값의 문자열 같이 제한 확인

점검 목적

  • 웹 사이트에서 사용자가 입력한파라미터 값의 문자열 길이 제한 여부를 점검하여 비정상적 오류 발생을 차단하기 위함

보안 위협

  • 웹 사이트에서 사용자가 입력한 파라미터 값의 문자열 길이를 제한하지 않는 경우 개발 시에 할당된 저장 공간보다 더 큰 값의 입력이 가능하고 이로 인한 오류 발생 시 의도되지 않는 정보 노출, 프로그램에 대한 비인가 접근 및 사용 등이 발생할 수 있음

판단기준

  • 양호 : 파라미터 값에 다량의 다양한 포맷 문자열 입력 시 에러 페이지나 오류가 발생하지 않는 경우
  • 취약 : 파라미터 값에 대한 검증 미흡으로 에러 페이지나 오류가 발생하는 경우

조치방법

  • 파라미터 갑을 외부에서 입력받아 사용하는 경우 입력값 범위를 제한하며, 허용 범위를 벗어나는 경우 에러 페이지가 반환되지 않도록 조치

보안설정 방법

  • 웹 서버, 웹 애플리케이션 거버 저번을 안정성이 검증된 최신 버전으로 패치
  • 웹 애플리케이션에 전달되는 파라미터 값을 필요한 크기만큼만 받을 수 있도록 변경하고 입력 값 범위를 초과한 경우에도 에러 페이지를 반환하지 않도록 설정
  • 동적 메모리 할당을 위해 크기를 사용하는 경우 그 값이 음수가 아닌지 검사하여 버퍼 오버플로우를 예방하는 형태로 소스코드 변경
  • 버퍼 오버 플로우를 점검하는 웹 스캐닝 툴을 이용하여 주기적으로 점검

2. 포맷 스트링 (상)

점검내용

  • 웹 애플리케이션에 포맷 스트링 취약점 존재 여부 점검

점검목적

  • 공격자의 포맷 스트링 취약점을 통한 악의적인 행위를 차단하기 위함

보안위협

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

참고

※ 포맷 스트링 버그 (format string bug) : printf 등의 함수에서 문자열 입력 포맷을 잘못된 형태로 입력하는 경우 나타나는 취약점으로 루트 구너한을 획득하는 것도 가능함. 포맷 스트링의 종류에는 여러 가지가 있으며 그 중 C언어에서 일반적으로 Data(변수)를 입, 출력문에서 일정한 형태로 받아들이거나 출력하기 위하여 사용하는 기호로는 다음과 같은 것을이 있음

(예) %d, %f, %c, %s, %x, %p ...
%d : 정수형 10진수 상수
%f : 실수형 상수
%lf : 실수형 상수
%c : 문자값
%s : 문자 스트링
%u : 양의 정수(10진수)
%o : 양의 정수(8진수)
%x : 양의 정수(16진수)
%n : 쓰인 총 바이트 수

※ %n 은 이전까지 입력된었던 문자열의 길이(Byte)수 만큼 해당 변수에 저장시키기 때문에 메모리의 내용도 변조 가능하므로 Format String 취약점에서 핵심이기도 함. 문자여의 길이를 변조시키고 싶은 값의 길이만큼 만든 후 %n을 써주게 되면 메모리상에 공격자가 원하는 값을 넣을 수 있게 됨

판단기준

  • 양호 : 포맷 스트링 버그를 방생시키는 문자열 입력 시 검ㅁ증 로직이 존재하여 오류가 발생하는 경우
  • 취약 : 포맷 스트링 버그를 발생시키는 문자열 입력 시 검증 로직이 미흡하여 오류가 발생하는 경우

조치방법

  • 웹 서버 프로그램을 최신 버전으로 업데이트하고 포맷 스트링 버그를 발생시키는 문자열에 대한 검증 로직 구현

보안설정방법

  • 컴파일러에서 문자열 입력 포맷에 대한 자체적인 검사를 내장하고 있으므로 문자열 입력 포맷 검증 후 소스 코드에 적용
  • 웹 서버 프로그램 최신 보안 패치 적용
  • 웹 사이트에서 사용자가 입력한 파라미터 값 처리 중에 발생한 경우 사용자 입력 값의 유효성에 대한 검증 로직을 구현

3. LDAP 인젝션 (상)

점검내용

  • 웹페이지 내 LDAP 인젝션 취약점 점검

점검목적

  • 취약한 시스템에 신회할 수 없는 LDP 코드 공격을 통한 비인가자의 악의적인 행위를 차단하기 위함

보안위협

  • 응용 프로그램이 사용자 입력 값에 대한 적절한 필터링 및 유효성 검증을 하지 않아 공격자는 로컬 프록시를 사용함으로 LDAP 문의 변조가 가능함
  • 공격 성곡 시 승인되지 않은 쿼리에 권한을 부여하고, LDAP 트리 내의 내용 수정이나 임의의 명령 실행을 가능하게 하므로 적절한 필터링 로직을 구현하여야 함

참고

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

판단기준

  • 양호 : 임의의 LDAP 쿼리 입력에 대한 검증이 이루어져 변조된 쿼리가 실행되지 않는 경우
  • 취약 : 임의의 LDAP 쿼리 입력에 대한 검증이 이루어지지 않아 변조된 쿼리가 실행되는 경우

조치방법

  • 지정된 문자열만 입력 허용하고, 임의의 LDAP 쿼리 입력에 대한 검증 로직 구현

보안설정방법

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

4. 운영체제 명령 실행 (상)

점검내용

  • 웹 사이트 내 운영 체제 명령 실행 취약점 존재 여부 점검

점검목적

  • 적절한 검증철차를 거치지 않은 사용자 입력 값에 의해 의도하지 않은 시스템 명령어가 실해되는 것을 방지하기 위함

보안위협

  • 해당 취약점이 존재하는 경우 부적절하게 권한이 변경되거나 시스템 동작 및 운영에 악영향을 줄 가능성이 있으므로 "|", "&", ";", "`" 문자에 대한 필터링 구현이 필요함

판단 기준

  • 양호 : 임의의 명령어 입력에 대한 검증이 이루어지는 경우
  • 취약 : 임의의 명령어 입력에 대해 명령이 실행되는 경우

조치 방법

  • 취약한 버전의 웹 서버 및 웹 애플리케이션 서버는 최신 버전으로 업데이트를 적용해야 하며, 애플리케이션은 운영체제로부터 명령어를 직접적으로 호출하지 않도록 구현하는 게 좋지만, 부득이하게 사용해야 할 경우 소스 코드나 웹 방화벽에서 특수문자, 특수 구문에 대한 검증을 할 수 있도록 조치해야 함

보안설정방법

  • 웹 방화벽에 모든 사용자 입력 값을 대상으로 악용될 수 있는 특수문자, 특수 구문 등을 필터링 할 수 있도록 규칙 적용
  • 애플리케이션은 운영체제로부터 명령어를 직접적으로 호출하지 않도록 구현
  • 명령어를 직접 호출하는 것이 필요한 경우에는 데이터가 OS의 명령어 해석기에 전달되기 전에 입력 값을 검증/확인하도록 구현
  • 입력 값에 대한 파라미터 데이터의 "&", "|", ";", "`" 문자에 대한 필터링 처리
  • 웹 서버 및 웹 애플리케이션 서버는 공개적으로 알려진 취약점이 제거된 상위 버전으로 업데이트해야 함
  • 클라이언트에서 전송되는 요청 값에 대한 엄격한 필터링 적용 및 OGNL (Objet Graph Navigation Language) 표현식 사용을 금지하여 원격에서 임의의 명령어가 실행되지 않도록 구현해야함

'Security > 주요정보통신기반시설 기술적 취약점 분석 평가 방법' 카테고리의 다른 글

Web(9-10)  (0) 2023.09.18
Web(5-8)  (1) 2023.09.18
Comments