본문 바로가기
----- 이모저모---/웹 보안

웹 어플리케이션 보안에서 3가지 중요사항

by 대소니 2011. 7. 20.

1. White List 정책 사용

모든 것을 막은 상태에서 가능한 리스트만 허용하는 정책입니다.

반대되는 black list 정책인 스펨차단 기능을 살펴보면,
원치 않는 메일을 차단하여 재발생을 막는 방법으로는 효과적이지만,
앞으로 발생 가능한 알수 없는 스펨 메일까지는 대응할 수 없다는 한계가 있습니다.
white list는 앞으로 발생 가능한 원치 않는 메일에 대해서도 적용가능한 보안 강화 정책입니다.
이러한 정책은 Ip, E-mail에 많이 사용되고 있으며, 허용하지 않는 프로그램을 다운로드 받지 않도록 하는데
사용되고 있습니다.

어플리케이션을 개발할 때에도 이러한 개념을 적용해서 입력받는 데이터가 적정한 데이터인지, 
받은 요청이 적절한 요청인지 여부를 확인 검증 로직을 사용하면 소프트웨어적으로 더욱
안전한 시스템을 개발할 수 있을 것으로 생각됩니다.

위키피디아의 white list


2. 입력받은 데이터의 검증

업무 처리를 위해서 사용자로부터 입력 받게 되는 데이터들은
다양한 형태의 인코딩 방식을 통해 입력될 수 있습니다.

흔히 볼수있는 URL 주소는 아스키 문자모음 만을 사용할 수 있는데,
한글과 같은 문자를 표현하기 위해서는 %와 두자리 16진수로 이루어진 아스키 형식으로 변환해서 사용됩니다.
이처럼 같은 의미이지만 다양한 표현방식으로 사용되는 데이터들이 있고,
데이터를 입력하는 사용자는 정상적이지 않은 목적을 위해 입력값을 마음대로 조작할 수 있습니다.
때문에, 너무 넓은 범위의 입력 값을 허용하거나, 사용자가 입력한 데이터에 대한 검증을 하지 않았을 경우,
Sql Injection, XSS와 같은 웹 해킹에 취약하게 됩니다.

Sql Injection는 일반적으로 입력받은 데이터를 데이터베이스 쿼리 사용시 조건값으로 사용하는 것에 초점을 맞춰서
조건값이 참이 되도록 입력데이터를 조작하고, 이로 인한 의도하지 않는 권한을 취득하는 방식입니다.

이런 공격은 문자열을 처리하는 부분보다는,
숫자를 처리하는 부분에서 약 50% 이상이 발생한다고 합니다.
때문에, 숫자를 처리할 때 가급적 문자열처럼 사용하는 것을 권장합니다.

XSS(Cross Site Scripting)은 일력받는 데이터에 원치 않는 동작을 하게 되는 스크립트를 삽입하여 전송하고,
사용자가 이를 클릭하거나 실행 조건이 되는 이벤트를 발생시켰을 때 사용자 브라우저에서 삽입된 스크립트가
실행되어 원치 않는 동작을 수행하게 되는 방식입니다.

이렇게 입력되는 데이터의 문제 외에도, 스크립트를 내장 할 수 있는 flash나 pdf와 같은 파일이 
서버에 업로드 되면, 해당 파일이 실행될 때 내부에 숨겨진 스크립트가 서버상에서 실행되면서 예기치 않은
정보를 누출 시키거나, 악의적인 동작을 하게 됩니다. 
때문에, 이러한 파일들은 가급적 서버에 업로드 되지 않도록 하는 것이 좋습니다.

Sql Injection

base64와 url 인코딩과 디코딩

오픈 소스 도구로 사이트 취약점 테스트하기

OWASP

10대 가장 심각한 웹 어플리케이션 보안 취약점



3. 인증된 요청인지 검증

서버는 적정한 경로와 데이터를 프로토콜을 통해 요청 받으면
어느 업무인지를 파악하고, 필요한 데이터를 추출해 요청받은 업무를 처리하게 됩니다.
처리가 완료되면 결과에 대한 응답을 생성하고 다시 프로토콜을 통해 클라이언트로 보내집니다. 

이러한 과정에서 서버와 클라이언트 사이에 오고 가는 패킷을 캡처하여
요청 패킷 내용을 분석하고, 요청 경로와 데이터를 유사하게 조작해서 서버로 전송한다면,
이 가짜 요청을 받은 서버는 정상적인 요청으로 판단하고 해당 업무를 처리해 응답을 보내주게 됩니다.
이와 같은 취약점을 이용해 요청을 위조하는 CSRF(Cross Site Request Forgery)와 같은 웹 해킹이 발생합니다.

CSRF해킹을 당한 피해자는 자신도 모르는 사이에 개인정보가 수정되거나,원치 않는 글을 쓰게 되거나,
개인 정보가 외부로 전송되는 등의 황당한 결과를 보게 됩니다.

이런 취약점을 보안하기 위해 서버에서는 요청을 받아 처리하기 이전에
이 요청이 어디에서 온 요청인지를 HTTP referer를 통해 확인하고 처리하는 것이 좋습니다.
하지만, HTTP referer는 정상적인 요청이더라도 네트워크 게이트웨이를 통과하면서 사라질 수 있으므로 완벽한 방법은 아닙니다.

또 다른 방법으로 CAPTCHA나 Token이 있습니다.

CAPTCHA란 요청하는 사용자가 사람인지 컴퓨터인지를 판별하기 위한 방법으로
회원가입시 사람만이 알아볼수 있는 판독 불가한 이미지를 보여주고 값을 입력하도록 하여 
자동계정가입을 방지하는 방법으로 많이 사용됩니다.

Token은 서버와 클라이언트만 아는 인증 키 혹은 난수로 생성된 문자열 이나 폼 마다 특별하게 생성된 문자열등을
통해 정상적인 요청인지를 검증하는 방법입니다.
클라이언트에서는 POST방식으로 폼을 전송할때 이러한 토큰을 hidden으로 추가여 서버로 전송하고 검증하거나,
난수로 생성된 문자열을 URL에 삽입하여 접근 자체를 방지하는 방식으로 사용됩니다.


HTTP referrer

CAPTCHA

CAPTCHA 설치하기

(책)웹 해킹 & 보안 완벽 가이드 

댓글2