운영체제보안 4

공부/보안 2020. 9. 22. 16:18
반응형

Race Conditions


운영체제는 자원관리자이다. 따라서 Thread나 Process가 주요자원들을 공유하게 해준다.

CPU는 하나이고 실행시킬 Task는 여러개일때, 시간을 나누어 번갈아가며 실행한다. (CPU => MIPS 따라서 번갈아가며 사용해도 사용자는 동시에 사용하는 것처럼 보인다.)

두 thread나 process가 공유자원에 동시에 접근하면 발생한다 따라서 임계영역에 한 순간 한 thread만 들어가도록 상호배제를 하거나 순서관계를 주어 한 thread가 다른 thread가 끝날때까지 기다리게 동기화해준다.

상호배제가 되어있지 않은 경우 다른 일을 하기 전에 공격자가 끼어들 수 있다.

Logging


log : 일지를 남기다.

시스템에 대해 기록하여 문제점, 침입자 등을 찾아낼 수 있다.
문제를 파악해서 대응할 수 있게해준다.

모든 것을 log할 수 없고, privacy risk와 process가능한 data만 log하는 것이 좋다.
하지만, 반드시 보안적으로 중요한 이벤트들은 log하여야한다.

linux에서 /var/log 아래에 log 파일들이 있다.

log viwer로는 last command가 있다.
tail = 최근 저장된 log 10줄을 보여준다.

Intruders & Security Design


Intruders = Attackers = Crackers = Black hat hackers = 침입자

  • Masquerader : 신분위장자, 내부의 적법한 사용자의 계정을 도용하여 비인가적인 침입을 함 (outsider)
  • Misfeasor : 적법한 사용자, 더 많은 권한을 가지고 불법행위를 함 (insider)
  • Clandestine user : 은밀한 사용자, 백도어 드으로 log를 남기지 않거나 log를 지움 (insider or outsider)

Layers of A computer system, Security


