보안

[정보보안기사] 시스템보안 | 클라이언트 보안

inthyes 2024. 6. 21. 03:23

1. 악성 소프트웨어(악성 코드)

악성 소프트웨어의 기본 개념

  1. 개발자가 의도적으로 사용자가 원하지 않는 기능을 컴퓨터 프로그램에 포함시키거나 프로그램 자체의 오류로 인하여 사용자가 원하지 않는 시스템 충돌, 프로그램 중단, 개인정보 수집, 네트워크 포트 개방 등의 결과가 발생될 수 있음
  2. 컴퓨터 프로그램이 의도적 또는 비의도적으로 실행되면서 기밀성, 가용성, 무결성 등의 보안속성을 침해할 경우 해당 프로그램은 유해한 프로그램으로 간주됨
  3. 특히 의도적으로 컴퓨터의 보안속성을 침해할 목적으로 작성된 프로그램을 악성 프로그램으로 정의함

악성 소프트웨어의 분류

  1. 독립형과 기생형
    1. 호스트 프로그램을 필요로 하는지로 분류함
    2. 기생형 : 프로그램 단편으로 다른 실제 응용 프로그램이나 유틸리티나 시스템 프로그램 없이 독립적으로 존재할 수 었음.
      • 바이러스, 논리폭탄, 백도어
    3. 독립형 : 자체적으로 구성될 수 있는 프로그램으로 운영체제에 의해 스케줄되어 구동될 수 있음
      • 웜, 좀비 프로그램
  2. 자기 복제 여부
    1. 자기 복제 여부에 따라 바이러스성 악성코드와 비-바이러스성 악성코드로 분류함
    2. 웜 : 자기 복제를 한다는 측면에서 바이러스와 공통점을 갖지만 바이러스와 달리 숙주 파일 없이 자체 실행코드를 이용해 네트워크를 통하여 자기 자신을 복제해 전파시키며, 다른 프로그램을 감염시키지 않음
    3. 바이러스성 악성코드: 정상적인 프로그램이나 데이터를 파괴할 목적으로 시스템 부트, 메모리, 파일 영역 등에 기생하다가 다른 파일을 감염시킴

바이러스

특징

  1. 컴퓨터 바이러스는 다른 프로그램을 변형시키도록 하여 “감염(infect)”시키는 프로그램 단편이며, 실제로 자신을 변형시켜 실행 가능한 형태이기도 함
  2. 변형이란 원래 프로그램에 루틴을 주입해서 바이러스 프로그램의 복제를 만들어내는 것으로 다른 컨텐츠로 감염시킴
  3. 컴퓨터 바이러스는 자신을 완벽하게 복제할 수 있는 비법을 가진 명령 코드를 가지고 있음. 전형적으로 바이러스는 컴퓨터상의 프로그램이나 실행 콘텐츠의 전송자 속에 내장됨

세대별 분류

  1. 제 1세대 원시형 바이러스(Primitive Virus)
    1. 실력이 뛰어나지 않은 프로그래머가 만들어 프로그램 구조가 단순하고 분석이 상대적으로 쉬움
    2. 코드의 변형이나 변화 없이 고정된 크기를 가지며, 주로 기억장소에 상주해서 부트영역이나 파일을 감염시킴
  2. 제 2세대 암호화 바이러스(Encryption Virus)
    1. 백신 프로그램이 진단할 수 없도록 바이러스 프로그램의 일부 또는 대부분을 암호화시켜 저장함. 실행 시작점 부분에 위치하는 암호해독 데이터는 항상 일정함
  3. 제 3세대 은폐형 바이러스(Stealth Virus)
    1. 기억장소에 존재하면서 감염된 파일의 길이가 증가하지 않은 것처럼 보이게 하며, 백신 프로그램이 감염된 부분을 읽으려고 할 때 감염되기 전의 내용을 보여줘 바이러스가 없는 것처럼 백신 프로그램이나 사용자를 속임
  4. 제 4세대 갑옷형 바이러스(Armous Virus)
    1. 백신 프로그램 제작자에게 공격의 화살을 돌려 백신 프로그램으로부터 숨기기보다는 여러 단계의 암호화와 다양한 기법을 동원하여 바이러스 분석을 어렵게 하고 백신 프로그램 개발을 지연시킴
  5. 제 5세대 매크로 바이러스(Macro Virus)
    1. 매크로 기능이 있는 MS사 오피스 제품군 이외에 바지오(Visio), 오토캐드 등 VBS(Visual Basic Script)를 지원하는 다양한 프로그램에서 활동하기 때문에 현재 등장하고 있는 바이러스 중에서 가장 높은 비중을 차지하고 있음

