시스템보안
운영체제, 계정·권한, 로그, 악성코드, 시스템 취약점과 하드닝
처음 듣는 사람용 지도
이 과목은 컴퓨터 한 대 안을 지키는 공부다. 사용자가 계정으로 로그인하고, 권한에 따라 파일과 프로그램을 쓰며, 운영체제가 그 실행을 관리하고 로그를 남기는 흐름을 본다.
먼저 볼 순서: 운영체제·프로세스 → 계정 → 파일 권한 → 명령·로그 → 공격·악성코드. 세부 명령 옵션은 첫 회독에 전부 암기하지 않는다.
1. 운영체제와 프로세스·메모리
운영체제는 CPU·메모리·파일·장치·계정을 관리하고 응용프로그램에 안전한 실행환경을 제공한다. 보안 문제는 대개 “누가 어떤 권한으로 어떤 자원에 접근했는가”로 정리할 수 있다.
| 개념 | 핵심 | 시험 포인트 |
|---|---|---|
| 커널 모드 | 하드웨어와 핵심 자원에 제한 없이 접근 | 취약한 드라이버·커널 코드는 시스템 전체 장악으로 이어질 수 있음 |
| 사용자 모드 | 제한된 권한으로 실행하며 시스템콜을 통해 커널 기능 요청 | 권한 경계와 예외 처리 |
| 프로세스 | 독립 주소공간을 가진 실행 중 프로그램 | PID, 부모/자식, 문맥교환, 프로세스 상태 |
| 스레드 | 프로세스 내부 실행 단위. 코드·데이터·힙을 공유하고 스택은 개별 보유 | 공유자원 경쟁, 동기화, 레이스 컨디션 |
| 가상메모리 | 논리 주소를 물리 메모리에 매핑. 페이지 단위 관리 | 페이지 폴트, 스와핑, 과도한 폴트에 따른 스래싱 |
프로세스 상태
생성 → 준비 → 실행 → 대기/봉쇄 → 준비 → 종료. 실행 가능한데 CPU를 기다리면 준비, I/O 등 사건을 기다리면 대기다.
교착상태 4조건
상호배제, 점유와 대기, 비선점, 순환대기가 동시에 성립해야 한다. 하나를 깨면 예방할 수 있다.
메모리 구조: 코드 영역은 실행 명령, 데이터/BSS는 전역·정적 데이터, 힙은 동적 할당, 스택은 함수 호출·지역변수·복귀주소를 담는다. 경계검사 실패로 복귀주소가 덮이면 제어흐름 탈취가 가능하다.
2. Linux 계정·인증 파일
| 파일 | 역할 | 중요 필드/주의 |
|---|---|---|
/etc/passwd | 계정 기본정보 | 계정명, UID, GID, 설명, 홈, 로그인 셸. 일반적으로 읽기 가능하므로 해시는 두지 않음 |
/etc/shadow | 비밀번호 해시·만료정책 | 권한을 엄격히 제한. 잠금 표시는 배포판에 따라 !, * 등 |
/etc/group | 그룹 정보 | 그룹명, GID, 보조그룹 구성원 |
/etc/sudoers | sudo 권한 정책 | visudo로 안전하게 편집, 명령 범위를 최소화 |
UID 0은 전통적으로 최고권한 계정이다. 이름이 root가 아니어도 UID가 0이면 동일한 권한을 가진다. 불필요한 UID 0 계정, 로그인 가능한 시스템 계정, 공유계정은 점검 대상이다.
인증과 인가: 인증은 “누구인가” 확인, 인가는 “무엇을 할 수 있는가” 결정이다. 계정 잠금, 비밀번호 해시, MFA는 인증 통제이고 파일 권한·sudo·ACL은 인가 통제다.
3. Linux 파일 권한·umask·특수권한
| 값 | 권한 | 파일에서 | 디렉터리에서 |
|---|---|---|---|
| 4 | r | 내용 읽기 | 목록의 이름 읽기 |
| 2 | w | 내용 수정 | 파일 생성·삭제·이름변경 |
| 1 | x | 실행 | 디렉터리 진입·경로 탐색 |
계산 예시
chmod 640 report.txt → 소유자 rw-, 그룹 r--, 기타 ---.
일반적인 기본권한이 파일 666, 디렉터리 777이고 umask 027이면 파일은 640, 디렉터리는 750이 된다. 단순 십진수 뺄셈이 아니라 마스크 비트를 제거하는 개념으로 이해한다.
| 특수권한 | 표시 | 의미 | 위험/용도 |
|---|---|---|---|
| SUID | 소유자 x 위치의 s | 실행 중 파일 소유자의 유효 UID로 동작 | 불필요한 root SUID는 권한상승 통로 |
| SGID | 그룹 x 위치의 s | 실행 파일은 소유 그룹 권한, 디렉터리는 새 파일이 그룹 상속 | 협업 디렉터리에 사용 |
| Sticky | 기타 x 위치의 t | 공용 디렉터리에서 자기 파일만 삭제·이름변경 | /tmp 유형 |
4. Linux 명령어·서비스·로그
| 목적 | 대표 명령 | 확인 내용 |
|---|---|---|
| 프로세스 | ps aux, top, pstree | 소유자, PID, CPU/메모리, 부모관계 |
| 네트워크 | ss -lntup, ip addr, ip route, lsof -i | 수신 포트, 프로세스, 주소, 라우팅 |
| 파일검색 | find, grep, stat | SUID 파일, 최근 변경, 문자열, 시간정보 |
| 계정활동 | who, w, last, lastlog | 현재/과거 로그인, 장기 미사용 |
| 서비스 | systemctl, journalctl | 활성화 상태, 시작 실패, 서비스 로그 |
| 스케줄 | crontab -l, /etc/cron* | 지속성 확보에 악용될 예약작업 |
로그 분석 순서: 시간대·NTP 확인 → 최초 이상 시점 → 계정/IP/프로세스 → 성공·실패 → 전후 사건 상관분석 → 원본 보존. 여러 장비의 시간이 어긋나면 사건 순서를 잘못 판단할 수 있다.
하드닝: 불필요 서비스·계정 제거, 원격 root 로그인 제한, 키 기반 SSH와 MFA, 패치, 최소권한, 로그 원격전송, 파일 무결성, 방화벽, 안전한 시간동기화, 백업·복구시험을 묶어서 기억한다.
5. Windows 보안 핵심
- SID: 사용자·그룹·컴퓨터 같은 보안 주체의 고유 식별자. 표시 이름을 바꿔도 SID 기반 권한은 유지된다.
- NTFS 권한: 읽기, 쓰기, 수정, 모든 권한 등. 명시적 Deny와 상속, 공유 권한과 NTFS 권한의 결합을 구분한다.
- UAC: 관리자 계정도 일상 작업은 제한된 토큰으로 수행하고 관리 작업 때 상승을 요구한다.
- 레지스트리: 시스템·서비스·사용자 설정 저장소. 자동실행 위치가 지속성 확보에 악용될 수 있다.
- 이벤트 로그: Security, System, Application 등을 중심으로 로그인, 계정변경, 서비스 설치, 정책 변경을 확인한다.
- 서비스/작업 스케줄러: 불필요 서비스 제거, 서비스 계정 최소권한, 시작유형과 실행파일 경로 점검이 핵심이다.
6. 시스템 공격·악성코드·대응
| 공격/악성코드 | 핵심 | 대응 |
|---|---|---|
| 버퍼 오버플로 | 경계를 넘어 메모리를 덮어 제어흐름 변경 | 안전한 함수·경계검사, ASLR, DEP/NX, 카나리, 최소권한 |
| 포맷스트링 | 사용자 입력이 포맷문자열로 해석되어 메모리 읽기/쓰기 | 고정 포맷 사용, 입력을 데이터 인수로 전달 |
| 레이스 컨디션 | 검사와 사용 사이 상태변경 또는 공유자원 경쟁 | 원자적 처리, 잠금, 안전한 임시파일, 권한 최소화 |
| 루트킷 | 고권한 지속성 및 파일·프로세스·연결 은폐 | 신뢰 부팅, 무결성 점검, 오프라인 분석, 필요 시 재설치 |
| 웜 | 스스로 복제하며 네트워크 확산 | 패치, 분리, egress 통제, 탐지·차단 |
| 트로이목마 | 정상 프로그램처럼 위장해 사용자가 실행 | 허용목록, 서명검증, 사용자 교육, EDR |
| 랜섬웨어 | 파일 암호화·유출 협박·백업 파괴 | 오프라인/불변 백업, 최소권한, 분리, 패치, 복구훈련 |