Chapter 16 Security

작성자 작성일
dha 2022.07.08

Overview

Security

  • 컴퓨터 자원의 무결성(integrity)이 보존되는 정도
  • 보안에는 무단 접근, 악의적 파괴 또는 변경 등이 발생하지 않도록 컴퓨터 자원을 보호하는 것
  • 컴퓨터 자원에는 데이터 및 코드 뿐만 아니라, CPU, 메모리, 보조저장장치, 3차 저장장치 및 네트워킹이 포함된다.

Protection

  • 컴퓨터 시스템에 의해 정의된 자원에 대한 프로세스 또는 사용자 접근을 제어하는 기법

Chapter Objectives

  • 보안 상의 문제점들과 공격에 대해 논의한다.
  • 암호화, 인증, 해싱의 근본 원리를 설명한다.
  • 연산에 있어서 암호 작성법의 사용을 검토한다.
  • 보안 상의 공격에 대한 다양한 대응책을 논의한다.

16. 1 The Security Problem

  • 컴퓨터 자원 보안
    • 시스템의 보안 위반은 의도적인 것과 우연한 것으로 분류된다.
    • 우리는 이를 보호하거나 공격을 감지하는 메커니즘이 필요하다.
    • 이를 위해 암호화가 중요한 역할을 한다.
  • 보안 침해
    • 위협(threat): 보안 위반에 대한 잠재적인 가능성
    • 공격(attack): 보안을 깨뜨리기 위한 시도
  • 보안 침해의 종류
    • 기밀성 침해(Breach of confidentiality)
      • 인증 받지 않고 비밀 자료에 무단 접근하는 것(신용 카드 정보, 신원 정보, 배포 전 비공개 자료 등)
    • 무결성 침해(Breach of integrity)
      • 인증 받지 않고 자료를 변경하는 것을 수반한다. 이는 자료를 제공받는 측에서 잘못된 정보를 받을 수 있으며, 상업용 또는 오픈 소스 프로그램의 코드가 변경될 수 있다.
    • 가용성 침해(Breach of availability)
      • 인증 받지 않고 자료를 파괴하는 것을 수반한다. 경제적 이익을 얻기 보다 시스템을 크게 망가뜨리는 것을 목적으로 한다.
    • 서비스 가로채기(Theft of service)
      • 인증 받지 않고 자료를 사용하는 것을 수반한다. 침입자가 파일 서버 시스템에 데몬을 설치할 수 있다.(daemon: 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 작업을 하는 프로그램)
    • 서비스 거부(Denial of service)
      • DOS 공격은 시스템의 정당한 사용을 막는 것을 수반하며 우연히 발생하기도 한다.
      • 최초의 DOS 공격은 기존 인터넷 웜이 버그의 빠른 확산을 지연시키지 못하자 DOS 공격으로 변했다.

    공격자는 보안 침해를 위해 여러 표준적인 방법을 사용한다.

    • 가장(masquerading) 공격: 다른 사람(host 또는 다른 유저)인 것 처럼 가장한다. 가장에 의한 공격은 신원 확인 인증 과정을 침해하여 허락되지 않는 권한을 얻는다.
    • 되풀이 공격(replay attack): 정상적인 데이터를 악의적인 의도나 부정한 방식으로 다시 보내는 것
    • 중간자 공격(man-in-the-middle): 통신 상 데이터 흐름 중앙에 공격자가 자리 잡고 수신자에게는 송신자인 것 처럼, 송신자에게는 수신자인 것 처럼 가장한다. 네트워크 통신에서 중간자 공격은 활성화된 통신 세션을 가로채는 세션 하이재킹(session hijacking)이 선행된다.
  • 보안의 네 가지 수준 시스템을 보호하기 위해서는 네 가지 수준의 보안 대책을 수립해야 한다.
    • Physical
      • 컴퓨터 시스템을 포함하는 공간은 침입자가 들어가지 못하도록 물리적으로 보호해야한다.
    • Network
      • 대부분의 최신 컴퓨터 시스템은 네트워크로 이어져있다. 네트워크를 통한 데이터를 가로채는 것 역시 컴퓨터 침입과 마찬가지로 해로울 수 있으며, 사용자의 시스템 사용도 및 신뢰도를 떨어뜨릴 수 있다.
    • Operation System
      • 운영체제 및 기본 제공 응용 프로그램은 많은 취약점을 가진 거대한 코드베이스를 구성한다. 따라서 운영체제는 지속적인 패치를 통해 최신 상태로 유지되고 공격 영역을 줄이고 침입하지 못하도록 강화되어야 한다.
    • Application
      • 써드 파티 응용 프로그램(특히, 중요한 권한을 가지고 있는)은 위험을 가지고 있다. 특정 프로그램은 본질적으로 악의적이지만, 무해한 프로그램도 보안 버그가 포함되어 있을 수 있다.

    이 4계층 보안 모델은 아래 사진과 같다.

    이는 체인과 유사한데, 어느 한 계층의 취약점으로 인해 시스템 전체가 손상될 수 있다.

    Screen Shot 2022-07-08 at 4.33.03 PM.png