매크로 바이러스

  1. 매크로 바이러스가 위협적인 이유
    • 매크로 바이러스는 플랫폼과 무관하게 사용됨
    • 대부분의 바이러스는 문서를 감염시키고 코드의 실행부분은 감염시키지 않음
    • 매크로 바이러스는 쉽게 퍼짐. 가장 보편적인 방법은 전자메일
    • 실행 파일(확장자가 COM이나 EXE)을 다룰 때보다 주의를 덜 하기 때문에 피해가 더 큼
  2. 매크로 바이러스 형태의 또 다른 희생양은 바로 Adobe사의 PDF 문서임. PDF문서는 자바스크립트 같은 다양한 형태의 스크립트를 포함할 수 있음
  3. 매크로 바이러스는 데이터 파일 중에 명령어를 실행시키는 MS 워드나 엑셀 등에 붙어서 그 파일이 열릴 때 실행됨. 매크로 바이러스는 매우 흔한 바이러스이지만, 대부분의 사용자는 데이터 파일은 바이러스에 의해 감염되지 않는다고 생각함

바이러스 방지책

안티 바이러스 방법

  1. 바이러스 위협에 대한 해결책 : 예방
  2. 세가지 수행 능력
    1. 탐지(Detection) : 일단 감염되면 바이러스가 있는지 판단하고 위치를 파악
    2. 식별(Identification) : 일단 탐지되면 프로그램을 감염시킨 특정 바이러스를 식별
    3. 제거(Removal) : 바이러스를 모든 감염된 시스템에서 제거하여 더 이상 퍼지지 않도록 함

안티 바이러스 필터링 방법(Antivirus Filtering Method)

  1. virus signature 방법
    • 특정 바이러스만이 가진 유일한 형태의 signature를 찾아내는 방법, 이런 signature는 실행 가능한 코드의 경우에는 이진 스트링으로 표현되고, 스크립트 등의 언어로 된 바이러스에서는 명령어의 나열로 나타남.
    • 현재까지 대부분의 안티바이러스 프로그램이 채택하고 있는 방법
  2. behavioral virus scanning 방법
    • 바이러스가 수행 중에 어떤 행동을 보이는지를 추적하는 방법
    • signature scanning 방법에서 불가능했던 새로운 바이러스와 웜에 대한 대처 능력을 가짐

바이러스 예방

  1. 신뢰성 있는 업체에서 구입한 상업용 소프트웨어 사용
  2. 안전하다고 생각될 때에만 첨부파일 열기
  3. 바이러스 스캐너를 이용하여 정기적으로 검사, 바이러스 스캐너 업데이트
  4. Windows Script Host, ActiveX, VBScript, JavaScript는 비활성화
  5. 현업의 업무를 심하게 방해하지 않는 수준에서 악성코드에 대응하는 보안 정책을 수립 및 적용

개요

  1. 자신을 복제하여 네트워크 연결을 통해 컴퓨터에서 컴퓨터로 그 복제본을 전송. 한 컴퓨터에 도착하게 되면 웜은 복제를 시작하고 다시 확산하기 시작
  2. 확산과 더불어 웜은 보통 원하지 않는 기능을 수행. 전자메일 바이러스는 시스템에서 시스템으로 자신을 확산시키기 때문에 웜의 성격을 어느 정도 가지고 있다고 여겨짐
  3. 웜은 다른 시스템에 직접적인 영향을 미치지 않는다는 점에서 트로이목마와 구분되며, 다른 프로그램에 기생하지 않는다는 점에서 컴퓨터 바이러스와 구분됨(기억장소 내에서 자기 자신을 계속적으로 증식하는 프로그램)

