1. 악성 소프트웨어(악성 코드)
악성 소프트웨어의 기본 개념
- 개발자가 의도적으로 사용자가 원하지 않는 기능을 컴퓨터 프로그램에 포함시키거나 프로그램 자체의 오류로 인하여 사용자가 원하지 않는 시스템 충돌, 프로그램 중단, 개인정보 수집, 네트워크 포트 개방 등의 결과가 발생될 수 있음
- 컴퓨터 프로그램이 의도적 또는 비의도적으로 실행되면서 기밀성, 가용성, 무결성 등의 보안속성을 침해할 경우 해당 프로그램은 유해한 프로그램으로 간주됨
- 특히 의도적으로 컴퓨터의 보안속성을 침해할 목적으로 작성된 프로그램을 악성 프로그램으로 정의함
악성 소프트웨어의 분류
- 독립형과 기생형
- 호스트 프로그램을 필요로 하는지로 분류함
- 기생형 : 프로그램 단편으로 다른 실제 응용 프로그램이나 유틸리티나 시스템 프로그램 없이 독립적으로 존재할 수 었음.
- 바이러스, 논리폭탄, 백도어
- 독립형 : 자체적으로 구성될 수 있는 프로그램으로 운영체제에 의해 스케줄되어 구동될 수 있음
- 웜, 좀비 프로그램
- 자기 복제 여부
- 자기 복제 여부에 따라 바이러스성 악성코드와 비-바이러스성 악성코드로 분류함
- 웜 : 자기 복제를 한다는 측면에서 바이러스와 공통점을 갖지만 바이러스와 달리 숙주 파일 없이 자체 실행코드를 이용해 네트워크를 통하여 자기 자신을 복제해 전파시키며, 다른 프로그램을 감염시키지 않음
- 바이러스성 악성코드: 정상적인 프로그램이나 데이터를 파괴할 목적으로 시스템 부트, 메모리, 파일 영역 등에 기생하다가 다른 파일을 감염시킴
바이러스
특징
- 컴퓨터 바이러스는 다른 프로그램을 변형시키도록 하여 “감염(infect)”시키는 프로그램 단편이며, 실제로 자신을 변형시켜 실행 가능한 형태이기도 함
- 변형이란 원래 프로그램에 루틴을 주입해서 바이러스 프로그램의 복제를 만들어내는 것으로 다른 컨텐츠로 감염시킴
- 컴퓨터 바이러스는 자신을 완벽하게 복제할 수 있는 비법을 가진 명령 코드를 가지고 있음. 전형적으로 바이러스는 컴퓨터상의 프로그램이나 실행 콘텐츠의 전송자 속에 내장됨
세대별 분류
- 제 1세대 원시형 바이러스(Primitive Virus)
- 실력이 뛰어나지 않은 프로그래머가 만들어 프로그램 구조가 단순하고 분석이 상대적으로 쉬움
- 코드의 변형이나 변화 없이 고정된 크기를 가지며, 주로 기억장소에 상주해서 부트영역이나 파일을 감염시킴
- 제 2세대 암호화 바이러스(Encryption Virus)
- 백신 프로그램이 진단할 수 없도록 바이러스 프로그램의 일부 또는 대부분을 암호화시켜 저장함. 실행 시작점 부분에 위치하는 암호해독 데이터는 항상 일정함
- 제 3세대 은폐형 바이러스(Stealth Virus)
- 기억장소에 존재하면서 감염된 파일의 길이가 증가하지 않은 것처럼 보이게 하며, 백신 프로그램이 감염된 부분을 읽으려고 할 때 감염되기 전의 내용을 보여줘 바이러스가 없는 것처럼 백신 프로그램이나 사용자를 속임
- 제 4세대 갑옷형 바이러스(Armous Virus)
- 백신 프로그램 제작자에게 공격의 화살을 돌려 백신 프로그램으로부터 숨기기보다는 여러 단계의 암호화와 다양한 기법을 동원하여 바이러스 분석을 어렵게 하고 백신 프로그램 개발을 지연시킴
- 제 5세대 매크로 바이러스(Macro Virus)
- 매크로 기능이 있는 MS사 오피스 제품군 이외에 바지오(Visio), 오토캐드 등 VBS(Visual Basic Script)를 지원하는 다양한 프로그램에서 활동하기 때문에 현재 등장하고 있는 바이러스 중에서 가장 높은 비중을 차지하고 있음
매크로 바이러스
- 매크로 바이러스가 위협적인 이유
- 매크로 바이러스는 플랫폼과 무관하게 사용됨
- 대부분의 바이러스는 문서를 감염시키고 코드의 실행부분은 감염시키지 않음
- 매크로 바이러스는 쉽게 퍼짐. 가장 보편적인 방법은 전자메일
- 실행 파일(확장자가 COM이나 EXE)을 다룰 때보다 주의를 덜 하기 때문에 피해가 더 큼
- 매크로 바이러스 형태의 또 다른 희생양은 바로 Adobe사의 PDF 문서임. PDF문서는 자바스크립트 같은 다양한 형태의 스크립트를 포함할 수 있음
- 매크로 바이러스는 데이터 파일 중에 명령어를 실행시키는 MS 워드나 엑셀 등에 붙어서 그 파일이 열릴 때 실행됨. 매크로 바이러스는 매우 흔한 바이러스이지만, 대부분의 사용자는 데이터 파일은 바이러스에 의해 감염되지 않는다고 생각함
바이러스 방지책
안티 바이러스 방법
- 바이러스 위협에 대한 해결책 : 예방
- 세가지 수행 능력
- 탐지(Detection) : 일단 감염되면 바이러스가 있는지 판단하고 위치를 파악
- 식별(Identification) : 일단 탐지되면 프로그램을 감염시킨 특정 바이러스를 식별
- 제거(Removal) : 바이러스를 모든 감염된 시스템에서 제거하여 더 이상 퍼지지 않도록 함
안티 바이러스 필터링 방법(Antivirus Filtering Method)
- virus signature 방법
- 특정 바이러스만이 가진 유일한 형태의 signature를 찾아내는 방법, 이런 signature는 실행 가능한 코드의 경우에는 이진 스트링으로 표현되고, 스크립트 등의 언어로 된 바이러스에서는 명령어의 나열로 나타남.
- 현재까지 대부분의 안티바이러스 프로그램이 채택하고 있는 방법
- behavioral virus scanning 방법
- 바이러스가 수행 중에 어떤 행동을 보이는지를 추적하는 방법
- signature scanning 방법에서 불가능했던 새로운 바이러스와 웜에 대한 대처 능력을 가짐
바이러스 예방
- 신뢰성 있는 업체에서 구입한 상업용 소프트웨어 사용
- 안전하다고 생각될 때에만 첨부파일 열기
- 바이러스 스캐너를 이용하여 정기적으로 검사, 바이러스 스캐너 업데이트
- Windows Script Host, ActiveX, VBScript, JavaScript는 비활성화
- 현업의 업무를 심하게 방해하지 않는 수준에서 악성코드에 대응하는 보안 정책을 수립 및 적용
웜
개요
- 자신을 복제하여 네트워크 연결을 통해 컴퓨터에서 컴퓨터로 그 복제본을 전송. 한 컴퓨터에 도착하게 되면 웜은 복제를 시작하고 다시 확산하기 시작
- 확산과 더불어 웜은 보통 원하지 않는 기능을 수행. 전자메일 바이러스는 시스템에서 시스템으로 자신을 확산시키기 때문에 웜의 성격을 어느 정도 가지고 있다고 여겨짐
- 웜은 다른 시스템에 직접적인 영향을 미치지 않는다는 점에서 트로이목마와 구분되며, 다른 프로그램에 기생하지 않는다는 점에서 컴퓨터 바이러스와 구분됨(기억장소 내에서 자기 자신을 계속적으로 증식하는 프로그램)
웜 확산 모델
- 확산은 서서히 시작하는 단계, 빠른 확산 단계, 서서히 퍼지면서 종료 단계로 3단계임
- 감염된 호스트는 각각 두 개의 호스트를 감염시키기 때문에 감염된 호스트 수는 지수적으로 증가함
- 시간이 경과하면서, 감염된 호스트는 이미 감염된 호스트를 공격하는데 시간을 허비하기 때문에 감염 속도가 줄어듦
웜의 실행
- 웜의 전파된 시스템에서 시스템의 접근 권한을 확보하고 자신을 실행시키기 위해 버퍼 오버플로우, 포맷 스트링, SQL 삽입, PHP 삽입 등 공격 가능한 시스템의 취약점을 이용함
- 시스템의 취약점을 이용하여 관리자 몰래 시스템 접근 권한 확보에 필요한 코드를 실행한 후 접근 구너한이 확보되면 나머지 코드를 실행함으로써 의도된 기능 수행
예시) 시스템 접근 권한이 확보되면 웜을 백도어로 설치, DDoS 공격에 사용될 수 있는 봇 또는 좀비 프로그램 다운로드, 키로거와 같은 악성 소프트웨어 설치
웜 대응책
웜이 머신 안에 상주하게 되면, 안티 바이러스 소프트웨어는 감지 가능, 웜 확산이 이루어지면 네트워크 활동이 활발해지기 때문에, 네트워크 활동과 사용을 모니터링하면 웜에 대한 기본적인 방어형태를 갖출 수 있음
네트워크 기반 웜 방어
- 네트워크-기반 웜 방어는 웜 모니터링 소프트웨어임. 한 개 또는 상호 연결된 LAN집합체로 구성된 사이트의 엔터프라이즈 네트워크에서는 두 가지 유형의 모니터링 소프트웨어가 필요함
- 진입 모니터(Ingress monitors) : 엔터프라이즈 네트워크와 인터넷 사이의 경계에 위치, 경계 라우터나 외부 침입차단시스템이나 독립된 수동 모니터의 진입 필터링 소프트웨어의 일부
- 진출 모니터(Egress monitors) : 진출 모니터는 나가는 트래픽에서 스캐닝의 흔적이나 기타 의심스런 행동을 모니터리링해서 웹 공격의 출처를 잡아내도록 설계함
트로이목마(Trojan horse)
개요
- 자신의 실체를 드러내지 않으면서 마치 다른 프로그램의 한 유형인 것처럼 가장하여 활동하는 프로그램
- 트로이목마는 패치 파일, 안티-바이러스 소프트웨어, 소프트웨어 최신 버전 등과 같이 유용하거나 재미있는 소프트웨어로 가장하여 설치하게 함으로써 다른 시스템으로 침투하는 악성 소프트웨어임
- 자기 복제를 하지 않으며 다른 파일을 감염시키거나 변경시키지 않음. 하지만 트로이목마가 포함된 프로그램이 실행되는 순간, 시스템은 공격자에게 시스템을 통제할 수 있는 권한을 부여하게 됨
특징
- 데이터 파괴 : 프로그램이 겉보기에는 유용한 작업을 수행하는 것처럼 보이지만 몰래 사용자 파일을 지울 수 있을 가능성 배제 안 됨
- 대표적인 프로그램 Back Orifice는 1998년 9월 CDC라는 해커그룹에서 발표한 MS Win95/98/2000 관리자용 도구이며 해커들이 백도어로 이용하기에 적합하도록 개발되었음
트로이목마 대응책
- 신뢰할 수 없는 메이르이 첨부 파일, 파일 공유 사이트 등의 파일을 확인 없이 설치하지 않는 것이 중요함
- 웹 브라우저 등의 취약점을 보완하는 패치를 신속하게 적용하여 최신 상태의 시스템을 유지하고, 안티-트로이목마 도구를 사용
스파이웨어(Spyware)
- 트로이목마와 비슷한 종류로 스파이웨어가 있음. 스파이웨어는 민감한 정보를 수집하여 주기적으로 원격지의 특정한 서버에 보내는 프로그램으로, 대상 컴퓨터에 은밀하게 설치되는 악성 소프트웨어 유형임
- 스파이와 소프트웨어의 합성어로, 본래는 어떤 사람이나 조직에 관한 정보를 수집하는데 도움 주는 기술을 뜻함
- 수집된 데이터는 신원 도용, 스패밍, 사기 등과 같은 악의적 활동을 위해 사용됨.
- 온라인 브라우징 습관에 대한 정보를 수집하여, 스패머가 표적 광고를 보내는데 활용되기도 함
기타 악성 소프트웨어
- 기생 바이러스 : 프로그램에 기생해서 자신의 복제를 다른 프로그램으로 확산시킴
- 웜 : 자신의 복제를 다른 컴퓨터로 확산시킨
- 논리폭탄 : 조건이 충족되면 트리거 작동
- 트로이목마 : 생각지 못한 추가적인 기능을 포함하고 있는 프로그램
- 백도어(트랩도어) : 기능에 허가받지 않은 접근을 허용하는 프로그램의 변형
- 모바일 코드 : 스크립트, 매크로나 다른 이동성 명령어 같은 소프트웨어로, 서로 성격이 다른 많은 플랫폼으로 옮겨서 실행될 수 있고 똑같은 기능을 수행
- Exploit : 하나 혹은 여러 개의 취약점을 노리는 코드, 공격할 때 타이밍 문제나 반복적인 작업을 피하기 위해 작성한 자동화된 스크립트
- Downloaders : 공격을 받는 컴퓨터에 다른 아이템을 설치하는 프로그램, 보통 다운로더는 전자우편을 통해 전달됨
- Auto-rooter : 악성 해커 도구로 새로운 시스템에 원격으로 침입할 때 사용하는 툴
- Kit(virus generator) : 바이러스를 자동으로 생성하는 도구모음
- 스패머 프로그램 : 원하지 않는 대량의 전자우편물을 보내는 데 사용
- 플러더(Flooders / DoS Clent) : 네트워크 컴퓨터 시스템에 대량의 자료를 보내어 서비스 거부 공격을 감행하는데 사용하는 코드
- Keyloggers : 피해를 입은 시스템의 키 입력을 갈취
- Rootkit : ;컴퓨터 시스템에 침입 후 루트 수준의 접근허락을 얻기 위해 사용하는 해커 도구모음
- 공격 킷(Attack kit) : 다양한 번식 방법과 payload기술을 사용하는 새로운 악성코드를 자동으로 만들어 주는 툴의 모음
- 좀비 : 감염된 컴퓨터에서 활성화되는 프로그램으로 다른 컴퓨터에 대한 공격을 시작하는데 사용됨
- 스파이웨어 : 컴퓨터에서 정보를 수집해서 다른 시스템으로 전송하는 소프트웨어
- 애드워어 : 소프트웨어에 내장된 광고, 감염시 팝업 광고가 뜨거나 브라우저가 광고 사이트로 연결함
- 크라임웨어 : 온라인을 통해 불법적인 행동을 하기 위해 만들어진 프로그램
- 브라우저 하이재커 : 브라우저를 하이재킹하여 홈페이지와 검색 페이지, 툴바를 통제하고 조작하는 프로그램
- 다이얼러 : 모뎀이 특정번호로 연결되도록 하여 전화를 걸 때마다 공격자가 수익을 얻게 만드는 프로그램
- 조크 : 실제 바이러스는 아니지만 사용자에게 심리적인 위협이나 불안을 조장하는 프로그램
- Hoax : 남을 속이거나 장난을 목적으로 퍼트리는 가짜 바이러스로, 일반적으로 허위 바이러스 경고 메일 형태
2. 인터넷 활용 보안
하이퍼텍스트 전송 프토로콜(HTTP, Hypertext Transfer Protocol)
개요
- 하이퍼텍스트 전송 프로토콜은 웹에서 웹페이지를 가져오기 위해 어떻게 클라이언트-서버 프로그램이 작성될 수 있는지를 정의하는데 사용됨
- HTTP 클라이언트는 요청을 하고 HTTP 서버는 응답을 함. 서버는 포트 80번을 사용하고 클라이언트는 임시 포트 번호를 사용함
영속성
- 개요
- HTTP 버전 1.0은 비영속적 연결(nonpersistent connection)을 상;ㅛㅇ하였으나, 버전 1.1은 영속적 연결을 기본값으로 하는데 이는 사용자에 의해 변경 가능함
- 비영속적 연결
- 비영속적 연결에서는 각 요구/응답에 대해 하나의 TCP 연결이 만들어짐.
- 과정
- 클라이언트가 TCP 연결을 열고 요청을 보낸다.
- 서버는 응답을 보내고 연결을 닫는다.
- 클라이언트는 end-of-file 표시가 나타날 때까지 데이터를 읽고 그 후 연결을 닫는다.
- 비영속적 연결은 서버에 큰 오버헤드를 부과하게 되는데, 이는 서버가 연결을 열때마다 다른 버퍼들을 필요로 하기 때문임
- 영속적 연결
- 영속적 연결에서 서버는 응답을 전송한 후에 차후의 요청을 위해 연결을 열어 놓은 상태로 유지함. 서버는 클라이언트로부터 요청을 받거나 타임아웃이 되면 연결을 닫을 수 있음
- HTTP/1.1 버전부터 Connection 헤더에 Keep-Alive 옵션이 추가되었음. 이는 TCP 연결 상태를 웹 서버 설정에 따라 일정시간 지속시키는 옵션으로 한 번의 연결 이후에 요청/응답을 반복할 수 있음
HTTP 트랜잭션
- 개요
- HTTP는 TCP의 서비스를 이용하지만, HTTP 자체는 상태가 존재하지 않는(stateless) 프로토콜임. → 클라이언트에 대한 정보가 서버에 저장되어 있지 않음
- 클라이언트는 요청 메세지를 보내어 트랜잭션을 초기화하고 서버는 응답을 보내어 대답함
- 요청 메시지
- 요청 라인
- 요청 메시지의 첫 줄은 요청 라인(request line)이라 부르며 문자 구분 기호에 의해 분리된 세 개의 필드가 존재함
- 세 개의 필드를 각각 메소드, URL, 버전이라 부르며 공백 문자로 구분되어야 함. 메소드 필드는 요청 유형(request type)을 정의함
- 메소드
- 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 : 서버에 프락시 기능을 요청할 때 사용됨
- GET 방식
- 요청 헤더 라인
- 요청 라인 이후 0개 이상의 요청 헤더라인을 가질 수 있음. 각 헤더 라인은 추가적인 정보를 클라이언트에서 서버로 보냄.
- ex. 클라이언트는 특별한 형태로 보내지는 문서를 요청할 수 있음. 각 헤더 라인은 헤더 이름, 콜론, 스페이스, 헤더 값을 가짐.
- 주요 요청 헤더 정보
- Host : 요청의 대상이 되는 서버의 도메인명/호스트명과 포트 정보
- User-Agent : 요청 클라이언트 애플리케이션/OS 정보
- Referer : 현재 요청 URL 정보를 담고 있는 이전 문서의 URL 정보
- 빈 라인(Empty Line)
- 헤더의 끝을 의미하는 개행으로 헤더의 개수가 가변이기 때문에 빈 라인을 통해 그 끝을 식별함
- 본체
- 보통은 메소드가 PUT이나 POST일 때 송신될 주석이나 웹사이트에 게시될 파일을 담고 있음. GET 방식의 경우에는 요청 데이터가 없기 때문에 메시지 바디가 없음
- 요청 라인
- 응답 메시지
- 상태 라인
- 응답 메시지의 첫 줄은 상태 라인이라 부름. 첫 필드는 HTTP 프로토콜의 버전을 의미하고 현재 1.1임
- 상태 코드 필드는 요청의 상태를 정의함
- 응답 헤더 라인
- 상태 라인 이후 0개 이상의 응답 헤더 라인을 가질 수 있음. 각 헤더 라인은 서버에서 클라이언트로 추가적인 정보를 보냄
- ex. 송신자는 문서에 대한 부가 정보를 보낼 수 있음. 각 헤더 라인은 헤더 이름과 콜론, 스페이스 그리고 헤더 값을 가지고 있음.
- 주요 응답 헤더 정보
- Content-Type : 메시지 바디의 데이터 형식
- Content-Length : 메시지 바디의 전체 크기(단위 : 바이트)
- 빈 라인(Empty Line)
- 헤더의 끝을 의미하는 개행. 헤더의 개수가 가변이기 때문에 빈 라인을 통해 그 끝을 식별함
- 본체
- 서버에서 클라이언트로 전송되는 문서를 포함함. 응답이 오류 메시지가 아니라면 본체가 존재함
- 상태 라인
쿠키(Cookie)
개요
- 쿠키는 1994년 넷스케이프에서 처음 사용한 기술로 사용자들이 웹 사이트를 편리하게 이용할 수 있도록 하기 위한 목적으로 만들어짐. 최근에는 많은 웹사이트가 이 쿠키를 이용하여 사용자의 정보를 수집함
- 쿠키는 사용자가 인터넷 웹 사이트에 방문할 때 생기는 4KB 이하의 파일을 말함
- 쿠키에는 사용자와 웹 사이트를 연결해 주는 정보가 담겨져 있기 때문에 나중에 클라이언트가 해당 사이트에 접속하려고 할 때 이 쿠키 내용을 이용하여 클라이언트의 신분을 알 수 있게 해줌
쿠키를 이용한 통신
- 1단계
- 사용자가 웹 사이트에 방문하면 웹 사이트는 사용자의 컴퓨터에 쿠키를 만든다.
- 2단계아이디와 비밀번호를 사용한 경우에는 그 정보가 쿠키에 남아 있기 때문에 아이디와 비밀번호를 다시 입력하지 않아도 로그인 할 수 있음
- 사용자가 웹 서버에 접속할 때 사용자 컴퓨터에 있는 쿠키를 웹 서버로 전송하는 단계
쿠키의 일반적 용도
- 사이트 개인화
- 장바구니 시스템
- 웹 사이트 이용방식 추적
- 타킷 마케팅
쿠키의 구조
- 개요서버는 응답에 Set-Cookie 헤더를 포함시키는 방식으로 쿠키 설정쿠키의 기본 구조 : Set-Cookie: name=value; expires=[Date]; domain=[Domain]; path=[Path]; [secure]
- 이름-값 쌍과 선택적인 애튜리뷰트로 구성됨
- 쿠키는 4개의 속성과 하나의 데이터를 가진 구조체
- 유효기간유효 기간이 지나면 쿠키 데이터는 소멸됨. 실제로 파일이 지워지지 않더라도 데이터를 브라우저에서 읽을 수 없음
- 쿠키가 생성되면 기본적으로 브라우저가 종료될 때까지는 쿠키의 데이터를 사용할 수 있음. 유효 기간을 지정하면 브라우저가 종료되어도 지정한 기간 동안은 쿠키 데이터를 읽고 쓰는 것이 가능
- 패스
- 쿠키는 쿠키 데이터를 생성한 웹 페이지에서만 그 데이터를 읽을 수 있음. Path항목을 지정해주면 해당 Path 이하에서는 쿠키 데이터 공유가 가능함
- 도메인
- 도메인 속성은 패스 속성을 확장한 것으로 도메인 단위에서 쿠키 데이터를 읽고 쓰는 권한 설정이 가능함
쿠키에 관한 오해
- 바이러스 전파
- 사용자 컴퓨터에 피해 입히기
- 다른 웹사이트에서 읽기
쿠키 보안 취약점
- XSS(Cross-Site Scripting) 공격
- 웹 사이트를 만들기 위해서 HTML언어로 페이지를 구성해야 함. HTML은 정적인 페이지 생성만 가능함
- 게시판 같은 서버와 통신을 하는 동적 페이지 생성을 위해서는 서버사이드 스크립트 언어인 PHP, JSP, ASP 등 CGI(Common Gateway Interface) 프로그램을 이용해야 함
- 위 프로그램은 웹 서버에서 실행되어, 사용자에게 돌려주는 역할을 함. 반대로 사용자의 컴퓨터에서 실행되는 언어인 자바 스크립트나 비주얼베이직 스크립트 등이 있음
- XSS 공격은 자바스크립트가 사용자의 컴퓨터에서 실행된다는 점을 이용한 공격임. 자바스크립트에서 “document.cookie”라는 명령어는 사이트에서 쿠키값을 활용하여 다양한 서비스를 제공할 수 있도록 하는 역할을 하지만, 공격자들은 쿠키값을 유출하기 위한 목적으로도 사용함
- 스니핑(Sniffing)공격을 이용
- 쿠키가 동작하는 과정은 두 가지로 구분되지만, 두 가지 모두 클라이언트에 저장되는 쿠키값이 네트워크를 통해 전송되는 것을 알 수 있음
- 이때 쿠키 값을 따로 암호화하지 않고 전송한다면 네트워크 스니핑 공격을 통해 쿠키값 탈취가 가능함
- 공용 PC에서 쿠키값 유출
- 쿠키 파일은 사용자의 하드디스크에 저장됨
- 공격자는 공용 PC의 하드디스크에 저장된 쿠키 정보를 쉽게 얻을 수 있음
HTTP 쿠키 관련 보안 속성
- httpOnly 속성
- Set-Cookie 응답 헤더에 설정하는 속성으로 클라이언트에서 스크립트를 통해 해당 쿠키에 접근하는 것을 차단해주는 속성
- 일반적으로 세션 ID를 저장하고 있는 세션 쿠키를 탈취하기 위한 XSS(Cross Site Script)공격에 대응하기 위해 사용
- secure 속성
- Set-Cookie 응답 헤더에 설정하는 속성으로 클라이언트에서 HTTPS(SSL/TLS)통신일 경우에만 해당 쿠키를 전송하고 HTTP통신일 경우에는 전송하지 않는 속성임
- 전송구간 암호화를 통해 평문 쿠키가 전송 과정에서 노출되는 것을 방지할 수 있음. 이는 쿠키에 대한 기밀성을 보장하기 위한 목적으로 사용함
쿠키 관리를 통해 온라인 정보보호 정책 강화하기
- 쿠키는 지속 시간에 따라 영속 쿠키와 세션 쿠키로 구분됨
- 영속 쿠키 : 클라이언트에 파일형태로 지속해서(또는 일정 기간) 존재하는 쿠키로 쿠키에 설정된 사이트 요청 시마다 Cookie 요청헤더에 쿠키 정보를 담아서 전달함
- 세션 쿠키 : 클라이언트 메모리상에 세션이 유지되는 동안 존재하는 쿠키로 세션이 종료되면 소멸됨
- 보안 취약점
- 쿠키 방식은 클라이언트 상태정보를 클라이언트에 저장하고 HTTP 요청/응답헤더에 담아서 전달하기 때문에 해킹 및 스니핑 공격에 의한 변조와 외부 노출에 취약한 특성이 있음
- 중요정보(개인정보, 신용정보, 비밀번호 등)를 저장할 경우에는 “쿠키 방식”이 아닌 서버에 상태정보를 저장하는 “세션 방식”이 안전하며 부득이하게 쿠키를 사용해야 할 경우에는 암호화를 적용해야 함
세션
개요
- 개별 클라이언트 상태정보를 서버에 저장하는 기술
- 서버는 개별 클라이언트 세션을 식별하기 위해 세션 ID를 부여하고 세션 ID는 세션 쿠키를 이용하여 클라이언트와 서버 간 주고 받음
- 클라이언트 상태정보를 서버에 저장하기 때문에 쿠키 방식에 비해 보안상 안전하다는 장점이 있음
- 만약 공격자가 정상적인 사용자의 세션 ID 정보를 탈취한다면 정상 사용자로 위장한 접근이 가능함. 이런공격을 HTTP 세션 하이재킹이라고 함
안전한 세션 ID 관리
- 세션 ID 생성
- 세션 ID는 안전한 서버에서 생성 후 사용되어야 함
- 세션 ID는 최소 128비트의 길이로 생성되어야 하며, 안전한 난수 알고리즘을 적용하여 예측이 불가능한 값이 사용되어야 함
- 세션 ID 사용
- URL Rewrite 기능을 사용하는 경우 세션 ID가 URL에 노출될 수 있으므로, 사용하지 않도록 설계해야 함
- 세션 ID 폐기
- 장기간 접속되어 있는 경우 세션 ID의 노출위험이 커지므로, 일정시간 주기적으로 세션 ID를 재할당 하도록 설계해야 함
웹브라우저 보안
영역 추가와 제거하기
- 인터넷 익스플로러에 대한 보안을 구현할 때 사이트에 따라 서로 다른 보안 요구사항이 필요할 수 있음
- 여러 유형의 사이트를 관리하기 위해 다양한 보안영역을 지우너하고 각 영역에 대한 보안 요구사항을 사용자가 정의할 수 있게 함
- 사용 가능한 영역
- 인터넷 : 다른 세 가지 영역에 포함되지 않은 웹사이트를 위한 영역(디폴트 약간 높음)
- 로컬 인트라넷 : 사용자의 컴퓨터와 네트워크(인트라넷)사엥 있는 웹사이트를 위한 영역(디폴트 낮음)
- 신뢰할 수 있는 사이트 : 사용자가 안전한 콘텐츠를 갖고 있다고 신뢰하는 페이지를 설정하는 웹사이트 영역(디폴트 낮음(보통))
- 제한된 사이트 : 어떤 이유에서든 사용자가 신뢰할 수 없거나 보안 페이지로 설정할 수 없는 웹사이트 영역(디폴트 높음)
'보안' 카테고리의 다른 글
[정보보안기사] 시스템보안 | 윈도우 서버 보안 (1) | 2024.07.07 |
---|---|
[정보보안기사] 시스템보안 | 보안 운영체제 (0) | 2024.06.21 |
CVE & CWE 차이점 (0) | 2023.08.11 |