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
'정보보안' 카테고리의 다른 글
SW 개발보안 가이드 : 분석/설계단계 - 에러처리 와 세션통제 (0) | 2019.11.21 |
---|---|
SW보안약점진단원 : 분석/설계단계 - 보안기능 (0) | 2019.11.20 |
SW보안약점진단원 - 분석/설계 단계 (0) | 2019.11.18 |
소프트웨어 개발 보안 (0) | 2019.11.17 |
해시값(Hash Value)과 해시함수(Hash Function) (0) | 2019.11.09 |