웜 확산 모델

  1. 확산은 서서히 시작하는 단계, 빠른 확산 단계, 서서히 퍼지면서 종료 단계로 3단계임
  2. 감염된 호스트는 각각 두 개의 호스트를 감염시키기 때문에 감염된 호스트 수는 지수적으로 증가함
  3. 시간이 경과하면서, 감염된 호스트는 이미 감염된 호스트를 공격하는데 시간을 허비하기 때문에 감염 속도가 줄어듦

웜의 실행

  1. 웜의 전파된 시스템에서 시스템의 접근 권한을 확보하고 자신을 실행시키기 위해 버퍼 오버플로우, 포맷 스트링, SQL 삽입, PHP 삽입 등 공격 가능한 시스템의 취약점을 이용함
  2. 시스템의 취약점을 이용하여 관리자 몰래 시스템 접근 권한 확보에 필요한 코드를 실행한 후 접근 구너한이 확보되면 나머지 코드를 실행함으로써 의도된 기능 수행

예시) 시스템 접근 권한이 확보되면 웜을 백도어로 설치, DDoS 공격에 사용될 수 있는 봇 또는 좀비 프로그램 다운로드, 키로거와 같은 악성 소프트웨어 설치

웜 대응책

웜이 머신 안에 상주하게 되면, 안티 바이러스 소프트웨어는 감지 가능, 웜 확산이 이루어지면 네트워크 활동이 활발해지기 때문에, 네트워크 활동과 사용을 모니터링하면 웜에 대한 기본적인 방어형태를 갖출 수 있음

네트워크 기반 웜 방어

  1. 네트워크-기반 웜 방어는 웜 모니터링 소프트웨어임. 한 개 또는 상호 연결된 LAN집합체로 구성된 사이트의 엔터프라이즈 네트워크에서는 두 가지 유형의 모니터링 소프트웨어가 필요함
  2. 진입 모니터(Ingress monitors) : 엔터프라이즈 네트워크와 인터넷 사이의 경계에 위치, 경계 라우터나 외부 침입차단시스템이나 독립된 수동 모니터의 진입 필터링 소프트웨어의 일부
  3. 진출 모니터(Egress monitors) : 진출 모니터는 나가는 트래픽에서 스캐닝의 흔적이나 기타 의심스런 행동을 모니터리링해서 웹 공격의 출처를 잡아내도록 설계함

트로이목마(Trojan horse)

개요

  1. 자신의 실체를 드러내지 않으면서 마치 다른 프로그램의 한 유형인 것처럼 가장하여 활동하는 프로그램
  2. 트로이목마는 패치 파일, 안티-바이러스 소프트웨어, 소프트웨어 최신 버전 등과 같이 유용하거나 재미있는 소프트웨어로 가장하여 설치하게 함으로써 다른 시스템으로 침투하는 악성 소프트웨어임
  3. 자기 복제를 하지 않으며 다른 파일을 감염시키거나 변경시키지 않음. 하지만 트로이목마가 포함된 프로그램이 실행되는 순간, 시스템은 공격자에게 시스템을 통제할 수 있는 권한을 부여하게 됨

특징

  1. 데이터 파괴 : 프로그램이 겉보기에는 유용한 작업을 수행하는 것처럼 보이지만 몰래 사용자 파일을 지울 수 있을 가능성 배제 안 됨
  2. 대표적인 프로그램 Back Orifice는 1998년 9월 CDC라는 해커그룹에서 발표한 MS Win95/98/2000 관리자용 도구이며 해커들이 백도어로 이용하기에 적합하도록 개발되었음

트로이목마 대응책

  1. 신뢰할 수 없는 메이르이 첨부 파일, 파일 공유 사이트 등의 파일을 확인 없이 설치하지 않는 것이 중요함
  2. 웹 브라우저 등의 취약점을 보완하는 패치를 신속하게 적용하여 최신 상태의 시스템을 유지하고, 안티-트로이목마 도구를 사용

스파이웨어(Spyware)

  1. 트로이목마와 비슷한 종류로 스파이웨어가 있음. 스파이웨어는 민감한 정보를 수집하여 주기적으로 원격지의 특정한 서버에 보내는 프로그램으로, 대상 컴퓨터에 은밀하게 설치되는 악성 소프트웨어 유형임
  2. 스파이와 소프트웨어의 합성어로, 본래는 어떤 사람이나 조직에 관한 정보를 수집하는데 도움 주는 기술을 뜻함
  3. 수집된 데이터는 신원 도용, 스패밍, 사기 등과 같은 악의적 활동을 위해 사용됨.
  4. 온라인 브라우징 습관에 대한 정보를 수집하여, 스패머가 표적 광고를 보내는데 활용되기도 함

