3. 시스템 보안

3. 시스템 보안

728x90

- 리눅스

1. EXT(Extended File System) : MFS(MINIX File System) 의 한계를 극복하기 위해서 리눅스용으로 개발 되었다. MFS 파일 시스템의 최대 크기가 64Mb이지만 EXT에서는 최대 2GB까지 늘어났다. 파일명 최대길이는 225byte까지 지원한다. 접근제어, 아이노드, 타임스탬프는 지원하지않는다.

2. EXT2 : EXT의 문제점을 해결하기 위해서 EXT 파일 시스템 소스 코드를 바탕으로 수정되었다. 최대 크기는 32TB 까지 파일 시스템을 지원하며, 서브디렉터리 개수 제한이 증가(32,768)개 하였다. FSCK를 사용하여 파일 시스템의 오류를 수정 할 수 있다. 데이터를 캐시에서 디스크로 저장 중에 전원차단 같은 오류가 발생하면 sync(싱크) 이전 데이터들은 복구 할 수 없어서 파일 시스템이 손상 될 수 있다. 이런 경우 FSCK를 이용하여 파일 시스템을 복구해야 하는데, 전체 섹터를 스캔해야 함으로 많은 시간이 걸린다.

3. EXT3 : EXT2에 파일시스템에 저널링 기능을 추가한 파일 시스템이다. 파일 시스템 변경 시 저널에 먼저 수정 내용을 기록하여 갑작스런 다운 시 빠르게 오류 복구가 가능하다.

- 유닉스

<파일의 종류>

1. ordinary(일반)

2. directory(디렉터리)

3. special(특별)

4. named(지명)

<파일 시스템 구성요소>

1. boot block(부트 블록)

2. super block(슈퍼 블록)

3. inode(아이노드)

4. data block(데이터 블록)

윈도우 : 윈도우 운영체제는 DOS를 기점으로 GUI(Graph User Interface) 환경과 다중 사용자 및 다중 프로세서 구조를 지원하는 운영체제이다. 윈도우 운영체제는 편리한 사용자 인터페이스를 지원하여 개인용PC에서 가장 널리 사용 되고 있다. 또한 하드웨어를 자동으로 인식하는 Plug & Play 기능을 지원하는데 , 하드웨어를 개발할 때 표준화된 인터페이스 규칙을 준수하면 윈도우 운영체제의 HAL(Hardware Abstraction Layer)계층이 자동으로 하드웨어를 인식할 수 있다.

윈도우 구조 : 윈도우 운영체제는 5개의 링으로 구성된다. 가장 하단에 하드웨어가 위치 하고 있으며, HAL, 마이크로 커널, 각종 관리자, 응용 프로그램 순으로 구성된다.

