본문 바로가기

AI/정보보안

[정보보안] 웹 보안

728x90
반응형

웹의 3요소

HTTP(HyperText Transfer Protocol)

  • TCP/IP 기반의 프로토콜.
  • OSI7-Layer의 7계층에 해당하는 프로토콜.
  • 하이퍼텍스트 문서(ex. HTML)를 주고 받는데 사용되는 프로토콜.

 

URL(Uniform Resource Locator)

  • 웹 상에서 존재하는 각각의 하이퍼텍스트 및 이미지, 동영상 등의 자원(Resource)을 접근하기 위한 주소.
  • 네트워크상에서 자원이 어디에 있는지를 아려주기 위한 규약.

 

하이퍼텍스트(HyperText)

  • 링크를 통해 한 문서에서 다른 문서로 접근할 수 있는 문서.

 

 

HTTP(HyperText Transfer Protocol)의 개념

요청(Request) 메시지

  • 메소드 : 서버가 수행해야할 동작
메소드 내용
GET 서버가 자원을 전송해 줄 것을 요청
POST 요청 바디를 통해 클라이언트가 서버로 데이터 전송
HEAD 서버가 (자원 전송X )헤더만 전송해 줄 것을 요청
OPTIONS 서버가 지원하는 메소드를 질의
TRACE 클라이언트가 보낸 요청을 그대로 반환
PUT 클라이언트가 서버의 지정한 URL로 자원을 전송
DELETE 서버의 자원을 삭제
CONNECT 프록시 터널링을 위해 예약된 메소드
  • 요청 URI : 웹 서버의 최상위 경로(/)를 기준으로 상대 경로 또는 절대 경로로 정의.
  • 프로토콜 버전 : HTTP 프로토콜을 이용하여 통신을 할 때 사용하는 버전 정의 1.1 버전이 널리 사용.(HTTP/0.9 ~ )
  • 요청 헤더
    • 요청 시에 필요한 조건이나 특성 등을 나타내는 필드.
    • "필드 이름"과 "필드 값"으로 이루어져 있고 콜론(:)으로 구분.
    • 필드 이름은 US-ASCII 문자로 구성됨.
헤더 내용
Host: www.infinitybooks.co.kr 필드 이름 : Host
필드 값 : www.infinitybooks.co.kr
의미 : 요청하는 호스트(host) 정보를 저장
Content-Type: text/html 필드 이름 : Content-Type
필드 값 : text/html
의미 : 요청 또는 전달되는 데이터의 타입을 지정
Keep-Alive: timeout=30, max=200 필드 이름 : Keep-Alive
필드 값 : timeout=30 및 max=200
의미 : 세션을 유지하는(Keep-Alive) 정보를 지정

 

  • 요청 바디
    • POST 메소드를 사용할 경우 HTTP의 요청 메세지에 추가적으로 포함.
    • 클라이언트가 서버로 보내는 추가적인 데이터.
    • Form에 기입한 이름 혹은 주소와 같은 데이터부터 첨부 파일과 같은 바이너리 파일 등 다양한 포맷의 데이터가 추가될 수 있음.

 

응답(Response) 메시지

  • 프로토콜 버전 : 서버가 사용하는 HTTP 버전
  • 상태코드 : 앞서 전달된 클라이언트 요청을 서버가 정상적으로 처리했는지 오류가 발생했는지 알려주는 결과값
값의 범위 구분 내용
100~199 정보 전송(Information) 요청을 받아 처리가 계속되고 있음(프로토콜 전환 등)
200~299 성공(Success) 요청이 정상 처리됨
200 : OK(요청 성공)
201 : Created(PUT 메소드에 의해 파일이 서버에 생성됨)
202 : Accpected(요청 수락됨)
204 : No content(바디에 데이터 없음)
300~399 리다이렉션(Redirection) 요청을 처리하기 위해 클라이언트가 다른 URL로 이동(리다이렉션) 되어야 함
400~499 클라이언트 오류(Client error) 클라이언트의 요청이 문제가 잇어서 처리를 할 수 없음(오류 발생)
400 : Bad request(요청 메시지의 문법 오류)
401 : Unauthorized(요청 메시지에 대한 인증 오류)
403 : Forbidden(요청에 대한 접근 차단)
404 : Not found(요청한 자료가 존재하지 않음)
500~599 서버 오류(Server error) 서버 측에서 오류가 발생하여 요청을 처리할 수 없음
500 : Internal server error(서버 내부의 오류 발생)
501 : Not implemented(요청된 메소드를 수행할 수 없음)
503 : Service unavailable(잠시 동안 서비스 불가)
  • 상태코드 설명 : 상태코드를 설명.
  • 응답 헤더 : 전달할 데이터의 형식과 길이 등의 메타 정보.
  • 응답 바디 : 클라이언트의 요청에 대한 요청 결과.

 