16.2 Program Threats

16. 2 .1 Malware

악성코드는 컴퓨터 시스템을 악용, 비활성화 또는 손상시키도록 설계된 소프트웨어이다.

이러한 활동을 수행하는 방식은 여러가지가 있는데, 아래와 같다.

  • 트로이 목마(Trojan horse) 명시된 기능을 수행하는 대신 비밀스럽게 또는 악의적인 방식으로 작동하는 프로그램 (연락처 또는 메세지에 접근하여 서버로 몰래 전송하는 SNS 모바일 앱 등)
    • 트로이 노새(Trojan mule) 트로이 목마의 고전적인 변형으로 로그인 프로그램을 흉내낸다.
    • 스파이웨어(Spyware) 사용자의 동의 없이 설치되어 컴퓨터 정보를 수집거나 의도하지 않은 동작을 한다. (광고를 다운로드 해서 보여주거나, 특정 사이트를 계속해서 띄워주는 등)
  • 랜섬웨어(Ransomware) 사용자의 컴퓨터를 장악하거나 데이터를 암호화하여 정상적인 작동을 위한 대가로 금품을 요구하는 유형의 바이러스
  • 트랩도어(또는 백도어) 프로그램이나 시스템 설계자가 소프트웨어에 자신만 사용할 수 있는 약점을 남기는 방식 트랩 도어는 특정 논리적인 조건에서만 작동하도록 설정할 수 있는데, 이 경우 논리 폭탄이라 부른다.

16. 2. 2 Code Injection

대부분의 소프트웨어는 코드 인젝션 공격으로 인하여 보안에 심각한 위협을 수반할 수 있다.

코드 주입 공격은 무해한 소프트웨어도 악용하여 공격자가 코드를 장악하고 기존 코드 흐름을 바꾸거나 코드를 추가하여 취약점을 추가할 수 있다.

16. 2. 3 Viruses and Worms

바이러스는 공격자의 의도를 통해 사용하지만, 웜은 네트워크를 사용하여 인간의 도움 없이 복제한다.

바이러스는 프로그램에 내장된 코드 조각으로 자신을 복제하고 다른 프로그램을 감염시키도록 만들어진 프로그램이다.

바이러스는 파일을 변경하거나 파괴하고 시스템 크래시를 유발하고 프로그램 오동작등을 일으켜 시스템을 망칠 수 있다.

다른 침입 공격과 마찬가지로 컴퓨터 구조, 운영체제, 응용 프로그램에 매우 특화되어 있다.

바이러스는 일반적으로 스팸 이메일과 피싱 공격 또는 사용자가 인터넷에서 다운로드하는 프로그램에 포함되어 확산된다.

16. 3 System and Network Threats

시스템의 범세계적(네트워크) 연결은 전 세계의 공격에 취약하게 만든다.

운영체제가 더 개방적일 수록, 더 많은 서비스 및 기능을 허용할 때 악용할 버그가 많아지는데, 운영체제는 점차 안전해지려고 노력하고 있다.