기타 악성 소프트웨어

  • 기생 바이러스 : 프로그램에 기생해서 자신의 복제를 다른 프로그램으로 확산시킴
  • 웜 : 자신의 복제를 다른 컴퓨터로 확산시킨
  • 논리폭탄 : 조건이 충족되면 트리거 작동
  • 트로이목마 : 생각지 못한 추가적인 기능을 포함하고 있는 프로그램
  • 백도어(트랩도어) : 기능에 허가받지 않은 접근을 허용하는 프로그램의 변형
  • 모바일 코드 : 스크립트, 매크로나 다른 이동성 명령어 같은 소프트웨어로, 서로 성격이 다른 많은 플랫폼으로 옮겨서 실행될 수 있고 똑같은 기능을 수행
  • Exploit : 하나 혹은 여러 개의 취약점을 노리는 코드, 공격할 때 타이밍 문제나 반복적인 작업을 피하기 위해 작성한 자동화된 스크립트
  • Downloaders : 공격을 받는 컴퓨터에 다른 아이템을 설치하는 프로그램, 보통 다운로더는 전자우편을 통해 전달됨
  • Auto-rooter : 악성 해커 도구로 새로운 시스템에 원격으로 침입할 때 사용하는 툴
  • Kit(virus generator) : 바이러스를 자동으로 생성하는 도구모음
  • 스패머 프로그램 : 원하지 않는 대량의 전자우편물을 보내는 데 사용
  • 플러더(Flooders / DoS Clent) : 네트워크 컴퓨터 시스템에 대량의 자료를 보내어 서비스 거부 공격을 감행하는데 사용하는 코드
  • Keyloggers : 피해를 입은 시스템의 키 입력을 갈취
  • Rootkit : ;컴퓨터 시스템에 침입 후 루트 수준의 접근허락을 얻기 위해 사용하는 해커 도구모음
  • 공격 킷(Attack kit) : 다양한 번식 방법과 payload기술을 사용하는 새로운 악성코드를 자동으로 만들어 주는 툴의 모음
  • 좀비 : 감염된 컴퓨터에서 활성화되는 프로그램으로 다른 컴퓨터에 대한 공격을 시작하는데 사용됨
  • 스파이웨어 : 컴퓨터에서 정보를 수집해서 다른 시스템으로 전송하는 소프트웨어
  • 애드워어 : 소프트웨어에 내장된 광고, 감염시 팝업 광고가 뜨거나 브라우저가 광고 사이트로 연결함
  • 크라임웨어 : 온라인을 통해 불법적인 행동을 하기 위해 만들어진 프로그램
  • 브라우저 하이재커 : 브라우저를 하이재킹하여 홈페이지와 검색 페이지, 툴바를 통제하고 조작하는 프로그램
  • 다이얼러 : 모뎀이 특정번호로 연결되도록 하여 전화를 걸 때마다 공격자가 수익을 얻게 만드는 프로그램
  • 조크 : 실제 바이러스는 아니지만 사용자에게 심리적인 위협이나 불안을 조장하는 프로그램
  • Hoax : 남을 속이거나 장난을 목적으로 퍼트리는 가짜 바이러스로, 일반적으로 허위 바이러스 경고 메일 형태

2. 인터넷 활용 보안

하이퍼텍스트 전송 프토로콜(HTTP, Hypertext Transfer Protocol)

개요

  1. 하이퍼텍스트 전송 프로토콜은 웹에서 웹페이지를 가져오기 위해 어떻게 클라이언트-서버 프로그램이 작성될 수 있는지를 정의하는데 사용됨
  2. HTTP 클라이언트는 요청을 하고 HTTP 서버는 응답을 함. 서버는 포트 80번을 사용하고 클라이언트는 임시 포트 번호를 사용함

