일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Rust
- 러스트 예제
- java
- 알고리즘
- 파이썬 첼린지
- Reversing
- 백준 러스트
- Python
- 러스트
- 러스트 프로그래밍 공식 가이드
- 데이터 통신
- 오라클
- 자바 개념
- 자바 기초
- Database
- 운영체제
- C
- Operating System
- 자바
- data communication
- 파이썬
- OS
- ubuntu
- 백준
- 우분투
- 오라클DB
- 파이썬 알고리즘
- Python challenge
- 데이터베이스
- 파이썬 챌린지
Archives
- Today
- Total
IT’s Portfolio
[OS] 운영체제 이해하기 본문
728x90
반응형
운영체제 (Operation System)
- 사용자가 컴퓨터 시스템을 손쉽게 사용하도록 도와줌.
- 시스템 자원(메모리, 프로세서, 입출력 장치, 정보, 네트워크 등)을 효율적으로 관리할 수 있도록 하는 프로그램 집합.
운영체제의 기능
운영체제는 사용자에게 시스템 자원을 효율적으로 사용하고, 관리하기 위해 기능을 제공함.
- 사용자 명령 인터페이스 (UCI : User Command Interface)
- 윈도우 운영체제 계열은 CMD, EXE. 유닉스와 리눅스 계열은 /bin/sh, /bin/bash SHELL
- 해커들이 원격 공격을 통해 가장 얻고자 하는 기능
- 메모리 관리 (Memory Management)
- 프로그램을 실행할 때 프로그램 코드와 데이터를 저장하고 처리하기 위한 메모리 필요
- 프로그램의 메모리 요청에 대한 적합성 검증 및 메모리 할당
- 할당된 메모리를 다른 프로그램이 접근하지 못하게 관리하고 보호함. 사용 종료 후 회수
- 운영체제/시스템 해킹 할 때 메모리 관련 취약점을 매우 많이 이용
- 프로세스 관리 (Processor Management)
- 프로세서(CPU)가 프로그램을 실행하는 과정에서 프로그램 코드가 단계적으로 수행
- 프로그램 코드를 구성하는 명령어(Instruction)를 체계적이고 효율적으로 실행되도록 작업 스케줄링(Job Scheduling) 관리
- 프로그램의 취약점을 공격할 때 명령어를 이해하고, 프로그램 구동 원리를 이해하는 것이 매우 중요
- 장치 관리 (Device Management)
- 모니터, 키보드, 프린트, 하드디스크 등 시스템 내의 모든 장치(Device)를 프로그램에 할당하거나 회수하는 기능
- 파일 관리 (File Management)
- 시스템 내의 파일과 폴더에 사용자 별 접근 권한을 부여, 접근 권한에 따라 파일을 읽거나 쓰거나 실행할 수 있는 기능을 관리
- 공격자가 UCI 기능을 획득하면 파일 관리 기능을 통해 중요 파일을 열람하여 정보를 탈취해감
- 유닉스/리눅스 계열과 같이 Multi-User 시스템이 기본인 경우, 파일 관리가 잘못되었을 때 일반 사용자가 중요 파일에 접근할 수 있는 등 접근 통제 취약점이 발생
CPU와 메모리
CPU: 연산장치 (레지스터 Register)
메모리(Memory): 저장장치 (스택, 힙, 메모리 주소)
- CPU: 80x86 (32bit CPU Register)
범주 | 80386 레지스터 | 이름 | 비트 | 용도 |
범용 세그먼트 (General Register) |
EAX | 누산기 | 32 | 주로 산술 연산에 사용(함수의 결과 값 저장) |
EBX | 베이스 레지스터 | 32 | 특정 주소 저장(주소 지정을 확대하기 위한 인덱스로 사용) | |
ECX | 카운트 레지스터 | 32 | 반복적으로 실행되는 특정 명령에 사용(루프의 반복 횟수나 좌우 방향 시프트 비트 수 기억) | |
EDX | 데이터 레지스터 | 32 | 일반 자료 저장(입출력 동작에 사용) | |
세그먼트 레지스터 (Segment Register) |
CS | 코드 세그먼트 레지스터 | 16 | 실행될 기계 명령어가 저장된 메모리 주소 지정 |
DS | 데이터 세그먼트 레지스터 | 16 | 프로그램에서 정의된 데이터, 상수, 작업 영역의 메모리 주소 지정 | |
DD | 스택 세그먼트 레지스터 | 16 | 프로그램이 임시로 저장할 필요가 있거나 사용자의 피호출 서브루틴이 사용할 데이터와 주소 포함 | |
ES, FS, GS | 엑스트라 세그먼트 레지스터 | 16 | 문자 연산과 추가 메모리 지정을 위해 사용되는 여분의 레지스터 | |
포인터 레지스터 (Pointer Register) |
EBP | 베이스 포인터 | 32 | SS 레지스터와 함께 사용되어 스택 내의 변수 값을 읽는데 사용 |
ESP | 스택 포인터 | 32 | SS 레지스터와 함께 사용되며, 스택의 가장 끝 주소를 가리킴 | |
EIP | 명령 포인터 | 32 | 다음 명령어의 상대 위치 주소를 저장하며 CS 레지스터와 합쳐져 다음에 수행될 명령의 주소 형성 | |
인덱스 레지스터 |
EDI | 목적지 인덱스 | 32 | 목적지 주소에 대한 값 저장 |
ESI | 출발지 인덱스 | 32 | 출발지 주소에 대한 값 저장 | |
플래그 레지스터 | EFLAGS | 플래그 레지스터 | 32 | 연산 결과 및 시스템 상태와 관련된 여러가지 플래그 값 저장 |
- CPU: 80x86 (64bit, 32bit, 16bit, 8bit CPU 레지스터)
64bit Register | Lower 32bit | Lower 16bit | Lower 8bit |
rax | eax | ax | al |
rbx | ebx | bx | bl |
rcx | ecx | cx | cl |
rdx | edx | dx | dl |
rsi | esi | si | sil |
rdi | edi | di | dil |
rbp | ebp | bp | bpl |
rsp | esp | sp | spl |
rip | eip |
- 윈도우 메모리 구조는 32bit일 때 기본적으로 프로세스 별로 4GB 구성 (2^32Bytes)
- 윈도우 운영체제는 가상메모리 사용. 프로세스 별로 유저영역 2GB, 커널영역 2GB(모든 프로세스 공유)로 총 4GB의 독립된 메모리 공간 사용.
- 64bit의 경우 이론적으로 16EB(2^64Bytes) 이어야하나, 실제로 그 일부인 8TB 영역만 사용자 영역에서 사용
728x90
반응형
'Security Study' 카테고리의 다른 글
HTTP Method 중 GET과 POST 정리 (0) | 2019.10.27 |
---|
Comments