모든 해커는 트래픽 패턴, 비정상 패킷 유형 등으로 흔적을 남기는데, 이러한 흔적을 숨기기 위해 좀비 시스템에서 공격을 시작한다.

좀비 시스템은 해커에 의해 손상된 장치로 소유주가 모르게 악의적인 목적으로 사용된다.

16. 3. 1 Network Traffic Attack

  • 스니핑(sniffing): 공격자는 수동적인 상태를 유지하면서 네트워크 트래픽을 가로채는 방식
  • 스푸핑(spoofing): 공격자가 당사자 중 하나로 위장하거나 활동적인 중간자가 되어 두 피어 간의 트랜잭션을 가로채거나 수정하는 방식

16. 3. 2 Denial of Service(DOS)

위에서 설명한 것과 같이 서비스 거부 공격은 서비스 자원을 훔치는 것이 아니라 서비스 사용을 불가능하게 한다.

이는 정당한 사용을 막는 공격이 시스템 또는 시설을 뚫고 들어가는 것보다 쉽기 때문이다.

서비스 거부 공격은 주로 네트워크 기반으로 이루어지면 두 가지로 분류할 수 있다.

  1. 너무 많은 시스템 자원을 사용하여 필요한 작업이 실질적으로 수행되지 못하는 것
  2. 한 설비의 네트워크를 못 쓰게 한다.

일반적으로 서비스 거부 공격을 예방하는 것은 불가능한데, 공격 방식이 시스템의 정상 연산과 동일한 메커니즘을 사용하기 때문이다. 또한 방지 및 탐지가 더 어려운 분산 서비스 공격도 있다.

이 공격은 여러 좀비들에 의해 구동되어 하나의 목표를 향해 공격한다.

16. 3. 3 Port Scanning

포트 스캐닝 자체는 공격이 아닌 시스템의 취약성을 탐지하는 수단이다.

(보안 담당자도 필요하지 않거나 실행 중인 서비스를 감지하기 위해 포트 스캐닝을 사용한다.)

16. 4 Cryptography as a Security Tool

컴퓨터가 격리되어 있는 경우, 들어오고 나가는 데이터에 대해 검증이 가능하다.

하지만 네트워크와 연결된 컴퓨터의 경우, 네트워크 전체 경로를 신뢰할 수 있도록 구축하는 것은 거의 불가능하다.

따라서 네트워크 신뢰성과 구분된 대안이 필요한데, 그것이 바로 암호화이다.

암호화는 메세지의 송/수신자를 제한하는데 사용되며, 현대 암호 기법은 컴퓨터들이 key를 가지고 메세지가 어떤 특정 키를 소유하는 컴퓨터에 의해 생성되었는 지 검증할 수 있게 해준다.

Screen Shot 2022-07-08 at 5.23.57 PM.png

16. 4. 1 Encryption

현대 암호화의 원리와 알고리즘을 살펴보는데, 하나의 암호화 알고리즘은 아래 요소들로 구성되어 있다.

Screen Shot 2022-07-08 at 5.16.29 PM.png

  • K - 키의 집합, M - 메세지의 집합, C - 암호문의 집합
  • E : K → (M → C): E는 메세지(M)으로부터 암호문(C)를 생성하는 함수이다.
  • D : K → (C → M): D는 암호문(C)으로부터 메세지(M)를 생성하는 함수이다.

16. 4. 1. 1 Symmetric Encryption

대칭 암호화 알고리즘에서는 암호화 및 복호화에 같은 키가 사용된다.

따라서 k의 비밀이 반드시 유지되어야 한다.

