728x90
반응형
SMALL

이번 장에서는 SW개발보안가이드중 분석/설계단계에서 검증해야할 항목중 <입력 데이터 검증 및 표현>
에 관한 10가지 점검항목에 대해서 설명하고자 한다.
SW보안약점진단원 시험에 제일 많이 나오는 범위이기도 하다.


SR1-1. DBMS조회 및 결과 검증

설명 DBMS조회를 위한 질의문 생성시 사용되는 외부입력값과 조회결과에 대한 검증방법(필터링)
을 설계하고 유효하지 않은 값에 대한 처리방법을 설계해야 한다.
취약점 입력된 데이터에 대한 검증을 하지 않을경우 공격자가 입력 폼 및 URL입력란에 SQL문을 삽입
하여 DB로부터 정보를 열람하거나 조작 할 수 있다
내용 ① DB연결수행 시 최소권한의 계정을 사용해야 한다.
   ▶ 침해사고가 발생하더라도 나머지 부분에 대해서 공격자가 접근권한을 가지지 않도록
       하기 위함 (BlindSQL삽입 방지)
② 외부입력값이 삽입되는 SQL문을 동적으로 생성해서 실행하지 말아야한다.
   ▶ 즉 외부입력값에 의해 쿼리구조가 변경되지 않는 정적쿼리구조로 SQL문을 생성
   예) PreparedStatement 구조
        Ibatis, myBatis : #{변수} 사용 
③ 외부입력값으로 어쩔수 없이 동적으로 SQL문 생성해서 사용시 외부입력값에 대한
   검증을 수행한 뒤 사용해야 한다
   ▶ 외부입력값에 쿼리조작문자열 제거등 (특수문자, 예약어, 함수명 등등) 검증작업 수행
         1) 필터를 이용한 입력값 검증
         2) 인터셉터를 이용한 입력값 검증
         3) Library 또는 Validator 컴포넌트를 이용한 입력값 검증
구현단계  SQL삽입



SR1-2. XML조회 및 결과 검증

설명 XML조회를 위한 질의문(Xpath, Xquery) 생성시 사용되는 외부입력값과 조회결과에 대한
검증방법(필터링등)을 설계하고 유효하지 않은 값에 대한 처리방법을 설계해야 한다.
취약점 XML문서를 조회할 경우 입력값 조작을 통해 Xquery나 Xpath와 같은 쿼리문의 구조를
임의로 변경하여 허가되지 않은 데이터를 조회하거나 인증절차를 우회할 수 있다
내용 ① XML쿼리에 사용되는 외부입력값은 쿼리를 조작할수 없도록 필터링해서 사용하거나
② 외부입력값이 쿼리문을 조작할 수 없는 파라미터화된 쿼리문을 제공하는  API(예 Xquery) 
    를 사용한다
구현단계 XQuery 삽입
XQuery 삽입



SR1-3. 디렉터리 서비스 조회 및 결과검증

설명 디렉터리 서비스 조회(예 LDAP) 시 사용되는 입력값과 조회결과에 대한 검증방법(필터링등)
을 설계하고 유효하지 않은 값에 대한 처리방법을 설계해야 한다
취약점 디렉터리 서비스 조회(예 LDAP) 시 사용되는 입력값과 조회결과에 대한 검증방법(필터링등)
을 설계하고 유효하지 않은 값에 대한 처리방법을 설계해야 한다
내용 ① LDAP인증서버를 통해 인증을 구현하는 경우 인증요청을 위해 사용되는 외부입력값은
    LDAP삽입 취약점을 가지지 않도록 필터링 해야한다.
    ▶LDAP인증이 포함되는 기능 설계시, 외부입력값이 LDAP조회를 위한 검색필터생성에
      삽입되어 사용되는 경우 , 특수문자등을 제거하는 등 필터링을 한후 사용될 수 있도록
      시큐어코딩규칙을 정의해야한다
       : LDAP검색필터 - ( ) 안에 있는 검색조건을 말한다.
구현단계 LDAP 삽입



SR1-4. 시스템 자원 접근 및 명령어 수행 입력값 검증