(HAL 인터페이스 규칙에 따라서 새로운하드웨어를 개발하면 하드웨어 시스템간 원활한 통신이 가능하다.

HAL : hardware abstraction layer의 약어. HAL은 운영 체제를 구성하는 한 부분으로 API처럼 사용된다. 엄밀한 기술적 분류로 보면 HAL은 디바이스 레벨에 있기 때문에 API를 사용함으로써 디바이스에 종속되지 않는 프로그래밍을 할 수 있는데, 일반적인 경우처럼 API를 처리하는 데 따른 오버헤드가 발생하지 않는다

micro kernel(마이크로 커널) : 모든 매니저에게 작업을 분담시키고 하드웨어를 제어한다.

IO manager(입출력 관리자) : 시스템에서 입출력을 제어하고 장치들 간의 메세지를 전달하며 응용 프로그램이 하드웨어와 통신할 수 있는 통로를 제공한다.

object manager(객체 관리자 ) : 파일, 포트, 프로세스, 스레드등 모든객체에 대한 정보를 제공한다.

security reference manager(보안 참조 관리자) : 데이터 및 시스템 자원에 대한 접근에 대해서 허가 및 거부함으로써 강제적으로 시스템의 보안설정을 책임진다.

process manager(프로세스 관리자): 프로세스와 스레드를 생성하고 요청에 따라서 작업을 처리한다.

LPC(Local Procedure call, 로컬 프로시저 호출) : 프로세스는 다른 프로세스의 메모리 공간에 접근하지 못하므로, 프로세스 간에 통신이 필요한 경우 이를 처리하는 장치이다.

virutal memory manager(가상 메모리 관리자 ) : 응용 프로그램의 요청이 있을경우 RAM 메모리를 할당하고, 가상 메모리의 Paging 을 제어한다.

win32/64 sub system : 32 비트 및 64 비트 응용 프로그램이 운영체제에서 동작할 수 있도록 지원한다.

POSIX(Portable Operating System Interface, 이식 가능 운영체제 인터페이스) : 서로 다른 UNIX OS 의 공통 API 를 정리하여 이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 애플리케이션 인터페이스 규격이다. 윈도우에서 유닉스 응용 프로그램을 실행 할 때 이용한다.

NTVDM(NT Virtual Dos Maching) : NT 가상 도스 머신은 및 16비트 윈도우 프로그램을 인텔 80386 이상에서 동작하도록 도와준다.

윈도우 부팅순서

1. POST(Power on self test) : 전원장치를 켜면 BIOS는 주변장치를 검사하는데, 이 과정을 POST라고 한다. 만약 고장 난 하드웨어가 발견되면 부팅을 멈추고 문제가 발생한 장치에 대한 정보를 알려준다.

2. 부팅 관련 설정 항목 가져오기 : BIOS 는 CMOS(Complementary Metal- Oxide Semiconductor)에 설정되어 있는 시스템 설정 사항과 부팅 관련 정보를 읽어서 시스템에 반영한다. CMOS는 컴퓨터에 어떤 하드디스크에 장착되어 있고, 어떤 VGA 카드를 사용하고 있으며, 이러한 장치들을 어떻게 제어해야 하는지에 대한 정보를 저장하고 있다. CMOS는 별도의 건전지를 통해서 전원을 공급받으므로, 컴퓨터 전원이 꺼져도 저장된 내용은 지워지지 않는다.

3. MBR(Master Boot Record) : MBR은 저장 매체의 첫 섹터(섹터 0)인 512 바이트 시동 섹터인데, 부팅매체에 대한 기본파일시스템 정보가 들어 있다.

4. NTLDR(NT Loader) : 마이크로 소프트 윈도우 NT 계열 운영 체제를 위한 시동 로더를 말한다. 윈도우 시스템이 실행 될 수 있도록 간단한 파일시스템을 실행한다. 시동 메뉴를 위한 구성 옵션을 알기 위해서 'boot.ini' 파일을 참조한다. 'boot.ini' 가 존재 하지 않으면 기본적으로 첫 하드 드라이브의 첫 파티션에 있는 'c:\windows 디렉터리를 선택한다.

5. [NTDETECT.com](http://ntdetect.com) 실행 : NTDETECT는 운영체제를 시작하는데 요구되는 기본 하드웨어 감지한다. NTLDR에서 제어권을 위임받아 시스템을 설치한다. 그리고 다음과 같은 하드웨어를 검사한다. PC와 CPU 유형, 버스 유형, 비디오 보드 유형 , 키보드와 마우스 종류, 컴퓨터에 장착되어 있는 직렬포트 ,병렬포트, 플로피 드라이브 등이 있다.

6. ntoskrnl.exe(NT OS Kernel) : 하드웨어 가상화나 프로세스 그리고 메모리 관리 같은 다양한 시스템 서비스를 관리함으로써 시스템의 기본적인 부분이 되고 있다. 또한 캐시 매니저, 커널, 보안 참조 모니터, 메모리 관리자, 스케줄러를 포함한다.

윈도우 부팅 순서 :

(POST > CMOS > MBR > NTLDR > NTDETECT > ntoskrnl.exe)

리눅스 & 유닉스 : 리눅스는 FSF의 GNU 프로젝트로서 진행 되고있다.

특징 :

1. 대화식 운영체제 : 사용자와 운영체제 간의 상호작용 명렁어 해석기인 셀(shell)에 의해 이루어짐

2. 멀티태스킹 : 여러 개의 명령어를 동시에 처리하는 방식

3. 멀티유저 : 동시에 여러 사용자가 하나의 컴퓨터를 사용가능 → 보안이 중요해짐

4. 호환성 및 이식성 : 하드웨어적인 구조에 독립적인 응용프로그램을 작성할 수 있는 환경 제공

5. 계층적 파일시스템 : 계층적 파일시스템은 정보의 고유구조를 반영하도록 그룹화하는 기능으로 파일관리에 상당한 유연성 제공

6. 뛰어난 통신 기능 : TCP/IP에 기반한 통신기능을 운영자체 에 내장하고 있으며 프로세스 간에 연결하는 파이프 기능이 있어서 명령어 간의 데이터 전달이 수월

7. 다양한 기능의 유틸리티와 개발환경 제공 : UNIX 시스템은 수백 여개의 명령어와 유틸리티 사용자 및 개발자에게 제공하여 도움을 줌

구성 요소 : 리눅스 운영체제는 3가지 핵심 구성요소로 분류 될수가있다.

1. 커널 (Kernel) : 커널은 운영체제의 핵심이다. 커널은 프로세스간의 보안 접근을 책임지는 소프트웨어로써, 각각의 프로세스가 얼마만큼의 자원을 사용해야 하는지 결정한다. 커널은 main memory(주기억 장치)에 상주하면서 CPU, 메인 메모리, 하드디스크 등의 하드웨어 자원을 제어하고 프로세스 스케줄링,기억장치관리,파일관리,system call,입출력 서비스 등을 사용자에게 제공한다.

(system call<시스템 호출> : 사용자 프로그램이 커널에 접근하는 인터페이스를 제공한다. 이러한 시스템 호출은 커널 내에 서브루틴 형태로 존재하고있다. 입출력 시스템호출, 프로세스 간 통신시스템 호출, 프로세스 관리 호출 3가지로 분류 할수 있다.

2. Shell(셸) : 운영체제와 사용자 간의 인터페이스를 제공하는 중요한 프로그램으로, 일반적으로 명렁어 해석기 기능이 있다.

(기본 셸은 BASH 이다.)

(셸의 기능 :

1. 시그널을 처리

2. 프로그램을 실행

3. 파이프, 리다이렉션, 백그라운드 프로세스 결정

4. 입력된 내용을 파악해서 명령 줄을 분석

5. 와일드 카드, 히스토리 문자, 특수문자 분석

Shell Shock : 유닉스 종류의 운영체제에서 터미널로 사용하는 Bash shell에 존재하는 아주 심각한 보안 취약점을 말한다. Bash shell은 셸 쇼크가 최초로 알려지기 전까지 몇십년동안 광범위하게 사용되고 있었다. 셸 쇼크는 무슨 코드이든 실행 할 수 있는데, 보통 root 계정을 탈취한다. 초기 보고 이후에는 다양한 셸 쇼크가 발견되었는데 보통 환경변수를 이용하여 공격한다. 즉 환경변수에 빈 함수를 넣으면 그 뒤에 오는 코드는 무조건 실행이 되는 버그로 CGI 스크립트 등을 통해서 공격을 수행 할 수 있다.

Orphan process(고아 프로세스) : swapper를 제외한 모든 프로세스는 실행 중에 부모프로세스를 갖는다. 부모 프로세스가 자식 프로세스를 종료하지 않고 먼저 종료될 경우에는 자식 프로세스는 고아 프로세스가 되지만, UNIX 시스템의 규칙에 따라 init 프로세스가 고아 프로세스의 대리모 역할을 한다.

- init 런 레벨

0 : Shutdown (시스템 종료)

1 : Single user mode (단일 사용자 환경)

6 : Reboot( 재시작)

- Sync( 하드디스크 동기화)

시스템은 하드 디스크의 입/출력에 대한 성능을 높이기 위해서 버퍼를 운영한다. 만일 시스템이 비정상적으로 종료가 되면 버퍼에 있는 데이터가 하드 디스크에 반영되지 못하고 사라지게 된다. 이런 경우 파일 시스템 무결성 문제가 발생한다. 따라서 하드디스크 동기화는 시스템 종료 시 해야 할 가장 중요한 작업이다.

- PAM(Pluggable Authentication Modules, 장착형 인증모듈)

PAM은 리눅스 시스템에서 사용자 인증을 담당하는 핵심이며, 각 응용 프로그램에 대한 인증 형태 , 사용자 접근 권한, 자원 접근등을 선택할수 있는 라이브러리이다.

- PAM 이용한 인증 절차

1. login , telnet, ftp등과 같은 프로그램은 인증이 필요할 때 PAM에 요청한다.

2. PAM은 /etc/pam.d 경로에 있는 각 프로그램의 설정파일을 읽어 모듈(*.so파일)을 처리 한 후 인증 성공/실패 결정한다.

반응형

from http://gbri-it.tistory.com/112 by ccl(A) rewrite - 2021-11-07 15:00:49