키 교환은 서로 사이에서 직접 전달하거나 믿을 수 있는 3자를 통해 일어날 수 있다.

  • 일반적인 대칭 암호화 알고리즘
    • DES(data encryption standard): DES는 64비트의 값과 56비트의 키를 가지고 변환을 수행한다. DES는 한번에 한 블록의 비트들에 대해 작동하기 때문에 블록 암호화로 알려져있다.

      이제 DES는 안전하지 않은 것으로 간주되는데, 많지 않은 계산 자원으로 키를 찾기 위해 모든 경우를 시험해볼 수 있기 때문이다.

    • AES(advanced encryption standard): DES를 대체하기 위한 새로운 암호화 알고리즘으로 128, 192, 256비트의 키를 가질 수 있고 128비트 블록에 대해 작동한다.

      이러한 블록 기법은 안전한 암호화 기법이 아니고, 자신이 요구하는 블록보다 긴 메세지를 직접 처리하지 못한다.

    • 스트림 암호 기법: 한 블록이 아닌 바이트나 비트 스트림에 대하여 복호화를 수행 통신 길이가 길어서 블록 암호 기법을 사용하면 느려질 때 유용하다.

      유사 난수 비트 생성기의 입력으로 key를 받아서 출력되는 키스트림으로 평문을 XOR 연산하여 암호화 한다.

      AES 기반 암호 제품군에는 스트림 암호가 포함되며 가장 일반적으로 사용된다.

16. 4. 1. 2 Asymmetric Encryption

비대칭 암호화에서는 암호화와 복호화 키가 다르다.

통신을 받고자 하는 주체가 두 개의 키를 생성하며 그 중 하나(공개키)를 누구든 원하는 사람에게 공개한다.

송신자는 누구든 그 키를 사용하여 통신 내용을 암호화하고, 그 내용은 키 생성자만이 복호화할 수 있다.

  • RSA: 가장 널리 사용되는 비대칭 알고리즘

    Screen Shot 2022-07-08 at 5.32.23 PM.png

    예를 들어 통장을 생각해보면 공개 키는 계좌번호이고, 비밀번호가 키라고 하면 계좌번호는 공개되어도 상관없지만, 비밀번호는 공개되면 안된다.

    RSA 방식은 소인수분해 연산을 통해 해석할 수 있는데, 현재까지는 이 연산을 하는데 걸리는 시간이 아주 크기 때문에 안전하다고 판단한다.

16. 4. 1. 3 Authentication

암호화는 메세지의 수신자 집합을 제한하는 방법을 제공하는 것이다.

하지만, 인증은 잠재적 송신자 집합을 제한하는 것으로 인증은 암호화를 보완한다.

대칭 키를 사용하는 인증 알고리즘은 다음의 구성요소로 구성된다.

Screen Shot 2022-07-08 at 5.36.14 PM.png

  • K: 키 값의 집합, M: 메세지의 집합, A: 인증자의 집합
  • S : K → (M → A): 모든 메세지로부터 인증자를 생성하는 함수
  • V : K → (M X A → {true, false}): 메세지의 인증자를 검증하는 함수

해시 함수는 작고 고정된 크기의 메세지의 요약본이나 해시 값 같은 데이터 블록을 만든다.

일반적인 메세지 요약 함수는 128비트 해시를 생성하는 MD5와 160비트 해시를 만드는 SHA-1가 포함된다.

예를 들어, 해시 함수(H(m))은 메세지와 함께 보낼 수 있는데, 누군가 m을 수정하여 재계산 할 수 있으니 H(m)을 받아서 인증해야한다.

이를 인증하는 방식에는 두 가지가 있다.

  • MAC(메세지 인증 코드)는 비밀 키를 이용하여 메세지의 암호화 된 체크섬이 생성된다. MAC은 짧은 값들을 안전하게 인증하는 기법이다.
  • Digital Signature Algorithm(디지털 서명 알고리즘)

    이 알고리즘을 따라 생성된 인증자는 디지털 서명이라 불리며, 받은 사람이 디지털 서명으로 데이터를 검증하여 같은 지 확인한다.

    이미 생성된 디지털 서명을 도출하여 만드는 것은 거의 불가능하기 때문에 검증이 가능하다.

16. 4. 2 Implementation of Cryptography

네트워크 프로토콜은 계층으로 조직되는데, 각 계층은 아래 계층의 클라이언트처럼 행동한다.