영속성

  1. 개요
  2. HTTP 버전 1.0은 비영속적 연결(nonpersistent connection)을 상;ㅛㅇ하였으나, 버전 1.1은 영속적 연결을 기본값으로 하는데 이는 사용자에 의해 변경 가능함
  3. 비영속적 연결
    1. 비영속적 연결에서는 각 요구/응답에 대해 하나의 TCP 연결이 만들어짐.
    2. 과정
      • 클라이언트가 TCP 연결을 열고 요청을 보낸다.
      • 서버는 응답을 보내고 연결을 닫는다.
      • 클라이언트는 end-of-file 표시가 나타날 때까지 데이터를 읽고 그 후 연결을 닫는다.
    3. 비영속적 연결은 서버에 큰 오버헤드를 부과하게 되는데, 이는 서버가 연결을 열때마다 다른 버퍼들을 필요로 하기 때문임
  4. 영속적 연결
    1. 영속적 연결에서 서버는 응답을 전송한 후에 차후의 요청을 위해 연결을 열어 놓은 상태로 유지함. 서버는 클라이언트로부터 요청을 받거나 타임아웃이 되면 연결을 닫을 수 있음
    2. HTTP/1.1 버전부터 Connection 헤더에 Keep-Alive 옵션이 추가되었음. 이는 TCP 연결 상태를 웹 서버 설정에 따라 일정시간 지속시키는 옵션으로 한 번의 연결 이후에 요청/응답을 반복할 수 있음

