안녕하세요? 허니입니다. 불안전한 직접 객체 참조 취약점에 대해서 알아보고 대응 방법에 대해 알아보도록 하겠습니다. 사이버 해킹에 대해 공부하시는 학생이나 연구원 분이 계시면 도움이 될 것이라 생각합니다.
일반적으로 웹 애플리케이션은 HTTP 요청(또는 파일) 값을 통해 다음 동작을 결정하게 되는데 공격자는 URL, 쿼리 문자열, HTTP 헤더, 쿠키, HTML 폼 인자, HTML hidden 필드 등 모든 HTTP 요청을 조작할 수 있으며, 이를 통해 사이트의 보안 메커니즘을 우회하고자 시도할 수 있습니다. 흔히 발생하는 입력 값 변조 공격은 URL 강제 접속, 명령어 삽입, 크로스 사이트 스크립팅, 버퍼오버플로우, 포맷스트링 공격, SQL 구문 삽입, 쿠키 조작, hidden필드 조작 등으로 사용됩니다.
일반적인 대응방법
파라미터 변조를 방지할 수 있는 가장 좋은 방법은 모든 파라미터에 대해 사용 전에 입력 값 검증을 수행하는 것이다. 모든 입력 값에 대해 중앙에서 집중적으로 처리하는 하나의 컴포넌트나 라이브러리를 사용하는 것이 가장 효과적입니다. 입력되는 모든 파라미터는 허용된 입력 값의 유형과 정확히 일치하는지에 대해 점검하여야 합니다. 특정한 악의적 파라미터나 공격 패턴(signature)만을 필터링 처리하는 방식은 효율적이지도 않고, 향후의 유지보수 작업을 어렵게 만듭니다. 다음과 같이 스팩 상에 허용된 값만을 받아들이는 "허용(Positive) 방식"을 사용하여 파라미터를 검증하여야 합니다.
데이터 유형 (문자열, 정수형, 실수형 등) |
허용된 문자셋 (character set) |
최대 / 최소 길이 |
Null 값의 허용 여부 |
반드시 필요한 파라미터와 그렇지 않은 파라미터 |
중복 허용 여부 |
숫자의 범위 |
타당한 것으로 지정된 값 (열거형 - enumeration 사용) |
타당한 것으로 지정된 패턴 (정규식 사용) |
웹 애플리케이션 방화벽과 같은 새로운 종류의 보안 장비는 어느 정도 입력 값 검증 기능을 제공할 수 있습니다. 그러나 이런 장비를 효율적으로 사용하기 위해서는 사이트에서 사용되는 모든 파라미터들에 대해 어떤 값이 타당한 것인지 엄격하게 정의해 놓아야 합니다. 이는 곧 URL, 폼 데이터, 쿠키, 쿼리 문자열, HTML hidden 필드 등 모든 유형의 입력 값에 대해 적절히 보안하는 것을 뜻합니다.
개발 언어별 대응방법
- 보안코딩(ASP)
<%
' ... 중략 ...
|
- 보안코딩(PHP)
<?PHP
if(!file_exists($language."/head.html")) // 파일이 존재하는지 체크
@require_once $language . "/head.html";// 각 국가 언어별 HTML 출력 $conn = @mysql_connect($SERVER, $USER, $PASSWD);
// ... 중략 ...
|
- 보안코딩(JSP)
<%@ page contentType="text/html;charset=euc-kr" %>
// HTTP HEADER 중 USER_AGENT를 변경 하여 크로스사이트 스크립트 공격하는 것을 차단
out.print("지금 사용하고 계신 ");
%> |
'Past Material' 카테고리의 다른 글
중요 정보 파일 다운로드 취약점 그리고 대응방법은? (0) | 2017.07.23 |
---|---|
악성 파일 업로드 및 원격 실행 취약점 그리고 대응방법은? (0) | 2017.07.21 |
Hidden Field 조작 취약점 그리고 대응방법은? (0) | 2017.07.19 |
XSS/CSRF 취약점 그리고 대응방법은? (0) | 2017.07.18 |
'욕'이 가지는 매우 긍정적인 역할 3가지 (0) | 2017.07.17 |