이러한 OSI 7계층에서 어느 계층이든 삽입할 수 있는데, 예를 들어 TLS는 트랜스포트 계층에서 보안을 제공한다.

  • TLS(Transport Layer Security)는 두 컴퓨터 간에 안전하게 통신할 수 있게 하는 암호 프로토콜이다.

    이 프로토콜은 웹 서버와 웹 브라우저가 안전하게 통신하는 표준 프로토콜로 현대 인터넷에서 가장 널리 사용되는 암호 프로토콜이다.

16. 5 Implementing Security Defenses

16. 5. 1 Security Policy

보안을 증대시키기 위한 첫 번째 단계는 보안 정책을 갖는 것이다.

정책은 여러가지가 있을 수 있지만 일반적으로 보호되어야 할 것이 무엇인지에 대한 기술을 포함한다.

예를 들어 밖에서 접근 가능한 코드는 사용전 검토하거나, 사용자 암호 공유를 막거나, 6개월에 한 번씩 포트 스캔을 해야 한다는 것 등이 있다.

정책은 안전하고 잘 지켜지는 지를 보장하기 위해 정기적으로 갱신되고 점검되어야 한다.

16. 5. 2 Vulnerability Assessment

보안 정책이 구현 되었는 지 확인하는 방법은 취약점을 평가하는 것이다.

대부분의 취약점 평가는 알려진 취약성에 대해 검사를 수행하는 침입 테스트이다.

취약점 스캔은 컴퓨터에 주는 영향을 최소화하도록 한가할 때 하며, 서비스 시스템보다 테스트 시스템에서 실행된다.

취약점 스캔은 아래와 같은 여러가지 측면을 검사할 수 있다.

Screen Shot 2022-07-08 at 6.09.24 PM.png

16. 5. 3 Intrusion Prevention

침입 방지는 컴퓨터 시스템 내에 들어가려고 시도했거나 성공한 침입을 탐지하고 적절한 대응을 하는 것이다.

침입 방지는 아래와 같은 다양한 종류의 기술을 포함한다.

  • 탐지가 일어나는 시간: 실시간인가 아니면 침입한 후인가?
  • 침입활동을 탐지하기 위해 조사되는 입력의 유형들
  • 대응 능력의 범위
    • 간단한 방식: 관리자 경고, 침입 활동에 참여하는 프로세스를 종료하는 등의 잠재적인 침입 활동 중단
    • 복잡한 방식: 공격자에게 허니팟을 제공하여 거짓 자원으로 공격자를 감시하고 정보를 얻음

이러한 다양성으로 다양한 범위의 침입 방지 시스템(IPS)로 구축되었다.

오늘 날의 자동 IPS들은 두 가지 방식 중 하나를 선택하여 시스템을 구축하는데,

  • 서명 기반 탐지: 시스템 입력 또는 네트워크 트래픽에서 침입을 의미하며 알려진 특정 행위 패턴을 검사한다.
  • 이상 탐지: 컴퓨터 시스템 내에서 비정상적인 행위를 탐지하는 테크닉을 사용 모든 비정상적인 시스템이 공격을 의미하는 것은 아니지만, 공격은 종종 비정상적인 행동을 유발한다.

이러한 접근 방식으로 인해 IPS들은 매우 다른 특성을 가지는데, 예를 들어 이상 탐지는 예전에 알려지지 않았던 공격 방법(zero-day 공격들)을 탐지할 수 있다. 서명 기반 탐지 방법으로 사용될 때, 새로운 침입 방법은 서명 기반 탐지 시스템을 피하기 쉽다.

그렇다고 이상 탐지 기법이 무조건 좋은 것은 아니다.

이상 탐지 기법은 정상적인 시스템 작동을 가정하고 탐지함으로 이미 침입된 시스템을 벤치마킹한다면 침입 활동 또한 정상적인 범주에 포함된다.

16. 5. 4 Virus Protection

위에서 살펴본 것과 같이 바이러스는 시스템을 망치고 파괴하는데, 바이러스로부터의 보호는 중요한 보안 고려 사항이다.