HTTP 트랜잭션

  1. 개요
    1. HTTP는 TCP의 서비스를 이용하지만, HTTP 자체는 상태가 존재하지 않는(stateless) 프로토콜임. → 클라이언트에 대한 정보가 서버에 저장되어 있지 않음
    2. 클라이언트는 요청 메세지를 보내어 트랜잭션을 초기화하고 서버는 응답을 보내어 대답함
  2. 요청 메시지
    1. 요청 라인
      • 요청 메시지의 첫 줄은 요청 라인(request line)이라 부르며 문자 구분 기호에 의해 분리된 세 개의 필드가 존재함
      • 세 개의 필드를 각각 메소드, URL, 버전이라 부르며 공백 문자로 구분되어야 함. 메소드 필드는 요청 유형(request type)을 정의함
    2. 메소드
      • GET 방식
        • GET 방식은 가장 일반적인 HTTP Request 형태로 웹 브라우저에 요청 데이터에 대한 인수를 URL(Uniform Resource Locator)을 통해 전송함
        • 각 이름과 값을 &로 결합하며 글자수는 255자로 제한됨. URL을 클릭하여 특정 웹 페이지를 똑같이 확인할 수 있는 경우 GET방식이 사용된 것임
        • 데이터가 주소 입력란에 표시되기 때문에, 최소한의 보안도 유지되지 않는 매우 취약한 방식임. 따라서 간혹 아이디나 패스워드가 인수로 저장되어 전달되는 경우도 발생됨
      • POST 방식
        • POST 방식은 URL에 요청 데이터를 전달하지 않고, HTTP의 헤더 영역이 아닌 바디 영역에 소켓을 이용하여 데이터를 전송함
        • 인수 값을 URL을 통해 전송하지 않기 때문에 다른 이가 링크를 통해 해당 페이지를 볼 수 없음
        • 게시판 등에서 파일 업로드는 POST 방식으로만 할 수 있으며, GET 방식과는 달리 보내려는 데이터가 URL을 통해 노출되지 않기 때문에 최소한의 보안성을 갖추고 있음
      • 기타 메소드
        • GET : URL에 해당하는 자료를 제공해 줄 것을 요청함. 웹서버에 저장된 정보를 단순히 요청하기 위해 사용하는 방법으로, 클라이언트는 GET 지시자와 함께 URL 정보를 웹서버로 전달하면 웹서버는 해당 정보를 브라우저로 회신하게 됨
        • HEAD : GET 메소드와 유사하게 요청하지만 서버 응답시에 응답 메시지 바디를 제외하고 헤더부만 응답해주는 메소드로 요청 자원에 대한 처리는 서버에서 이루어지지만 그 결과로 헤더값만을 전송함. 주로 검색엔진에서 URL/링크의 유효성을 검증하기 위한 목적으로 사용됨
        • POST : 클라이언트에서 웹서버로 데이터를 전송할 때 사용하는 방법으로 웹서버가 처리할 수 있는 자료를 전달할 때 사용
        • PUT : POST와 마찬가지로 헤더 및 몸체를 포함하며 몸체에 콘텐츠 내용을 덧붙여 원격지 서버에 지정한 콘텐츠를 저장하기 위한 목적으로 사용됨. 그러나 이를 악용하여 홈페이지 변조에 사용함
        • DELETE : 클라이언트가 권한이 있다면 서버에서 웹페이지를 제거하는 것을 허용함
        • TRACE : 디버깅에 사용됨. 클라이언트는 서버가 요청들을 받고 있는지 여부를 확인하기 위해 에코 백을 서버에 요청함
        • OPTIONS : 해당 메소드를 통해 시스템에서 지원되는 메소드 종류를 확인할 수 있음
        • CONNECT : 서버에 프락시 기능을 요청할 때 사용됨
    3. 요청 헤더 라인
      • 요청 라인 이후 0개 이상의 요청 헤더라인을 가질 수 있음. 각 헤더 라인은 추가적인 정보를 클라이언트에서 서버로 보냄.
      • ex. 클라이언트는 특별한 형태로 보내지는 문서를 요청할 수 있음. 각 헤더 라인은 헤더 이름, 콜론, 스페이스, 헤더 값을 가짐.
      • 주요 요청 헤더 정보
        • Host : 요청의 대상이 되는 서버의 도메인명/호스트명과 포트 정보
        • User-Agent : 요청 클라이언트 애플리케이션/OS 정보
        • Referer : 현재 요청 URL 정보를 담고 있는 이전 문서의 URL 정보
    4. 빈 라인(Empty Line)
      • 헤더의 끝을 의미하는 개행으로 헤더의 개수가 가변이기 때문에 빈 라인을 통해 그 끝을 식별함
    5. 본체
      • 보통은 메소드가 PUT이나 POST일 때 송신될 주석이나 웹사이트에 게시될 파일을 담고 있음. GET 방식의 경우에는 요청 데이터가 없기 때문에 메시지 바디가 없음
  3. 응답 메시지
    1. 상태 라인
      • 응답 메시지의 첫 줄은 상태 라인이라 부름. 첫 필드는 HTTP 프로토콜의 버전을 의미하고 현재 1.1임
      • 상태 코드 필드는 요청의 상태를 정의함
    2. 응답 헤더 라인
      • 상태 라인 이후 0개 이상의 응답 헤더 라인을 가질 수 있음. 각 헤더 라인은 서버에서 클라이언트로 추가적인 정보를 보냄
      • ex. 송신자는 문서에 대한 부가 정보를 보낼 수 있음. 각 헤더 라인은 헤더 이름과 콜론, 스페이스 그리고 헤더 값을 가지고 있음.
      • 주요 응답 헤더 정보
        • Content-Type : 메시지 바디의 데이터 형식
        • Content-Length : 메시지 바디의 전체 크기(단위 : 바이트)
    3. 빈 라인(Empty Line)
      • 헤더의 끝을 의미하는 개행. 헤더의 개수가 가변이기 때문에 빈 라인을 통해 그 끝을 식별함
    4. 본체
      • 서버에서 클라이언트로 전송되는 문서를 포함함. 응답이 오류 메시지가 아니라면 본체가 존재함

쿠키(Cookie)

개요

  1. 쿠키는 1994년 넷스케이프에서 처음 사용한 기술로 사용자들이 웹 사이트를 편리하게 이용할 수 있도록 하기 위한 목적으로 만들어짐. 최근에는 많은 웹사이트가 이 쿠키를 이용하여 사용자의 정보를 수집함
  2. 쿠키는 사용자가 인터넷 웹 사이트에 방문할 때 생기는 4KB 이하의 파일을 말함
  3. 쿠키에는 사용자와 웹 사이트를 연결해 주는 정보가 담겨져 있기 때문에 나중에 클라이언트가 해당 사이트에 접속하려고 할 때 이 쿠키 내용을 이용하여 클라이언트의 신분을 알 수 있게 해줌