설명 시스템 자원 접근 및 명령어 수행을 위해 사용되는 외부입력값에 대한 유효성검증 방법과
유효하지 않은 값에 대한 처리방법을 설계해야 한다.
취약점 경로조작 및 자원삽입 경로조작및 자원삽입을 통해 공격자가 
허용되지 않은 권한을 획득하여 파일을 
변경하거나 실행할수 있다 
(예) 웹셀 (webshell)
운영체제 명령어 삽입 파라미터를 Filename & ping 192.168.0.1
와 같이 조작해서 전달 -> cmd.exe /c type filename & ping 192.168.0.1 이 실행됨.
내용 <경로조작 및 자원삽입 >
① 외부입력값을 검증,제한없이 이용하여 시스템자원(IP, PORT번호, 프로세스,메모리,파일등) 
   을 식별하는 경우 허가되지 않은 자원이 사용되지 않도록 한다
   ▶ 외부입력값이 프로그램 내부에서 사용하는 리소스를 결정하는데 직접적으로 사용되지 
       않도록 설계한다.  즉 기능설계시 사용해야 하는 리소스목록(White List) 을 정의하여
       지정된 범위 안에서 리소스를 선택하여 사용하도록 해야한다..
   ▶ 사용자의 요청리소스가 특정 디렉토리내의 모든 파일인 경우에는 모든 파일명을 
       목록화하는 것은 어렵다.  이런 경우에는 입력값중 경로조작을 일을킬 수 있는 
       문자(.. / \)를 제거하고 지정된 경로내의 파일만 접근가능하도록 시큐어코딩을 한다. 
   ▶ 시스템자원 접근이력을 로그로 남긴다.
<운영체제 명령어 삽입>
② 서버프로그램 안에서 쉘을 생성하여 명령어를 실행해야하는 경우 외부입력값에 의해 
    악의적인 명령어가 실행되지 않도록 한다.
   ▶ 우선 쉘을 이용해서 명령어가 실행되지 않는 구조를 만들어야 한다.
       그러나 필요한 경우 사용가능한 명령어목록(WhiteList) 을 만들어 이 목록내에 있는  
       명령어만 사용할수 있도록 한다. 
   ▶ 운영체제 명령어 실행이력을 로그로 남긴다.
구현단계 경로조작 및 자원삽입
경로조작 및 자원삽입



SR1-5. 웹서비스 요청 및 결과 검증

  설명 대응방안
1) Reflective XSS 사용자로부터 입력받은 값을 동적으로 생성되는 응답
페이지에 바로 사용하는 경우에 입력값에 악의적인 
스크립트를 포함시켜 실행되게 함으로써 접속자의 
정보유출을 유발할수 있음
XSS필터링
2) Stored XSS 악의적인 스크립트가 저장된 DB조회결과를 동적으로 
응답페이지에 사용하는 경우 스크립트가 수행되어 정보
유출의 공격 유발
HTML인코딩
XSS필터링
대응 Reflective XSS
① 사용자로부터 입력받은 값을 동적으로 생성되는 응답페이지에 
    바로 사용하는 경우 크로스사이트스크립트(XSS)필터링을 수행한 뒤 사용해야 한다.
Stored XSS
① DB조회결과를 동적으로 생성되는 응답페이지에 사용하는 경우 HTML인코딩
  , XSS필터링을 수행한 뒤 사용



SR1-6.  웹기반 중요기능 수행 요청 유효성 검증

CSRF 공격자는 세션탈취, XSS 등을 통해 자신이 의도한 행위 (수정,삭제,등록 등)를 사이트가 
신뢰하는 인증된 사용자의 권한을 통해 실행되게 할 수 있다.
대응 서버로 요청되는 중요기능 요청에 대해서 유효한 요청인지를 검증
  POST방식 
  ② CSFR토큰사용 
  ③ 추가인증 요구 
  ④ 사용자와 상호처리기능(CAPTCHA)



SR1-7. HTTP 프로토콜 유효성 검증

  설명 대응방안
1) HTTP 응답분할 HTTP요청시 쿠키및 헤더정보에 삽입한 외부입력
값이 HTTP응답헤더에 포함되어 사용자에게 다시
전달될 때 개행문자을 이용하여 첫번째 응답을 
종료시키고 두번째 응답에 악의적인 스크립트를 
주입해서 XSS공격을 유발
(setHeader, addCookies…등으로 입력한 값은 
나중에 응답페이지의 헤더에 포함되어 리턴된다)
쿠키나 헤더에 삽입되는
외부입력값은 개행문자
제거필터링 적용
2) 신뢰하지 않은 URL주소로 
    자동접속 연결