바이러스를 치료하거나 예방하는 방법은 다양한데 아래와 같다.

  • 안티 바이러스 프로그램: 이미 알고있는 패턴을 찾아 제거하고 치료한다.
  • 샌드박스: 통제되거나 가상화된 시스템 영역인 샌드박스에서 프로그램을 실행하고 코드의 행동을 분석한다.
  • 안전한 컴퓨터 사용: 개봉되지 않은 소프트웨어를 판매자로 부터 구매하고, 공식 제공자나 디스크 교환을 통해 공짜나 해적판을 구하지 않는 것이 감염을 예방하는 가장 안전한 경로이다.
  • 모르는 발신자의 이메일 첨부파일 열지 않기

16. 5. 5 Auditing, Accounting, and Logging

감사, 회계, 로깅은 시스템 성능을 감소시키지만 보안에서는 유용하다.

모든 시스템 콜 실행은 프로그램을 분석하기 위해 로그를 남길 수 있으며 의심스러운 이벤트도 로그로 남긴다.

초기 UNIX 컴퓨터에서도 회계 로그를 검사하는 과정에서 침입을 감지하였다.

16. 5. 6 Firewalling to Protect Systems and Networks

컴퓨터를 신뢰할 수 없는 네트워크에 안전하게 연결하려는 방식 중 하나로 신뢰 가능한 시스템과 신뢰할 수 없는 시스템을 분리하도록 방화벽을 사용하는 것이다.

방화벽은 두 시스템 사이를 분리하는 컴퓨터, 장치, 또는 라우터이다.

방화벽은 보안영역 사이의 네트워크 접근을 제한하고 모든 연결을 감시하고 기록한다.

일반적으로 웹 서버는 웹 브라우저와 통신하기 위해 HTTP 프로토콜을 사용하는데, 방화벽은 방화벽 밖 모든 호스트로부터 웹 서버에게 HTTP만 통과를 허용한다.

방화벽은 인터넷을 신뢰할 수 없는 영역, 비무장 지역(반은 신뢰할 수 없고, 반은 안전), 회사의 컴퓨터들로 이루어져있으며, 방화벽은 자신이 안전하고 침입이 불가능해야 한다. 그렇지 않으면 안전한 연결을 보장할 수 없다.

방화벽은 터널형 침입(터널이 허용하는 프로토콜 또는 연결)을 방지 할 수 없다.

일반적인 네트워크 방화벽 외의 각각의 장단점을 가지고 있는 방화벽이 있는데,

  • 개인 방화벽은 운영체제에 포함되어 있거나 프로그램으로 추가되는 소프트웨어 계층이다. (도메인 간 제한이 아닌 특정 호스트와의 통신을 제한한다.)
  • 응용 대리 방화벽은 네트워크를 가로질러 사용하는 프로토콜을 이해하고 있다.
  • XML 방화벽은 WSDL 및 REST와 같은 XML 기반 인터페이스를 통해 노출된 프로그램을 보호하고, XML 트래픽을 감시하고 허용되지 않거나 잘못된 XML을 막는 특정한 목적을 가지고 있다. https://support.microsoft.com/ko-kr/office/초보자를-위한-xml-설명-a87d234d-4c2e-4409-9cbc-45e4eb857d44
  • 시스템 콜 방화벽은 프로그램과 커널 사이에 자리 잡고 시스템 콜 실행을 감시한다.

16. 5. 7 Other Solutions

ASLR이라는 기술이 코드 주입 공격을 방자하는데 도움이 되었는데, 코드 주입을 하려면 대상 메모리에 있는 정확한 주소를 추론할 수 있어야 하지만, ASLR은 주소 공간을 무작위화하여 주소 공간을 예측할 수 없는 위치에 배치한다.)

또한, iOS 및 안드로이드와 같은 모바일 운영체제는 사용자 데이터와 시스템 파일을 서로 다른 파티션에 배치하는 방법을 종종 채택한다.

results matching ""

    No results matching ""