쿠키를 이용한 통신

  1. 1단계
  2. 사용자가 웹 사이트에 방문하면 웹 사이트는 사용자의 컴퓨터에 쿠키를 만든다.
  3. 2단계아이디와 비밀번호를 사용한 경우에는 그 정보가 쿠키에 남아 있기 때문에 아이디와 비밀번호를 다시 입력하지 않아도 로그인 할 수 있음
  4. 사용자가 웹 서버에 접속할 때 사용자 컴퓨터에 있는 쿠키를 웹 서버로 전송하는 단계

쿠키의 일반적 용도

  1. 사이트 개인화
  2. 장바구니 시스템
  3. 웹 사이트 이용방식 추적
  4. 타킷 마케팅

쿠키의 구조

  1. 개요서버는 응답에 Set-Cookie 헤더를 포함시키는 방식으로 쿠키 설정쿠키의 기본 구조 : Set-Cookie: name=value; expires=[Date]; domain=[Domain]; path=[Path]; [secure]
  2. 이름-값 쌍과 선택적인 애튜리뷰트로 구성됨
  3. 쿠키는 4개의 속성과 하나의 데이터를 가진 구조체
  4. 유효기간유효 기간이 지나면 쿠키 데이터는 소멸됨. 실제로 파일이 지워지지 않더라도 데이터를 브라우저에서 읽을 수 없음
  5. 쿠키가 생성되면 기본적으로 브라우저가 종료될 때까지는 쿠키의 데이터를 사용할 수 있음. 유효 기간을 지정하면 브라우저가 종료되어도 지정한 기간 동안은 쿠키 데이터를 읽고 쓰는 것이 가능
  6. 패스
  7. 쿠키는 쿠키 데이터를 생성한 웹 페이지에서만 그 데이터를 읽을 수 있음. Path항목을 지정해주면 해당 Path 이하에서는 쿠키 데이터 공유가 가능함
  8. 도메인
  9. 도메인 속성은 패스 속성을 확장한 것으로 도메인 단위에서 쿠키 데이터를 읽고 쓰는 권한 설정이 가능함

쿠키에 관한 오해

  1. 바이러스 전파
  2. 사용자 컴퓨터에 피해 입히기
  3. 다른 웹사이트에서 읽기

쿠키 보안 취약점

  1. XSS(Cross-Site Scripting) 공격
    • 웹 사이트를 만들기 위해서 HTML언어로 페이지를 구성해야 함. HTML은 정적인 페이지 생성만 가능함
    • 게시판 같은 서버와 통신을 하는 동적 페이지 생성을 위해서는 서버사이드 스크립트 언어인 PHP, JSP, ASP 등 CGI(Common Gateway Interface) 프로그램을 이용해야 함
    • 위 프로그램은 웹 서버에서 실행되어, 사용자에게 돌려주는 역할을 함. 반대로 사용자의 컴퓨터에서 실행되는 언어인 자바 스크립트나 비주얼베이직 스크립트 등이 있음
    • XSS 공격은 자바스크립트가 사용자의 컴퓨터에서 실행된다는 점을 이용한 공격임. 자바스크립트에서 “document.cookie”라는 명령어는 사이트에서 쿠키값을 활용하여 다양한 서비스를 제공할 수 있도록 하는 역할을 하지만, 공격자들은 쿠키값을 유출하기 위한 목적으로도 사용함
  2. 스니핑(Sniffing)공격을 이용
    • 쿠키가 동작하는 과정은 두 가지로 구분되지만, 두 가지 모두 클라이언트에 저장되는 쿠키값이 네트워크를 통해 전송되는 것을 알 수 있음
    • 이때 쿠키 값을 따로 암호화하지 않고 전송한다면 네트워크 스니핑 공격을 통해 쿠키값 탈취가 가능함
  3. 공용 PC에서 쿠키값 유출
    • 쿠키 파일은 사용자의 하드디스크에 저장됨
    • 공격자는 공용 PC의 하드디스크에 저장된 쿠키 정보를 쉽게 얻을 수 있음