==========================
| Application |
| Services(compiler, DB..|
| OS |
| Hardware |
=======================

      Application security
     ============
     Network Security
   ================ 
      OS Security
 =====================
     User Security

=========================
Physical Security
============================
=> 위층의 보안이 좋아도 아래층 보안이 약하면 취약

Protection and Security Desing Principles


  • 최소한의 권한 (Least privilege).
    각 사용자와 프로그램은 가능한 최소한의 권한을 사용하여 작동해야 한다. 이 원리는 사고, 에러 또는 공격으로부터의 손상을 제한하며 또한 권한을 갖는 프로그램간의 잠재적인 상호작용의 수를 저하시는데 따라서 의도되지 않은, 원하지 않은 또는 부적절한 권한 사용이 덜 일어나게 할 것이다. 이 개념은 프로그램의 내부로 확장될 수 있는데 이러한 권한을 필요로하는 프로그램의 가장 작은 부분만이 이러한 권한을 가져야 한다.

 

  • 메카니즘의 효율적 사용/단순 (Economy of mechanism/Simplicity).
    보호 시스템 설계는 가능한 단순하고 작아야 한다. 이들은 "소프트웨어의 라인별 검사 및 보호 메카니즘을 구현하는 하드웨어의 물리적 조사와 같은 기법들이 필요하다. 이러한 기법이 성공적이기 위해서는 작고 단순한 설계가 절대적으로 필요하다" 라고 논의하고 있다. 이는 때때로 "KISS ("keep it simple, stupid")" 라고 기술된다.

 

  • 오픈 설계 (Open design). 보호 메카니즘은 공격자의 무지에 의존하지 않아야 한다.
    대신 메카니즘은 패스워드 또는 비밀키와 같은 비교적 소수 (쉽게 변경될 수있는) 아이템의 기밀성에 의존하며 공개적이여야 한다. 오픈 설계는 상세한 공개적 조사를 가능하게 하며 또한 사용자 자신이 사용하고 있는 시스템이 합당함을 깨닫게 할 수 있다. 솔직히 널리 배포되어 있는 시스템에 대해 기밀을 유지하려고 하는 것은 현실적이지 않다; 디컴파일러와 파괴된 하드웨어는 구현시의 어떤 비밀을 재빨리 드러낼 수 있다. Bruce Schneier 은 스마트 엔지니어는 소스 코드가 폭넓은 검토를 받았으며 모든 확인된 문제가 수정되었음을 보장해야 할뿐만 아니라 보안과 관련된 모든 것에 대해 오픈 소스 코드를 요구해야 한다고 주장하고 있다

 

  • 완벽한 조정 (Complete mediation).
    모든 접근 시도가 검사되어야 하는데 메카니즘이 파괴될 수 없도록 이를 위치시켜라. 예를 들어 클라이언트-서버 모델에서 일반적으로 서버는 사용자가 자신의 클라이언트를 구축 또는 수정할 수 있기 때문에 모든 접근 검사를 해야 한다.

 

  • 고장 안전 디폴트 (Fail-safe defaults (예, 허가권 기반 접근 방법).
    디폴트는 서비스 부인이어야 하며 보호 체계가 접근이 허가되는 조건을 확인해야 한다.

 

  • 권한 분리 (Separation of privilege).
    원칙적으로 객체에 대한 접근은 한가지 이상의 조건에 의존해야 하며 따라서 한가지 보호 시스템을 무너뜨려도 완전한 접근을 할 수 없을 것이다.

 

  • 최소한의 공통 메카니즘 (Least common mechanism).
    공유 메카니즘 (예, /tmp 또는 /var/tmp 디렉토리 사용) 의 수와 그 사용을 최소화해라. 공유 객체는 정보 흐름 및 의도되지 않은 상호작용에 대해 잠재적으로 위험한 채널을 제공한다.

 

  • 심리학적 수용성/사용의 편리함 (Psychological acceptability/Easy to use).
    휴먼 인터페이스는 사용하기 쉽도록 설계되어야 하며 따라서 사용자는 일상적 및 자동적으로 보호 메카니즘을 정확히 사용할 것이다. 보안 메카니즘이 사용자가 보호하려는 목적의 정신적 이미지와 밀접하게 일치된다면 실수는 줄어들 것이다.

 

Set- UID Privilieged Programs


Need for Privilieged Programs

예를 들어 /etc/shadow 파일의 권한을 보면

-rw-r----- 1 root shadow 1443

~


=> 오직 오너만이 write할 수 있다.

하지만 일반 유저들이 그들의 비밀번호를 바꿀때 어떻게 바꿀 수 있을까? 특권 프로그램을 이용해서 바꾼다

일반적으로 운영체제 내에서 세부적으로 접근 제어를 하는 것은 굉장히 복잡하다.
rwx 3가지 권한을 세부적으로 할 경우 write를 1. 앞에 2. 중간에 3. 뒤에 와 같이 3가지로 나눌 수 있다. 하지만 복잡해진다.

따라서 rwx + 3bits 총 12비트로 permission을 나타낸다.
(확장, fine-grained access control을 위해 3bits를 추가한다.)

일반적으로 OS가 제공하는 접근제어를 바로 사용가능하지만 (e.g system call)
특별한 경우(e.g root가 가진 파일 수정)는 특권 프로그램이 필요하다! => setUID가 설정된 프로그램이 필요하다! 혹은 daemons
(관리자(super user)를 믿는다고 가정한다. 일반 사용자들은 특권 프로그램을 이용해서 바꿀 수 있다)

 

Different Type of Privileged Programs

  1. Daemons in Linux (MS Windows 에서는 services)
    백그라운드에서 계속 수행된다. 따라서 키보드로 부터 입력을 받을 수 없다.
    root나 특권을 가진 유저의 권한으로 실행해야한다.
    • 만약 daemon에게 요청을 하고 요청이 타당하면 daemon이 수행한다.
      (특히 Network는 Service를 위해 daemon들을 많이 사용한다.
      ps - af, ef, af 등을 통하여 모든 프로세스들을 보면 d로 끝나는 것들이 있다.
      Network daemon을 뜻한다. => 중요한 일을 하므로 root의 권한을 주던지 어떤 특권이 있는 사용자의 권한으로 돌아간다.
      중요한 일을 하므로 daemon을 임의로 만들지 못한다.
  2. Set-UID Programs
    Unix 시스템에서 사용된다.
    특정한 비트가 표시되어있는 프로그램이다.

 

Set-UID Concept

  • superman story
    1. Power suit 1.0
      Super man은 자신의 권한을 superpeople
728x90
반응형

'공부 > 보안' 카테고리의 다른 글

Buffer Overflow Attacks 1  (0) 2020.10.16
set-UID Privileged programs  (0) 2020.10.15
운영체제보안 3  (0) 2020.09.16
운영체제 보안 2  (0) 2020.09.10
운영체제 보안 1  (0) 2020.09.10
블로그 이미지

아상관없어

,