HTTP는 비연결지향 프로토콜이여서 클라이언트가 새로운 요청을 보낼 때마다 새로운 접속을 해야했음.

HTTP 1.1 버전 부터 Keep-alive 필드 덕분에 특정 시간동안 연결을 유지하고 요청을 보낼 수 있도록 하는 기능이 추가됨.

 

쿠키(Cookie) : 클라이언트에 저장되는 키와 값이 들어있는 작은 데이터 파일.

  • 클라이언트의 상태정보를 로컬에 저장했다가 참조함.
  • 이름, 값, 경로 정보, 저장기간이 있음.

 

세션(Session) : 일정 시간 동안 같은 클라이언트로부터 전달되는 요청들을 하나의 그룹으로 보고 그 그룹을 일컬어 하나의 세션이라고 함.

  • 로컬이 아닌 서버에 저장됨.

 

 

 

하이퍼텍스트 및 URL

대표적인 하이퍼텍스트 문서인 HTML은 내용이 바뀌지 않는 정적(Static)인 콘텐츠 일 수 있지만 사용자의 상황에 따라 동적(Dynamic)인 콘텐츠일 수 있음.

 

동적인 콘텐츠로 HTML을 생성하는 방법은 서버 사이드 스크립트 언어(Server-side Script Language)를 사용하면됨.

  • JSP, ASP, PHP 등

 

HTML에 스크립트가 포함되어 동적으로 화면을 만들거나 다양한 UI를 제공할 수도 있는데 클라이언트 사이드 스크립트 언어(Client-side Script Language)를 사용하면 됨.

  • Javascript, Visual Basic Script

 

URI(Uniform Resource Identifier)는 인터넷의 특정 자원에 접근하기 위해 사용하는 식별자임.

URI의 구성

  • 스키마 이름 : http 또는 https 등과 같이 어떤 프로토콜을 사용하는지 지정.
  • 자격(인증) 정보 : 서버에서 자원을 취득하는 데 필요한 자격(인증) 정보로 사용자 이름과 패스워드 등을 지정할 수 있음, 선택 사항으로 생략 가능.
  • 서버의 호스트 이름 혹은 IP 주소 : FQDN(Full Qualified Domain Name) 형식의 이름을 지정할 수 있고, 경우에 따라서는 193.0.1.1과 같이 IP 주소가 사용될 수 있음.
  • 서버 포트 번호 : 서버의 연결처가 되는 네트워크의 포트 번호로 선택 사항이며 생략될 경우 기본 포트 번호가 사용됨.
  • 계층적 파일 경로 : 요청하는 자원의 경로를 말하며 UNIX의 디렉터리 지정 방법과 유사함.
  • 질의 문자열(Query String) : 임의의 매개변수를 전달하기 위한 목적이며 생략 가능함.
  • 단편 식별자 : 취득한 자원에서 그 하위에 있는 특정 부분을 # 등으로 가리키는 것으로 선택 사항.

 

퍼센트 인코딩 : URI에서 사용할 수 없는 문자를 표현할 때 사용되는 인코딩 방식.

  • 대상이 되는 문자를 바이트 단위로 나뉘어 %xx(16진수) 형태로 표시함.
  • ex. https://ko.wikipedia.org/wiki/%ED%8D%BC%EC%84%BC%ED%8A%B8

 

 

웹 취약점

웹 취약점 스캐너를 이용하여 웹 사이트의 취약점을 찾아서 보완해야함.

  • 여러가지 상용 프로그램과 오픈 소스가 있음.

 