HTTP 쿠키 관련 보안 속성

  1. httpOnly 속성
    • Set-Cookie 응답 헤더에 설정하는 속성으로 클라이언트에서 스크립트를 통해 해당 쿠키에 접근하는 것을 차단해주는 속성
    • 일반적으로 세션 ID를 저장하고 있는 세션 쿠키를 탈취하기 위한 XSS(Cross Site Script)공격에 대응하기 위해 사용
  2. secure 속성
    • Set-Cookie 응답 헤더에 설정하는 속성으로 클라이언트에서 HTTPS(SSL/TLS)통신일 경우에만 해당 쿠키를 전송하고 HTTP통신일 경우에는 전송하지 않는 속성임
    • 전송구간 암호화를 통해 평문 쿠키가 전송 과정에서 노출되는 것을 방지할 수 있음. 이는 쿠키에 대한 기밀성을 보장하기 위한 목적으로 사용함

쿠키 관리를 통해 온라인 정보보호 정책 강화하기

  1. 쿠키는 지속 시간에 따라 영속 쿠키와 세션 쿠키로 구분됨
    • 영속 쿠키 : 클라이언트에 파일형태로 지속해서(또는 일정 기간) 존재하는 쿠키로 쿠키에 설정된 사이트 요청 시마다 Cookie 요청헤더에 쿠키 정보를 담아서 전달함
    • 세션 쿠키 : 클라이언트 메모리상에 세션이 유지되는 동안 존재하는 쿠키로 세션이 종료되면 소멸됨
  2. 보안 취약점
    • 쿠키 방식은 클라이언트 상태정보를 클라이언트에 저장하고 HTTP 요청/응답헤더에 담아서 전달하기 때문에 해킹 및 스니핑 공격에 의한 변조와 외부 노출에 취약한 특성이 있음
    • 중요정보(개인정보, 신용정보, 비밀번호 등)를 저장할 경우에는 “쿠키 방식”이 아닌 서버에 상태정보를 저장하는 “세션 방식”이 안전하며 부득이하게 쿠키를 사용해야 할 경우에는 암호화를 적용해야 함

세션

개요

  1. 개별 클라이언트 상태정보를 서버에 저장하는 기술
  2. 서버는 개별 클라이언트 세션을 식별하기 위해 세션 ID를 부여하고 세션 ID는 세션 쿠키를 이용하여 클라이언트와 서버 간 주고 받음
  3. 클라이언트 상태정보를 서버에 저장하기 때문에 쿠키 방식에 비해 보안상 안전하다는 장점이 있음
  4. 만약 공격자가 정상적인 사용자의 세션 ID 정보를 탈취한다면 정상 사용자로 위장한 접근이 가능함. 이런공격을 HTTP 세션 하이재킹이라고 함

안전한 세션 ID 관리

  1. 세션 ID 생성
    • 세션 ID는 안전한 서버에서 생성 후 사용되어야 함
    • 세션 ID는 최소 128비트의 길이로 생성되어야 하며, 안전한 난수 알고리즘을 적용하여 예측이 불가능한 값이 사용되어야 함
  2. 세션 ID 사용
    • URL Rewrite 기능을 사용하는 경우 세션 ID가 URL에 노출될 수 있으므로, 사용하지 않도록 설계해야 함
  3. 세션 ID 폐기
    • 장기간 접속되어 있는 경우 세션 ID의 노출위험이 커지므로, 일정시간 주기적으로 세션 ID를 재할당 하도록 설계해야 함

웹브라우저 보안

영역 추가와 제거하기

  1. 인터넷 익스플로러에 대한 보안을 구현할 때 사이트에 따라 서로 다른 보안 요구사항이 필요할 수 있음
  2. 여러 유형의 사이트를 관리하기 위해 다양한 보안영역을 지우너하고 각 영역에 대한 보안 요구사항을 사용자가 정의할 수 있게 함
  3. 사용 가능한 영역
    • 인터넷 : 다른 세 가지 영역에 포함되지 않은 웹사이트를 위한 영역(디폴트 약간 높음)
    • 로컬 인트라넷 : 사용자의 컴퓨터와 네트워크(인트라넷)사엥 있는 웹사이트를 위한 영역(디폴트 낮음)
    • 신뢰할 수 있는 사이트 : 사용자가 안전한 콘텐츠를 갖고 있다고 신뢰하는 페이지를 설정하는 웹사이트 영역(디폴트 낮음(보통))
    • 제한된 사이트 : 어떤 이유에서든 사용자가 신뢰할 수 없거나 보안 페이지로 설정할 수 없는 웹사이트 영역(디폴트 높음)