지식iN 서비스 이후 대한민국 인터넷은 네이버 제국이 되버렸다. 수년전 전지현을 앞세워 '진작좀 잘하지 그랬어..'라는 노골적인 메시지로 카페 서비스를 활성화 한 이후로 그 독점은 더욱 강력해졌다. 다음과의 양대산맥이란 말은 어느세 '상대가 없으니 다음이라도..'라는 식으로 비춰지기 시작했고, 블로그 서비스도 네이버에게 뒤저버린 지금은 '모든길은 네이버로 통한다'는 얘기가 되버렸다.
물론 나도 네이버를 쓴다. 카페, 블로그,메일 등등의 서비스 외에도 다양한 컨텐츠를 소비한다. 그러다 얼마전부터 생각했다. '내가 사용하는 네이버가 그렇게 강력한 점은 무엇이지?' 결론부터 말하자면 없다. 메일 서비스는 애초부터 타 서비스와 다를 바 없었고, 대용량 서비스는 애초에 다른 곳보다 늦었다. 블로그는 항상 느끼는거지만 왜이렇게 느린지 모르겠다. 카페는 일부를 제외하곤 아직 daum이 더 큰다.(물론 이것은 필자 개인의 생각이다.) 그렇게 보면 '그냥 남들이 많이 쓰니까..' 내 시작 홈페이지도 네이버가 되었고, 시작 페이지가 네이버니 모든 서비스도 네이버에 촛점을 맞추게 되었다.
지금 내가 다니고 있는 회사의 이메일은 별도의 메일서버를 사용하지 않고 gmail을 이용한다. 개인 gmail이 아니라 google 파트너페이지를 이용한다. 덕분에 좋은점은 기본적으로 '웹메일'이므로 어디서든 접근이 가능하다는 것과, 빠른 발송 대용량 메일 및 google 토크, google 캘린터 이다. 물론, 유료로 사용하는 서비스는 이것들이 기본으로 제공 된다. 하지만 쓸데없이 액티브x를 떡칠하거나 신경도 쓰지 않는 화면을 치장하며 느린 것 보다 훨씬 간편하고 단순해서 끌린다. (이게 구글의 최대 강점인지도 모른다.)
그래서 오늘은 생각했다. 네이버에서 벗어날 수 있는 대안은 무엇인가?
더보려면 클릭!!
먼저 제일 많이 사용하는 email서비스. email서비스는 google이면 충분하다. 먼저 google를 살펴보면 기본에
충실하다. 이메일 서비스를 이용할때 무엇을 자주 이용하는가 ? 메일이 오면 확인하고, 답신을 보내는 기능이면 충분하다. 특히
컴퓨터를 하루종일 하고있는 사무직 직원들에겐 단순히 '구글 메일에 접속한 브라우저를 띄어두기만' 하면 충분 하다.
구글 메일은 기본적으로 ajax를 사용하므로 일정 시간뒤에 메일 정보를 다시 읽어온다. 신규 메일이 있다면, 타이틀바에 (1)가 추가되므로, 이를 통해 확인 할 수도 있다.
메일 보내기를 할때 실수로 뒤로가기 버튼이나 링크를 눌러 페이지가 이동되어도 걱정 없다. 일정 시간동안 임시 보관함에 저장되기 때문이다.
또 친구 등록을 통해 상대방이 구글 메일에 접속 했다면 실시간 채팅이 가능 하다. 채팅 역시 메일처럼 확인 할 수 있도록 되어있다. 일부 회사에서 막아둔 메신저를 피할 수 있는 방법이기도 하다.
마지막으로 필자가 가장 좋아하는 부분은 이부분이다. 필자가 상대방에게 이메일을 보냈다. 상대방은 다시 필자에게 답장을 보냈다. 다시 필자는 상대방에게 답장을 보냈다.
지
금 글을 작성하는 지금 네이버 메일의 경우 각각 개별적인 이메일로 취급된다. 하지만 구글 메일은 답장으로 온 메일은 하나의
묶으로 다음과 같이 처리된다. 답장을 보내는 것일 경우 보통 하나의 주제를 통해 보내게 되는 것이다. 이것이 길어지게 되고,
수십통의 답장(물론 이런경우는 흔치 않지만..)을 보내고 받았다면 이것으로만 해도 한 페이지가 되어버릴 것 이다. 하지만
구글메일은 이것을 묶음(탭이 더 가까울지도 ..?)으로 관리하므로 이전의 내용을 확인하기도 쉽고, 관리하기도 쉽다.
Non-authoritative Information, 서버가 클라이언트 요구 중 일부만 전송.
204
Non Content, 클라이언트 요구를 처리했으나 전송할 데이터가 없음.
205
Reset Content
206
Partial Content
300
Multiple Choices, 최근에 옮겨진 데이터를 요청.
301
Moved Permanently, 요구한 데이터를 변경된 임시 URL에서 찾음.
302
Moved Permanently, 요구한 데이터가 변경된 URL에 있음을 명시.
303
See Other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음.
304
Not modified
305
Use Proxy
400
Bad Request(요청 실패). 문법상 오류가 있어서 서버가 요청사항을 이해하지 못함.
401.1
Unauthorized(권한 없음). - 접속 실패. 이 에러는 서버에 로그온하려는 요청 사항이
서버에 들어 있는 권한과 비교했을 시 맞지 않을 경우 발생. 이 경우, 요청한 자원에 접근할 수 있는 권한을 부여받기 위해서
서버 운영자에게 요청해야 함.
401.2
Unauthorized(권한 없음). - 서버 설정으로 인한 접속 실패. 이 어레는 서버에
로그온하려는 요청사항이 서버에 들어 있는 권한과 비쇼했을 때 맞지 않을 경우 발생. 이것은 일반적으로 적절한
www-authenticate head field를 전송하지 않아서 발생.
401.3
Unauthorized(권한 없음). - 자원에 대한 ACL에 기인한 권한 없음. 이 에러는
클라이언트가 특정 자원에 접근할 수 없을 때 발생. 이 자원은 페이지가 될 수도 있고, 클라이언트의 주소 입력란에 명기된 파일일
수도 있고 클라이언트가 해당 주소로 접속할 때 이용되는 또 다른 파일일 수도 있다. 접근할 전체 주소를 다시 확인해 보고 웹
서버 운영자에게 여러분이 자원에 접근할 권한이 있는지를 확인.
401.4
Unauthorized(권한 없음). - 필터에 의한 권한 부여 실패. 이 에러는 웹 서버가 서버에
접속하는 사용자들을 확인하기 위해 설치한 필터 프로그램이 있음을 의미. 서버에 접속하는 데 이용되는 인증 과정이 필터 프로그램에
의해 거부된 것임.
401.5
Unauthorized(권한 없음). - ISA PI/CGI 어플리케이션에 의한 권한 부여 실패.
이 에러는 이용하려는 웹 서버의 어드레스에 ISA PI나 CGI 프로그램이 설치되어 있어 사용자의 권한을 검증. 서버에 접속하는
데 이용되는 인증 과정이 이 프로그램에 의해 거부됨.
402
Payment Required, 예약됨.
403.1
Forbidden(금지). - 수행 접금 금지. 이 에러는 CGI나 ISA-PI, 혹은 수행시키지 못하도록 되어 있는 디렉터리 내의 실행 파일을 수행시키려고 했을 때 발생.
403.2
Forbidden(금지). - 읽기 접근 금지. 이 에러는 브라우저가 접근한 디렉터리에 가용한 디폴트 페이지가 없을 경우에 발생.
403.4
Forbidden(금지). - SSL 필요. 이 에러는 접근하려는 페이지가 SSL로 보안, 유지되고 있는 것일 때 발생.
403.5
Forbidden(금지). - SSL 128필요. 이 에러는 접근하려는 페이지가 SSL로 보안, 유지되고 있는 것일 때 발생. 브라우저가 128비트의 SSL을 지원하는지를 확인.
403.6
Forbidden(금지). - IP 주소 거부됨. 이 에러는 서버가 사이트에 접근이 허용되지 않은 IP 주소로 사용자가 접근하려 했을 때 발생.
403.7
Forbidden(금지). - 클라이언트 확인 필요. 이 에러는 접근하려는 자원이 서버가 인식하기 위해서 브라우저에게 클라이언트 SSL을 요청하는 경우 발생. 자원을 이용할 수 있는 사용자임을 입증하는데 사용.
403.8
Forbidden(금지). - 사이트 접근 거부. 이 에러는 웹 서버가 요청사항을 수행하고 있지 않았거나 해당 사이트에 접근하는 것을 허락하지 않았을 경우에 발생.
403.9
Forbidden(금지). - 연결된 사용자 수 과다. 이 에러는 웹 서버가 busy한 상태에 있어서 요청을 수행할 수 없을 경우에 발생.
403.10
Forbidden(금지). - 설정이 확실하지 않음. 이 에러는 웹 서버의 설정 부분에 문제가 있을 경우 발생.
403.11
Forbidden(금지). - 패스워드 변경. 이 에러는 사용자 인증 단계에서 잘못된 패스워드를 입력했을 경우 발생.
403.12
Forbidden(금지). - Mapper 접근 금지. 이 에러는 클라이언트 인증용 map이 해당 웹사이트에 접근하는 것을 거부할 경우에 발생.
404
Not Found, 문서를 찾을 수 없음. 이 에러는 클라이언트가 요청한 문서를 찾지 못한 경우에 발생. URL을 다시 잘 보고 주소가 올바로 입력되었는지를 확인.
405
Mothod not allowed(메소드가 허용 안 됨). 이 에러는 Request 라인에 명시된 메소드를 수행하기 위해 해당 자원의 이용이 허용되지 않았을 경우에 발생.
406
Not Acceptable(받아들일 수 없음). 이 에러는 요청 사항에 필요한 자원은 요청 사항으로 전달된 Accept header에 따라 "Not Acceptable" 내용을 가진 사항이 있을 경우에 발생.
407
Proxy Authemtication Required(Poxy 인증이 필요함). 이 에러는 해당 요청이 수행되도록 프록시 서버에게 인증을 받아야 할 경우에 발생.
408
Request timeout(요청시간이 지남).
409
Conflict
410
Cone(영구적으로 사용할 수 없음).
411
Length Required
412
Precondition Failed(선결 조건 실패). 이 에러는 Request-header field에 하나 이상에 선결 조건에 대한 값이 서버에서의 테스트 결과 false로 나왔을 경우에 발생.
413
Request entity too large
414
Request-URI too long(요청한 URI가 너무 김). 이 에러는 요청한 URI의 길이가 너무 길어서 서버가 요청 사항의 이행을 거부했을 경우 발생.
415
Unsupported media type
500
Internal Server Error(서버 내부 오류). 이 에러는 웹 서버가 요청사항을 수행할 수 없을 경우에 발생.
501
Not Implemented(적용 안 됨). 이 에러는 웹 서버가 요청사항을 수행하는 데 필요한 기능을 지원하지 않는 경우에 발생.
502
Bad gateway(게이트웨이 상태 나쁨). 이 에러는 게이트웨이 상태가 나쁘거나 서버가 과부하 상태일 때 발생한다.
503
Service Unavailable(서비스 불가능). 이 에러는 서비스가 현재 멈춘 상태 또는 현재 일시적인 과부하 또는 관리 상황일 때 발생될 수 있다.
취약한 환경 설정과 부주의, 취약한 소프트웨어로 인하여 WWW 연결을 통해 보안상 심각한 문제가 유발될 수 있다. WWW 서비스는 공개적으로 서비스를 제공하는 형태로 설계되었으며, 일반적으로 주요한 내부 자원을 외부에 제공하는 기능을 하도록 설계되었다. 따라서 이전의 외부로부터의 접근 통제가 가능하였던 보안솔루션에 의해 공격자를 막는 것은 사실상 불가능 하다.
OWASP(Open Web Application Security Project) 10 대 취약점을 요약하면 다음과 같다.
1. 검증되지않은파라미터의허용(Unvalidated Parameters)
웹 요청 정보가 웹 애플리케이션에 의해 처리되기 이전에 그 요청이 적절한 값인지 여부를 검증하지 않음으로 인해 허가되지 않은 자원에 접근할 수 있는 취약성이다.
url, 쿼리 문, HTTP 헤더, 폼 필드, 쿠키, 그리고 숨겨진 필드 등의 웹 요청(HTTP request)들을 강제로 브라우징 한다거나 명령어 삽입, SQL 문 삽입, 쿠키 위/변조 등을 통해서 보안메커니즘을 우회할 수 있게 된다.
[대처 방안]
다음과 같이 스펙 상에 허용된 값만을 받아들이는 “허용(Positive) 방식”을 사용하여 인자를 검증하여야 한다.
n데이터 유형 (문자열, 정수형, 실수형 등)
n허용된 문자셋 (character set)
n최대 / 최소 길이
nNull 값의 허용 여부
n반드시 필요한 인자와 그렇지 않은 인자
n중복 허용 여부
n숫자의 범위
n타당한 것으로 지정된 값 (열거형 - enumeration 사용)
n타당한 것으로 지정된 패턴 (정규식 사용)
2. 부적절한접근통제(Broken Access Control)
인증되지 않은 사용자가 시스템에 접근하여 중요한 파일 읽거나 권한 없는 기능들을 수행할 수 있는 취약성이다. 예를 들자면 허가되지 않은 사용자가 웹 요청을 통해서 유닉스 시스템의 /etc/passwd 파일을 읽거나 윈도우 시스템의 웹 루트 디렉터리를 읽을 수 있는 등의 경로 유출(Path Traversal)을 허용하는 것이다. 이러한 취약성은 웹 컨텐츠와 기능에 적절한 접근 통제를 하지 못하는 것이 원인이다.
[대처 방안]
다음과 같은 접근 통제를 점검한다.
n취약한 ID – 대부분의 웹 사이트는 일정한 형태의 아이디, 키, 인덱스를 사용하여 각 사용자와 역할, 컨텐츠, 접근 대상, 기능들을 구분한다. 공격자가 이런 값들을 유추할 수 있고, 입력받은 값들이 현재 사용자에게 허용된 적절한 값인지를 검증하지 않는다면, 공격자는 무엇에 접근할 수 있는지를 파악하기 위해 접근 통제 메커니즘을 이리저리 조사해볼 것이다. 웹 애플리케이션의 보호를 위해 특정한 아이디 값이 가진 비밀에 의존해서는 안된다.
n접근 통제 점검을 우회하기 위한 강제 접근(forced browsing) – 많은 사이트들은 사용자가 내부 ‘깊숙이’ 숨어있는 특정한 URL에 접속하는 것을 허용하기 이전에, 특정한 검사를 통과하도록 요구한다. 이런 검사는 단순히 보안 검사를 수행하는 페이지를 우회하는 것만으로 통과 가능해서는 안된다.
n경로 이동(path traversal) – 이런 종류의 공격은 정보를 요청하는 일부분에서 상대 경로(예를 들면 “../../target_dir/target_file”)를 사용하는 것과 관련이 있다. 이런 공격은 정상적인 방법으로는 직접적으로 접근 불가능하거나, 직접적으로 접근하는 경우 서버 측에서 거부하는 파일들에 접근하려고 시도할 때 사용한다. 이런 공격은 URL 이나 궁극적으로는 파일에 액세스하는데 사용되는 값(즉 시스템 콜이나 쉘 명령어)을 서버 측에 요청할 때 사용할 수 있다.
n파일 허가권 – 많은 웹 서버와 웹 애플리케이션 서버는 OS의 파일 시스템에 의해 제공되는 접근 통제 항목에 의존하고 있다. 비록 거의 모든 데이터가 백엔드 서버에 저장되어 있다 하더라도, 웹 서버나 웹 애플리케이션 서버에 로컬로 저장되어 외부에서 접근할 수 없는 파일들은 항상 있게 마련이다. 이런 파일들에는 특정한 환경 설정 파일, 디폴트 예제 파일, 상당수의 웹 서버나 웹 애플리케이션 서버에 설치되는 예제 스크립트들이 있다. 웹 사용자들에 의해 접근 가능한 파일들만이 OS의 허가권 메커니즘을 사용해 명시적으로 읽기 가능하도록 설정되어야 하며, 대부분의 디렉터리에 대해선 읽기 권한을 제거해야 한다. 필요한 경우 극소수의 파일들에 대해서만 실행 권한을 주어야 한다.
n클라이언트 측 캐쉬 – 많은 사용자들이 도서관, 학교, 공항, 혹은 다른 공공 장소에 설치된 공용 컴퓨터에서 웹 애플리케이션에 접속한다. 브라우저는 종종 웹 페이지를 캐쉬하는데, 이 캐쉬된 정보는 공격자가 이외의 다른 방법으로는 접근할 수 없는 사이트에 접속하기 위해 필요로 하는 정보이다. 개발자는 HTTP 헤더, 메타 태그 등 다양한 메커니즘을 사용하여 민감한 정보가 담겨있는 페이지가 사용자의 브라우저에 캐쉬되지 않도록 보장해야 한다.
3. 부적절한계정과세션관리(Broken Account and Session anagement)
계정에 대한 증명(Account Credential)과 세션 토큰이 적절히 보호되지 못함으로 인해 패스워드나 키, 세션 쿠키, 그리고 다른 토큰 등을 악용하여 인증 메커니즘을 무력화 시키거나 다른 사용자의 아이디를 추측할 수 있는 취약성이다. 예를 들자면 사용자의 패스워드 변경, 패스워드 분실, 사용자 정보 수정 등을 포함하는 증명서와 동적 세션 관리가 적절히 개발되지 않아서 다른 사용자에 의해 추측되거나 가로채기를 당하는 것이다.
[대처 방안]
다음과 같은 항목들에 대해 보안 정책을 강화한다.
n강력한 패스워드 – 패스워드는 최소 길이와 복잡도에 제한을 두어야 한다. 일반적으로 복잡한 패스워드라 함은 최소한 알파벳, 숫자, 특수 문자(최소 한 개 이상)를 조합하는 것을 요구한다. 사용자는 주기적으로 패스워드를 변경하여야만 하며, 이전에 사용하던 패스워드를 재사용하지 못하도록 해야 한다.
n패스워드 사용 – 사용자는 일정 시간 이내에 일정 횟수 이상의 로그인 시도를 할 수 없으며, 로그인 시도가 지속적으로 실패하는 경우 이를 로그에 기록하여야 한다. 로그인 실패 시 사용자가 입력한 패스워드는 서버 측에 기록하지 말아야 한다. 이런 정보는 서버의 로그 파일에 접근할 수 있는 누군가가 다른 사용자의 패스워드를 파악하는데 사용될 수 있기 때문이다. 해당 시스템은 로그인 시도 실패 시 틀린 부분이 사용자명인지 패스워드인지를 명시하지 말아야 한다. 사용자는 이전 로그인의 성공 날짜와 시간, 그 이후로 몇 번이나 접속 시도가 실패했는지에 대한 정보를 받아볼 수 있어야 한다.
n패스워드 변경 통제 – 사용자의 패스워드 변경이 허용된다면, 패스워드 변경 메커니즘은 어떤 상황에서도 단 하나만을 사용하여야 한다. 사용자가 패스워드를 변경할 때는 다른 계정 정보를 변경할 때와 마찬가지로 항상 이전 패스워드와 신규 패스워드를 물어보아야 한다. 해당 시스템 상에서 분실된 패스워드를 사용자에게 전자 메일로 발송한다면, 사용자가 전자 메일 주소를 바꾸려고 할 때도 항상 이런 인증 절차를 거치도록 해야 한다. 그렇지 않은 경우 공격자가 일시적으로 다른 사용자의 세션을 이용해 접속하여(예를 들면, 다른 사용자가 로그인해 있는 상태로 자리를 잠시 비운 사이 컴퓨터 앞으로 걸어가서) 해당 전자 메일 주소를 변경하고, ‘분실한’ 패스워드를 메일로 보내달라고 요청하는 상황이 벌어질 수 있다.
n패스워드 저장 – 모든 패스워드는 유출 사고로부터 보호하기 위해, 어디에 저장되는지에 상관없이 해쉬된 형태나 암호화된 형태로 저장되어야만 한다. 보통 해쉬 방식을 선호하는데 이 정보는 복호화할 수 없기 때문이다. 평문 패스워드를 사용하면서 이 패스워드를 전달하여 다른 시스템에 로그인 하는 경우에는 반드시 암호화를 사용하여야만 한다. 패스워드는 소스 코드 내부에 하드 코딩하는 일이 없어야 한다. 복호화에 사용되는 키는 해당 키를 습득하여 패스워드 파일을 복호화 하는데 사용할 수 없도록 강력하게 보호되어야만 한다.
n전송 중의 자격 증명 보호 – 가장 효과적인 방법은 SSL과 같은 기술을 사용하여 로그인 트랜잭션 전체를 암호화하는 방법이다. 서버로 전송하기 이전에 클라이언트 단에서 패스워드를 해쉬하는 형태로 변경하는 단순한 방법으로는, 다른 공격자가 실제 패스워드를 모르는 상태에서 해쉬된 정보를 가로채어 서버로 그대로 전송하는 일이 발생하는 경우 별다른 보안을 제공하지 못한다.
n세션 ID 보안 – 사용자의 전체 세션은 이상적으로는 SSL을 이용하여 보호되어야만 한다. 이런 경우에는, 세션 ID 유출을 불러오는 가장 심각한 위험인 세션 ID(예를 들면 세션 쿠키)를 네트워크 상에서 도청하는 방법이 별 소용이 없다. 그러나 속도 문제 혹은 다른 이유로 인해 SSL을 사용할 수 없는 경우라면, 다른 방법을 사용하여 세션 ID를 보호하여야만 한다. 첫째로 세션 ID를 URL에 포함하지 않아야 한다. 이렇게 하는 경우 해당 정보가 브라우저에 캐쉬될 수 있으며, referrer 헤더를 통해 전달될 수 있고, 실수로 ‘친구’에게 포워딩할 수도 있다. 세션 ID는 충분히 길고 복잡한 난수여서 손쉽게 추측할 수 없어야 한다. 세션 ID는 세션이 유지되는 중에도 자주 바뀌어 세션 ID가 타당하다고 받아들여지는 시간을 줄여야 한다. 세션 ID는 SSL로 전환되는 시기, 인증을 거칠 때 혹은 다른 중요한 변화가 있는 시기에 다른 값으로 변경되어야 한다. 사용자가 세션 ID를 임의로 선택하여 사용하는 일은 허용되지 않아야 한다.
n계정 리스트 – 시스템은 사이트의 계정 리스트에 사용자가 접근하는 것을 허용하지 않도록 설계되어야만 한다. 사용자 리스트를 반드시 제공해야 한다면, 직접적으로 계정명을 제공하기 보다는 별명(예명)과 같은 다른 형태를 제공하기를 권한다. 이렇게 하는 경우, 해당 별명을 이용해 로그인 시도를 할 수 없으며, 사용자 계정을 공격하기 위한 다른 해킹을 시도할 수 없다.
n브라우저 캐쉬 – 인증 및 세션 관련 정보는 GET 요청의 일부에 포함되어 전송되어선 안된다. 이런 경우에는 대신 POST 요청을 사용하여야 한다. 인증 페이지는 다양한 형태의 캐쉬 금지 태그를 이용함으로써 사용자가 브라우저의 ‘뒤로’ 버튼을 이용하여 인증 페이지로 돌아가지 못하도록 하고, 이전에 사용한 사용자 자격 증명을 재사용하지 못하도록 하여야 한다. 요즘의 여러 브라우저들은 autocomplete=false 플래그를 지원하여, 사용자 자격 증명을 자동완성 캐쉬에 저장하지 못하도록 하고 있다.
n신뢰 관계 – 사이트의 아키텍쳐 상에서 가능한한 각 컴포넌트들 사이의 암묵적인 신뢰 관계를 피해야 한다. 각각의 컴포넌트는 그래서는 안되는 절대적인 이유가 있는 경우(속도나 가용성 문제와 같은)를 제외하고는, 서로 관련을 맺고 있는 다른 컴포넌트에 대해 인증을 수행토록 해야한다. 만일 신뢰 관계가 필요한 경우라면 강력한 절차상의 메커니즘 혹은 아키텍쳐 메커니즘을 사용하여 사이트의 아키텍쳐가 지속적으로 변화하더라도 이러한 신뢰 관계가 악용될 수 없도록 해야 한다.
4. 크로스사이트스크립팅허점(Cross-Site Scripting(XSS) Flaws)
Cross-site Scripting 취약점은 공격자가 웹 애플리케이션을 사용해서 다른 최종 사용자에게 자바스크립트와 같은 악성 데이터를 보낼 때 발생한다. 그 데이터는 클라이언트에서 실행되는 Java스크립트, VB스크립트, ActiveX, Flash등을 실행하는 코드들이 존재하게 된다. 최종 사용자들은 이렇게 악성 코드들이 포함된 웹 사이트의 링크를 클릭하거나 이메일에 포함된 내용을 읽거나 BBS에 게시된 게시물을 클릭하는 것만으로도 사용자의 환경 설정사항을 변경하거나, 쿠키(cookie)를 가로채고 잘못된 광고들 게시하는 등의 일들을 할 수 있다.
[대처 방안]
XSS 공격으로부터 웹 애플리케이션을 방어하는 최선의 방법은 애플리케이션 차원에서 HTTP 헤더, 쿠키, 쿼리 스트링, 폼 필드, 히든 필드 등의 모든 인자들에 대해 허용된 유형의 데이터만을 받아들이도록 입력값 검증을 실시하는 방법이다. 다음과 같이 왼쪽의 필드의 입력 데이터를 오른쪽의 필드로 변환해서 필터링한다.
From
To
<
& l t;
>
& g t;
(
& # 4 0;
)
& # 4 1;
#
& # 3 5;
&
& # 3 8;
5. 버퍼오버플로우(Buffer Overflows)
웹 애플리케이션 컴포넌트가 사용자의 입력값을 적절히 점검하지 않는 언어로 작성되어 다운될 수 있으며, 특수한 경우에는 공격자가 해당 프로세스의 권한을 획득할 수 있다. 이 컴포넌트로는 CGI, 라이브러리, 하드웨어 드라이버, 웹 애플리케이션 서버 컴포넌트 등이 포함된다.
[대처 방안]
운영하고 있는 웹 서버 버전을 가장 최신버전으로 업그레이드 하거나 알려진 취약점을 제거할 수 있는 패치를 적용한다. 정기적으로 취약점 스케너를 통해서 취약점 여부를 점검하여 발견된 취약점에 대해서는 구성 설정을 변경하거나 패치를 적용하여 취약점을 제거한다.
6. 시스템명령어삽입허용(Command Injection Flaws)
웹 애플리케이션에서 HTML 형식이나 쿠키, URL 파라미터 형식으로 시스템 명령어를 삽입허용함으로써 웹 상에서도 시스템 명령을 실행할 수 있는 취약점이다. SQL 쿼리문을 삽입허용하게 되면 DB인증 메커니즘을 무력화시켜서 중요한 데이터베이스 정보를 외부로 유출할 수 있다. 또한 데이터베이스의 DML(Data Manipulation Language), DDL(Data Definition Language) 언어가 모두 사용 가능하므로 데이터베이스의 유출뿐만이 아니라 무결성을 파괴할 수도 있다.
[대처 방안]
n반드시 필요하다면 모든 시스템 명령을 사용하는 모든 사용자의 입력값을 점검한다.
n점검되지 않은 사용자 입력을 시스템 명령으로 전달하지 않는다.
n점검되지 않은 사용자 입력을 파이프(|)로 전달하지 않는다.
n점검되지 않은 사용자 입력을 perl의 open() 명령으로 전달하지 않는다.
n점검되지 않은 사용자 입력을 C 언어와 PHP의 popen() 명령으로 전달하지 않는다.
n점검되지 않은 사용자 입력을 ``(backticks)과 함께 사용하지 않는다.
n운영체제의 시스템 명령이 사용자 입력에 존재하는지 점검한다.
n모든 웹 애플리케이션엔 쉘 스크립트를 허용하지 않는다.
7. 부적절한에러처리(Error Handling Problems)
적절하지 못한 오류 처리는 웹 사이트에서 다양한 보안 문제를 야기한다. 가장 보편적인 문제는 데이터베이스 덤프, 에러 코드등과 같은 상세한 내부 메시지들이 사용자에게 노출된다는 것이다. 이러한 정보들은 바로 악용 가능하지는 않지만 향후 발생할 수 있는 공격에 정보를 제공하게 된다. 이러한 문제를 야기하는 원인은 다음과 같다.
n스크립팅 엔진의 설정 오류
nServlet/JSP Runner의 설정 오류
n웹 서버의 설정 오류
n데이터베이스의 설정 오류
이러한 문제를 통해 유출될 수 있는 정보들은 다음과 같다.
n애플리케이션의 흐름
n추가적인 웹 서버 정보
n데이터베이스 형식 및 버전
n운영체제 형식 및 버전
nScripting/Programming 언어의 형식 및 버전
n물리적인 경로
n변수 이름과 값
n변수 형식
n변수의 사용 목적
n스크립트 소스 코드의 세그먼트
nSQL 쿼리의 세그먼트
n데이터베이스와 테이블의 구조
[대처 방안]
웹 애플리케이션이 잘못된 요청을 받았을 때 자체 제작한 오류 페이지로 이동하도록 설정한다.
8. 취약한정보저장방식
대부분의 웹 애플리케이션은 패스워드, 신용카드 번호, 계정 기록과 같은 중요한 정보나 데이터베이스를 저장하고 있기 때문에 암호화 기술을 이용하여 보호하고 있다. 이러한 암호화 기술이 웹 애플리케이션에 적용될 때 다음과 같은 구현상의 오류로 인하여 보안 허점들을 내포하게 된다.
n중요 데이터를 암호화하지 않는 경우
n암호화에 사용되는 키나, 인증서, 비밀번호를 안전하지 않은 장소에 저장하는 경우
n기밀 정보를 메모리 상에 부적절하게 저장하는 경우
n부적절한 난수 발생 방법
n부적절한 암호화 알고리즘 사용
n자체 제작 암호화 알고리즘 사용
n암호화에 사용되는 키 교환에 대한 지원 절차나 다른 유지 관리 절차를 구현하지 않는 경우
[대처 방안]
암호화 취약점에 대한 가장 손쉬운 대처 방안은 암호화 사용을 최소한으로 자제하고 반드시 필요한 정보만을 저장하는 것이다. 예를 들면 신용 카드 번호를 암호화하여 저장하기 보다는 필요할 때마다 사용자가 해당 번호를 집어넣게 한다. 암호화된 비밀번호를 저장하기 보다는 SHA-1과 같은 단방향 함수를 사용한다.
9. 서비스방해공격(Denial of Service)
웹 애플리케이션 측면에서는 공격과 정상적인 트래픽 사이의 차이를 구분하기 어렵다. 이런 구분을 어렵게 하는 다양한 요소들이 있지만, 다른 원인들 중에 가장 중요한 원인은 IP 주소만으로는 신원 확인이 어렵다는 점이다. HTTP 요청이 어디에서 들어왔는지를 파악할 신뢰할만한 방법이 없기 때문에 악의적인 트래픽을 필터링하기가 매우 어렵다.
[대처 방안]
기본적으로 서비스 방해 공격을 막아내는 것은 어려우며, 이런 공격을 완벽하게 방어할 수 있는 방법은 존재하지 않는다.
일반적인 규칙은 모든 사용자에게는 제한된 자원만을 할당하고 인증을 거친 사용자는 할당량을 통해 특정 사용자가 시스템에 미치는 부하를 제한할 수 있다.
인증받지 않은 사용자에 대해서는 불필요한 데이터베이스 접근이나 다른 값비싼 자원에 대한 접근을 피해야 한다.
10. 웹과애플리케이션서버의구성설정상의오류(Web and Application Server Misconfiguration)
웹 서버와 애플리케이션의 구성 설정은 보안 측면에서 중요한 의미를 가진다. 그러한 구성설정들이 다음과 같은 여러 가지 요인들로 인해 보안 문제를 야기할 수 있다. 이러한 보안문제들은 자동화된 스케닝 도구에 의해 공격자들에 의해 공격 당할 가능성이 매우 높다.
n서버 소프트웨어 상에 존재하는 취약점을 패치하지 않은 경우
n디렉터리 리스팅이나 디렉터리 이동(traversal) 공격을 허용하는 서버 소프트웨어 상의 취약점이나 취약한 환경 설정
n불필요한 디폴트 파일, 백업 및 예제 파일(예제 스크립트, 예제 애플리케이션, 환경 설정 파일, 웹 페이지 등)
n부적절한 파일 및 디렉터리 권한 설정
n컨텐츠 관리나 원격 관리와 같은 불필요한 서비스 제공
n디폴트 패스워드를 사용하는 디폴트 계정
n디버깅 관련 기능이 허용되어 있거나 관리 기능이 접근 가능한 경우
n상세한 정보를 제공하는 에러 메시지(보다 상세한 사항은 에러 처리 부분을 참조)
n잘못 설정된 SSL 인증서와 암호화 설정
n자체 인증서를 사용하여 인증 문제를 해결하거나 가로채기 공격(man-in-the-middle)에 대한 보안을 제공
n디폴트 인증서 사용
n외부 시스템을 이용한 부적절한 인증
[대처 방안]
n최근에 발표된 보안 취약점 정보 파악
n최신 보안 패치 적용
n보안 강화 가이드라인의 업데이트
n정기적인 내, 외부 취약점 스캐닝
n보안 강화 가이드라인 준수 여부를 점검하기 위한 서버 보안 현황 내부 감사
n전체 보안 현황을 문서화하여 경영진에게 정기적으로 보고
[참고 자료]
OWASP Top Ten Most Critical Web Application Security Vulnerabilities (http://www.owasp.org)
오.. 내가쓰던건 알록달록유치했는데
이거슨 깔끔하게나오는듯
퍼가염