외부입력값을 페이지이동(Redirect, Forward)의 
URL주소로 이용하는 경우 외부입력값 조작을 
통해 피싱사이트로 유도할 수있다.
이동이 허용된 WhiteList 
주소 목록을 정의 한후 
이 List와 비교검증
<쿠키보안>
중요정보는 저장안함
 암호화
유효기간(MaxAge, Expired)
secure속성 활성화 (setSecure(true);)
HttpOnly속성 활성화 (SetHttpOnly(True);)
 



SR1-8. 허용된 범위내 메모리 접근

  설명 대응방안
1)메모리 버퍼 오버플로우 Stack이나 Heap에 할당되는 메모리에 문자열등이
저장될 때 최초 정의된 메모리의 크기를 초과하여
문자열을 저장하는 경우 버퍼 오버플로우 발생
 -> Return주소를 조작하여 임의코드를 실행
(경취A)
메모리사용시 경계값검사 
   코딩규칙
취약한 API나 함수 
   사용안도록
 ASLR (리눅스)
  , StackGuard
2)포맷스트링 삽입 외부입력값에 포맷문자열을 삽입하여 공격 외부입력값을 포맷문자열로
바로 사용하지 않는다.



SR1-9.  보안기능동작에 사용되는 입력값 검증

  설명 대응방안
1) 보안기능결정에 사용되는
   부적절한 입력값
사용자가 전달하는 쿠키,환경변수,히든필드값들을
가지고 어떤 보안기능 결정에 사용하는 경우
공격자는 이 값들을 조작하여 상승된 권한을
획득하거나 파라미터를 조작해서 결재금액
변경가능
 ▶ 대응 : 
    ① 사용자의 역할,권한을 결정하는 정보는 
        서버에서 관리한다.
           - 인증,인가,권한에 관련된 중요정보는
             서버측 세션이나 DB에 저장해서 사용하
             도록 설계한다.
    ② 쿠키,환경변수,히든필드값 등 외부입력값이
        보안기능을 수행하는 함수의 인자로 사용되
        는 경우, 입력값에 대한 검증작업을 수행한
        뒤 제한적으로 사용해야 한다. 
    ③ 인증,권한 결정에 사용되는 정보는 쿠키로
        전송되지 않아야 하며불가피하게 전송해야
        하는 경우 암호화해서 전송한다.
보안기능을 수행하는
함수설계시 외부입력값에
의존하지 않게 설계하거나, 필요한 경우에는 검증
을 통해 제한적으로 사용
해야함.
2) 정수형 오버플로우 정수형 변수에 허용된 값보다 큰 값의 입력을 허용
하면 음수가 될수 있어 반복문제어, 메모리할당등에
문제를 유발
정수 최대값 체크
3) Null Pointer 역참조 NULL로 설정된 참조변수에 대해 공격자가 의도
적으로 NULL포인터 역참조를 발생시키는 경우,
그 결과 발생하는 예외 상황을 이용하여 추후
공격에 이용가능
NULL 체크



SR1-10 업로드.다운로드 파일 검증

  설명 대응방안
1)위험한 형식 파일 업로드 서버에서 실행될 수 있는 스크립트파일(asp,jsp,,php등) 이 업로드
가능하고 공격자는 이 파일을 웹을 통해 직접 실행시킬수 있어서
시스테을 제어할 수 있게 된다.
-파일크기, 갯수제한
-파일종류제한
-업로드한 파일은 외부접근불가한
 곳에 저장
-저장경로를 외부에서 알수없게
-업로드한 파일의 실행권한 제거
2)경로조작을 이용한 파일 다운로드 외부입력값에 경로조작을 통해 다른 경로의 파일을 다운받을 수
있는 취약점 유발
요청파일명에 경로문자 필터링
WhiteList 형태로 파일 제공
3)무결성 검사없는 코드 다운로드 외부입력값에 경로조작을 통해 다른 경로의 파일을 다운받을 수
있는 취약점 유발
무결성검사 수행

 

728x90
반응형
LIST

+ Recent posts