OWASP(The Open Web Application Security Project)에서 2004년 부터 3년 마다 "10대 웹 보안 취약점"을 정기적으로 발표하고 있음.

 

SQL 인젝션(SQL Injection)

  • 사용자가 입력하는 입력 값의 대한 유효성을 검증하지 않고 그대로 사용할 때 발생하는 데이터베이스 관련 보안 취약점.
  • 데이터베이스로 전달되는 쿼리를 악의적으로 변조하여 사용자 인증을 우회하거나 데이터베이스에 저장된 데이터를 변조 또는 파괴할 수 있는 보안 공격.
  • 보안 대책
    • 매개변수 바인딩 : 사용자가 입력한 값은 별도로 데이터베이스에 전달되어 전달된 정적인 질의문과 바인딩 되어 실제 질의 실행.
    • 입력 값에 대한 특수문자 검증 : 특수문자(' " / \ 공백 ; : -- # 등)가 포함되어 있는지 확인하고 허용되지 않는 문자열이나 문자는 제거.

 

경로 조작(Path Traversal)

  • 사용자가 입력하는 값에 대한 유효성을 검증하지 않고 그대로 사용할 때 발생하는 서버 시스템 자원 접근에 대한 보안 취약점.
  • 사용자가 접근해서는 안되는 서버의 중요 파일을 내려받거나 삭제할 수 있음.
  • ex. ../../mysql/my.ini 이런 식으로 상대경로로 접근하여 대상파일에 접근함.
  • 보안 대책
    • 입력 값에 대한 특수문자 검증 : 특수문자(' " / \ 공백 ; : -- # 등)가 포함되어 있는지 확인하고 허용되지 않는 문자열이나 문자는 제거.

 

위험한 형식 파일 업로드

  • 유효성 점검의 대상이 사용자가 업로드 하려는 파일임.
  • 사용자가 보내는 파일에 대해서 유효성 점검을 하지 않을 때 발생할 수 있는 보안 취약점.
  • 사용자가 올린 파일이 웹 서버에서 실행되면 보안 공격자가 외부에서 웹 서버를 통해 서버를 원격 조종할 수 있음.
  • 이런 파일을 웹 쉘이라고 하고 웹 쉘은 웹 서버에서 지원되는 언어에 따라 .asp, .jsp, .php 등이 될 수 있음.
  • 이런 웹 쉘을 통해 서버의 파일 시스템 구조를 확인하고 파일을 내려받거나 삭제, 변경 등을 수행할 수 있음.
  • 보안 대책
    • 화이트리스트 방식의 허용된 확장자만 업로드 허용 : 화이트리스트 방식의 허용된 확장자(jpg, doc 등)를 미리 정의해 놓고 허용된 형식의 파일에 대해서만 업로드가 가능하게 하는 방법.
    • 업로드 된 파일을 외부에서 실행하기 어렵게 업로드된 파일의 확장자를 임시 확장자(tmp)로 변경.
    • 업로드된 파일을 웹 서버의 문서 디렉터리가 아닌 전혀 다른 곳에 저장되도록 설정.

 

크로스사이트 스크립트(XSS : Cross-Site Script)

  • 웹 브라우저에서 사용자가 입력 값에 대한 유효성을 검증하지 않고 그대로 웹 서버로 전송했을 때 발생할 수 있는 보안 취약점.
  • 공격자는 의도적으로 악성 스크립트를 웹 서버에 저장할 수 있음.
  • 이러한 악성 스크립트는 웹 서버에 접속한 다른 사용자들에게 배포되어 추가적인 피해를 입힐 수 있음.
  • 보안 대책
    • 입력 값에 대한 특수문자 검증 : 특수문자(< > & ' ")가 포함되어 있는지 확인하고 허용되지 않는 문자열이나 문자는 제거.

 

적절한 인증 없는 중요 기능 허용

  • 인증은 현재 요청을 보낸 사용자가 정말로 시스템의 사용자가 맞는지를 확인하는 과정.
  • 인증 점검 로직이 없는 페이지에서 공격자가 악의적으로 주요 정보를 자유롭게 열람 및 조작함.

 

부적절한 인가

  • 인가는 사용자의 자원에 대한 접근 또는 사용을 허용하는 과정.
  • 공격자가 관리자 화면을 통해 다른 사용자의 권한을 변경할 수 있음.

 

중요 정보 평문 저장/전송과 취약한 암호화 알고리즘 사용

  • 웹 서버에 정보 저장/전송에 암호화 단계가 취약하거나 부재라면 공격자가 중요한 정보를 웹 서버에서 탈취할 수 있음.
  • 중요 정보는 반드시 암호화해서 저장되어야 함.
    • 암호화 알고리즘 : ARIA, SEED, RSA, SHA-2 등

 

  • 전송에도 암호화를 사용해야 함(SSL 등)

 

부적절한 오류 처리

  • 오류 메시지를 통한 정보 노출 : 오류 메시지를 통해 웹 서버의 종류, 동작 로직등을 얻어 낼 수 있기 때문에 일반 사용자에게 보여지는 오류 메시지는 최소한의 정보만 포함되도록 설정해야함.(try-except)
  • 오류 상황 대응 부재와 부적절한 처리 : 오류 상황에 대한 적절한 처리를 하지 않으면 공격자는 일부러 오류 상황을 만들어 취약점을 찾아내고 공격을 시도함.(try-except)

 

 

 

웹 서버의 계정 관리

웹 서비스는 최소 권한 사용자로 운영되어야함.

  • 웹 서버가 root 또는 Administrator와 같이 권한이 많은 운영체제 사용자의 프로세스라고 가정할 때 보안 공격자가 웹 서버를 탈취 할 경우 웹 서버를 이용하여 시스템 설정을 변경하는 등 웹 서버 및 운영체제 수준에서 시스템을 자기 마음대로 조정할 수 있음.

 

 

웹 서버의 파일 관리

디렉터리 검색은 막아야함.

  • 디렉터리 검색을 허용할 경우 공격자는 웹 서버의 파일 시스템 구조를 다 파악할 수 있기 때문에 여러가지 공격을 당할 수 있음.

 

불필요하게 설치된 파일을 제거하라.

  • 웹 서버 설치 시 기본적으로 제공되는 매뉴얼과 파일 및 예제 스크립트 파일은 제거해야함.
  • 이러한 파일들은 보안 공격자에게 웹 서버의 정보 및 운영체제에 대한 정보를 알려주기 때문에 보안 사고의 단초가 될 수 있음.

 

 

웹 서버의 서비스 관리

파일 업로드 및 다운로드의 최대 크기를 설정하라.

  • 따로 최대 크기를 설정하지 않으면 부주의한 사용자나 악의적인 사용자가 대용량 파일을 업로드 또는 다운로드를 하여 서비스가 중지되는 경우가 발생할 수 있음. 
  • 또는 공격자의 의해 내부의 자료가 대량으로 외부로 유출될 수 있음.

 

IIS의 WebDAV 서비스를 비활성화 하라.

  • WebDAV(Web Distributed Authoring and Versioning)은 원래 웹 상에서 여러 명의 사용자가 동시에 공동 개발을 지원하기 위해 제안된 국제 표준.
  • WebDAV를 사용해 인터넷 상에서 원격지 사용자들 간의 파일을 공동 편집하고 관리할 수 있음.
  • 이러한 기능을 악용하여 공격자는 인증 우회, 버퍼 오버플로우 오류를 통한 관리자 권한 획득 등의 공격을 시도 할 수 있음.

 

 

웹 서버의 로그 관리

웹 서버에서 생성된 로그 정보들은 이후에 보안 감사 혹은 보안 공격에 대한 분석 등의 용도로 중요하게 사용되기 때문에 보안 관리자는 로그 저장 및 관리에 주의해야함.

728x90
반응형

'AI > 정보보안' 카테고리의 다른 글

[정보보안] 대칭 암호화 방식  (0) 2023.06.13
[정보보안] 고전암호  (0) 2023.06.13
[정보보안] 네트워크 보안(3)  (0) 2023.04.25
[정보보안] 네트워크 보안(2)  (0) 2023.04.25
[정보보안] 네트워크 보안(1)  (0) 2023.04.25