🖥️ 1과목 · 시스템 보안#
W1 (8/14~8/21) 진도 · 필기 20문항 · 실기 비중 높음 🔑 = 실기 직결 (답안카드 후보)
📑 목차#
- 운영체제 기본
- 리눅스 계정 관리 🔑
- 파일 권한 🔑
- 파일시스템·디렉토리
- 리눅스 로그 🔑
- 부팅·프로세스·스케줄러
- PAM·접근통제 🔑
- 윈도우 보안 🔑
- 악성코드 🔑
- 시스템 공격 기법 🔑
- 보안 도구·솔루션
- 클라우드·가상화 보안
- 빈출 암기표
1. 운영체제 기본#
OS의 4대 관리 기능 — 프로세스 / 메모리 / 파일 / 장치
| 개념 | 내용 |
|---|---|
| 커널 구조 | 모놀리식(성능↑, 안정성↓) vs 마이크로커널(모듈화, 안정성↑) |
| 보호 링 | Ring 0 = 커널 모드, Ring 3 = 사용자 모드. 링 간 이동은 시스템 콜 |
| 프로세스 메모리 | 위→아래: 스택 ↓ / (빈 공간) / 힙 ↑ / 데이터(BSS) / 코드(텍스트) |
스택은 높은 주소 → 낮은 주소로 자란다. 이게 버퍼 오버플로우로 리턴주소를 덮을 수 있는 이유다.
2. 리눅스 계정 관리 🔑#
/etc/passwd — 7필드#
root : x : 0 : 0 : root : /root : /bin/bash
① ② ③ ④ ⑤ ⑥ ⑦
| # | 필드 | 비고 |
|---|---|---|
| ① | 사용자명 | |
| ② | 패스워드 | x = shadow 사용 중 (여기 해시가 있으면 취약) |
| ③ | UID | 0 = root. UID 0이 여러 개면 백도어 계정 의심 |
| ④ | GID | |
| ⑤ | 설명(comment) | |
| ⑥ | 홈 디렉토리 | |
| ⑦ | 로그인 셸 | /sbin/nologin, /bin/false = 로그인 차단 |
💡 TIP
점검 포인트: UID가 0인 계정이 root 외에 있는가? 불필요한 계정(lp, sync, shutdown 등)의 셸이 nologin인가?
/etc/shadow — 9필드 🔑#
root : $6$xyz... : 19000 : 0 : 99999 : 7 : : :
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨
| # | 필드 | 비고 |
|---|---|---|
| ① | 사용자명 | |
| ② | 암호화된 패스워드 | $1=MD5, $5=SHA-256, $6=SHA-512 · * 또는 ! = 잠김 · 빈칸 = 패스워드 없음(위험) |
| ③ | 마지막 변경일 | 1970-01-01부터의 일수 |
| ④ | 최소 사용일 | 변경 후 이 기간엔 재변경 불가 |
| ⑤ | 최대 사용일 | 만료 주기 |
| ⑥ | 경고일 | 만료 며칠 전부터 경고 |
| ⑦ | 비활성일 | 만료 후 유예 |
| ⑧ | 계정 만료일 | |
| ⑨ | 예약 |
/etc/group#
wheel : x : 10 : user1,user2
그룹명 비번 GID 멤버
계정 명령#
| 명령 | 용도 |
|---|---|
useradd / usermod / userdel |
생성·수정·삭제 |
passwd |
패스워드 변경 |
chage |
패스워드 만료 정책 (chage -l user) |
su / sudo |
사용자 전환 / 권한 위임 |
3. 파일 권한 🔑#
기본 권한#
| 기호 | 숫자 | 파일 | 디렉토리 |
|---|---|---|---|
| r | 4 | 읽기 | 목록 조회(ls) |
| w | 2 | 쓰기 | 생성·삭제 |
| x | 1 | 실행 | 진입(cd) |
rwxr-xr-- = 754
특수 권한 🔑 (실기 최빈출)#
| 권한 | 숫자 | 표시 | 의미 |
|---|---|---|---|
| SUID | 4000 | rws------ |
실행 시 소유자 권한으로 동작 → 권한상승 위험 |
| SGID | 2000 | ---rws--- |
실행 시 그룹 권한으로 동작 |
| Sticky | 1000 | drwxrwxrwt |
디렉토리에서 소유자만 삭제 가능 (/tmp) |
대문자
S/T= 실행 권한(x)이 없는 상태에서 특수권한만 설정됨
SUID 파일 탐색 명령 🔑
find / -perm -4000 -type f 2>/dev/null # SUID
find / -perm -2000 -type f 2>/dev/null # SGID
find / -perm -6000 -type f 2>/dev/null # SUID+SGID
find / -nouser -o -nogroup 2>/dev/null # 소유자 없는 파일
umask 🔑#
파일 = 666 − umask, 디렉토리 = 777 − umask
| umask | 파일 | 디렉토리 |
|---|---|---|
| 022 (기본) | 644 | 755 |
| 027 (권장) | 640 | 750 |
| 077 | 600 | 700 |
파일 기본값이 777이 아니라 666인 이유: 새로 만든 파일에 실행 권한을 주지 않기 위해.
기타 권한 명령#
| 명령 | 용도 |
|---|---|
chmod / chown / chgrp |
권한·소유자·그룹 변경 |
chattr +i |
불변(immutable) 속성 → root도 수정 불가. 로그 보호에 사용 |
lsattr |
확장 속성 확인 |
setfacl / getfacl |
ACL 세부 권한 |
4. 파일시스템·디렉토리#
| 디렉토리 | 용도 |
|---|---|
/bin /sbin |
필수 명령 / 관리자 명령 |
/etc |
설정 파일 |
/var |
로그·스풀 등 가변 데이터 |
/usr |
사용자 프로그램 |
/tmp |
임시 (Sticky bit) |
/proc |
커널·프로세스 정보 (가상 파일시스템) |
/dev |
장치 파일 |
inode 🔑#
파일의 메타데이터를 담는 구조체.
- 포함: 파일 유형, 권한, 소유자(UID/GID), 크기, 타임스탬프(atime/mtime/ctime), 링크 수, 데이터 블록 포인터
- 미포함: 파일 이름 ← 시험 단골. 파일명은 디렉토리 엔트리에 있다
| 링크 | 특징 |
|---|---|
| 하드 링크 | 같은 inode를 가리킴. 파일시스템 넘을 수 없음, 디렉토리 불가 |
| 심볼릭 링크 | 경로를 가리키는 별도 파일(inode 다름). 파일시스템 넘기 가능 |
마운트 설정: /etc/fstab — nosuid, noexec, nodev 옵션으로 하드닝
5. 리눅스 로그 🔑#
실기 단답형 최빈출 구간. 파일-명령-내용 3개를 세트로 외운다.
| 로그 | 경로 | 조회 명령 | 내용 |
|---|---|---|---|
| utmp | /var/run/utmp |
who, w |
현재 로그인 중인 사용자 |
| wtmp | /var/log/wtmp |
last |
로그인/로그아웃 성공 이력, 재부팅 |
| btmp | /var/log/btmp |
lastb |
로그인 실패 이력 |
| lastlog | /var/log/lastlog |
lastlog |
사용자별 마지막 로그인 |
| secure | /var/log/secure |
(텍스트) | 인증·su·sudo·SSH (RedHat 계열) |
| auth.log | /var/log/auth.log |
(텍스트) | 위와 동일 (Debian 계열) |
| messages | /var/log/messages |
(텍스트) | 일반 시스템 메시지 |
| sulog | /var/log/sulog |
(텍스트) | su 명령 사용 |
| pacct/acct | /var/log/pacct |
lastcomm |
사용자별 명령 실행 이력 |
| xferlog | /var/log/xferlog |
(텍스트) | FTP 파일 전송 |
| history | ~/.bash_history |
history |
셸 명령 이력 |
📌 중요
utmp/wtmp/btmp/lastlog는 바이너리 파일이라
cat으로 못 본다 → 전용 명령 필요. 이게 그대로 문제로 나온다.
syslog#
- 설정:
/etc/syslog.conf(또는/etc/rsyslog.conf) - 형식:
facility.priority action예)authpriv.* /var/log/secure
우선순위 8단계 (높음 → 낮음)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| emerg | alert | crit | err | warning | notice | info | debug |
6. 부팅·프로세스·스케줄러#
부팅 순서#
BIOS/UEFI → MBR(부트로더 GRUB) → 커널 로드 → init/systemd → 런레벨 서비스
런레벨#
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 종료 | 단일 사용자 | 다중(NFS X) | 텍스트 다중 | 미사용 | GUI | 재부팅 |
런레벨 1(single user)은 패스워드 없이 root 진입이 가능 → GRUB 패스워드 설정이 대응책
프로세스 명령#
ps · top · kill · nice/renice · pstree · lsof · netstat -antp
스케줄러 🔑#
| 항목 | cron | at |
|---|---|---|
| 용도 | 주기적 반복 | 1회성 |
| 설정 | /etc/crontab, crontab -e |
at 시각 |
| 접근제어 | /etc/cron.allow, /etc/cron.deny |
/etc/at.allow, /etc/at.deny |
crontab 5필드: 분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-7)
allow 파일이 있으면 거기 있는 사용자만 허용. allow가 없고 deny만 있으면 deny 외 전부 허용.
7. PAM·접근통제 🔑#
PAM (Pluggable Authentication Module)#
- 위치:
/etc/pam.d/ - 모듈 유형 4가지
| 유형 | 역할 |
|---|---|
auth |
인증 (패스워드 확인) |
account |
계정 유효성 (만료·시간 제한) |
password |
패스워드 변경 정책 |
session |
세션 시작·종료 처리 |
- control flag:
required(실패해도 계속 진행 후 최종 실패) /requisite(즉시 실패 반환) /sufficient(성공 시 즉시 통과) /optional - 계정 잠금 모듈:
pam_tally2,pam_faillock - 패스워드 복잡도:
pam_cracklib,pam_pwquality
TCP Wrapper 🔑#
호스트 기반 접근 통제. /etc/hosts.allow → /etc/hosts.deny 순서로 검사, 둘 다 없으면 허용.
# /etc/hosts.deny
ALL : ALL
# /etc/hosts.allow
sshd : 192.168.0.
순서가 그대로 문제로 나온다. allow 먼저, deny 나중, 없으면 허용.
8. 윈도우 보안 🔑#
인증 구조#
| 구성요소 | 역할 |
|---|---|
| SAM | 계정·패스워드 해시 저장 (C:\Windows\System32\config\SAM) |
| LSA | 로컬 보안 정책·인증 처리, SRM에 SID 전달 |
| SRM | 접근 허용/거부 결정, SID 부여, 감사 로그 생성 |
인증 프로토콜 발전: LM → NTLM → NTLMv2 → Kerberos(Active Directory 기본)
SID 구조#
S-1-5-21-<도메인>-<RID>
| RID | 계정 |
|---|---|
| 500 | Administrator |
| 501 | Guest |
| 1000~ | 일반 사용자 |
레지스트리 5개 루트키#
| 키 | 내용 |
|---|---|
| HKCR (Classes Root) | 파일 확장자 연결 |
| HKCU (Current User) | 현재 로그인 사용자 설정 |
| HKLM (Local Machine) | 시스템 전역 설정 ← 악성코드 주 타겟 |
| HKU (Users) | 모든 사용자 프로필 |
| HKCC (Current Config) | 현재 하드웨어 프로파일 |
자동실행 등록 위치 🔑
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
파일시스템#
| FAT32 | NTFS | |
|---|---|---|
| 권한(ACL) | ❌ | ✅ |
| 암호화 | ❌ | ✅ EFS |
| 저널링 | ❌ | ✅ |
| 대용량 | 4GB 제한 | ✅ |
ADS (Alternate Data Stream) 🔑 — NTFS의 대체 데이터 스트림. file.txt:hidden.exe 형태로 데이터 은닉에 악용.
이벤트 로그 🔑 (실기 단답 단골)#
로그 종류: 응용 프로그램 / 보안 / 시스템
| 이벤트 ID | 의미 |
|---|---|
| 4624 | 로그온 성공 |
| 4625 | 로그온 실패 |
| 4634 | 로그오프 |
| 4672 | 특수 권한 할당 (관리자 로그온) |
| 4720 | 사용자 계정 생성 |
| 4726 | 사용자 계정 삭제 |
| 4688 | 새 프로세스 생성 |
| 1102 | 감사 로그 삭제 ← 침해 흔적 |
로그온 유형
| 2 | 3 | 4 | 5 | 10 |
|---|---|---|---|---|
| 대화식 | 네트워크 | 배치 | 서비스 | 원격 대화식(RDP) |
공유 폴더#
- 기본(관리) 공유:
C$,ADMIN$,IPC$—$가 붙으면 숨김 공유 - NULL 세션 취약점: 익명으로
IPC$접속 → 계정·공유 정보 열람.RestrictAnonymous로 차단
9. 악성코드 🔑#
| 유형 | 숙주 | 자기복제 | 특징 |
|---|---|---|---|
| 바이러스 | 필요 | ✅ | 숙주 파일에 기생 |
| 웜 | 불필요 | ✅ | 네트워크로 스스로 전파 |
| 트로이목마 | — | ❌ | 정상 프로그램으로 위장 |
| 스파이웨어 | — | ❌ | 정보 수집·유출 |
| 랜섬웨어 | — | — | 파일 암호화 후 금전 요구 |
| 루트킷 | — | — | 관리자 권한 + 자신을 은닉 |
| 백도어 | — | — | 인증을 우회하는 통로 |
| 논리폭탄 | — | — | 특정 조건 충족 시 동작 |
| 애드웨어 | — | — | 광고 노출 |
바이러스 vs 웜의 핵심 차이 = 숙주 필요 여부 + 자가 전파 여부. 매년 나온다.
바이러스 세대#
원시형 → 암호화형 → 은폐형(스텔스) → 갑옷형 → 매크로
APT (지능형 지속 위협)#
특정 표적을 정해 장기간 잠복하며 단계적으로 침투. 스피어피싱·워터링홀이 초기 침투 수단.
탐지 기법#
| 기법 | 원리 | 한계 |
|---|---|---|
| 시그니처 기반 | 알려진 패턴 매칭 | 신종·변종 탐지 불가 |
| 휴리스틱 | 코드 구조 분석 | 오탐 |
| 행위 기반 | 실행 중 행동 감시 | 성능 부하 |
| 샌드박스 | 격리 환경에서 실행 | 우회 기법 존재 |
10. 시스템 공격 기법 🔑#
버퍼 오버플로우 (최빈출)#
원리: 버퍼 크기 검증 없이 데이터를 복사 → 인접 메모리 침범 → 스택의 리턴 주소(RET)를 셸코드 주소로 덮어씀 → 프로그램 흐름 탈취
| 종류 | 위치 |
|---|---|
| 스택 오버플로우 | 지역변수 영역 → RET 덮어쓰기 |
| 힙 오버플로우 | 동적 할당 영역 → 함수 포인터 변조 |
취약 함수 🔑 — strcpy strcat sprintf gets scanf
안전 함수 — strncpy strncat snprintf fgets
대응방안 🔑
| 대응 | 원리 |
|---|---|
| 스택가드(Canary) | RET 앞에 난수를 두고 변조 여부 검사 |
| 스택쉴드 | RET 복사본을 별도 저장 후 비교 |
| ASLR | 주소 공간 무작위 배치 → 주소 예측 불가 |
| DEP / NX bit | 데이터 영역 실행 권한 제거 |
| 안전한 함수 사용 | 길이 제한 함수로 대체 |
포맷 스트링#
printf(input) 처럼 포맷 지정자 없이 사용자 입력을 넘김 → %x로 메모리 읽기, %n으로 메모리 쓰기
대응: printf("%s", input) 형태로 포맷 문자열 명시
레이스 컨디션 (TOCTOU)#
원리: SUID 프로그램이 임시파일을 만드는 찰나에 심볼릭 링크로 교체 → 권한으로 원하는 파일 조작
대응: O_EXCL 플래그로 원자적 생성, 임시파일 권한 최소화, 파일 검사와 사용 사이 간격 제거
패스워드 크래킹#
| 기법 | 내용 |
|---|---|
| 사전 공격 | 단어 목록 대입 |
| 무차별 대입 | 전수 조사 |
| 레인보우 테이블 | 미리 계산된 해시 표 |
대응: 솔트(salt) 추가 → 같은 패스워드도 다른 해시가 되어 레인보우 테이블 무력화. 반복 해싱(key stretching).
11. 보안 도구·솔루션#
| 도구 | 용도 |
|---|---|
| Tripwire / AIDE | 파일 무결성 검사 (해시 DB와 비교) |
| TCP Wrapper | 호스트 기반 접근 통제 |
| chroot | 루트 디렉토리 격리 (탈출 기법 존재) |
| sudo | 권한 위임 — /etc/sudoers, **visudo**로 편집 |
| SELinux / AppArmor | MAC(강제적 접근통제) 구현 |
| John the Ripper | 패스워드 취약성 점검 |
| rkhunter / chkrootkit | 루트킷 탐지 |
| Nessus / OpenVAS | 취약점 스캐너 |
| Bastille | 리눅스 하드닝 자동화 |
접근통제 모델 (정보보안일반과 겹침)#
| 모델 | 결정 주체 |
|---|---|
| DAC 임의적 | 소유자가 권한 부여 (일반 리눅스 권한) |
| MAC 강제적 | 시스템(보안등급) 이 강제 (SELinux) |
| RBAC 역할기반 | 역할에 권한 부여 |
12. 클라우드·가상화 보안#
책임 공유 모델
| 모델 | 사용자 책임 범위 |
|---|---|
| IaaS | OS, 미들웨어, 앱, 데이터 (가장 넓음) |
| PaaS | 앱, 데이터 |
| SaaS | 데이터, 접근 관리 (가장 좁음) |
하이퍼바이저
| Type 1 (베어메탈) | Type 2 (호스트형) |
|---|---|
| 하드웨어 위에 직접 | 호스트 OS 위에서 동작 |
| ESXi, Hyper-V, Xen | VirtualBox, VMware Workstation |
주요 위협: VM Escape(게스트→호스트 탈출), VM 간 정보 유출, 스노트/컨테이너 이스케이프 솔루션 약어: CASB(클라우드 접근 보안 중개), CSPM(설정 오류 관리), CWPP(워크로드 보호)
13. 빈출 암기표#
출퇴근길 마지막 5분에 이것만 훑어도 된다.
숫자#
| 항목 | 값 |
|---|---|
| SUID / SGID / Sticky | 4000 / 2000 / 1000 |
| umask 기본 | 022 → 파일 644, 디렉토리 755 |
| 파일 기본 권한 계산 | 666 − umask |
| 디렉토리 기본 권한 계산 | 777 − umask |
| root UID | 0 |
| Administrator / Guest RID | 500 / 501 |
| syslog 우선순위 | emerg(0) ~ debug(7) |
로그 매핑#
| 무엇을 볼 때 | 파일 | 명령 |
|---|---|---|
| 현재 접속자 | utmp | who, w |
| 로그인 성공 이력 | wtmp | last |
| 로그인 실패 이력 | btmp | lastb |
| 마지막 로그인 | lastlog | lastlog |
| 명령 실행 이력 | pacct | lastcomm |
| FTP 전송 | xferlog | — |
윈도우 이벤트 ID#
| 4624 | 4625 | 4672 | 4720 | 1102 |
|---|---|---|---|---|
| 로그온 성공 | 로그온 실패 | 특수권한 | 계정생성 | 로그삭제 |
명령 한 줄#
find / -perm -4000 -type f 2>/dev/null # SUID 파일 탐색
chage -l username # 패스워드 만료 정책 확인
lastb | head -20 # 로그인 실패 이력
chattr +i /var/log/secure # 로그 파일 불변 설정
netstat -antp # 열린 포트 + 프로세스
✅ 이 과목 카드 후보 (목표 50장)#
| 서술형 카드 (15장) | 단답 카드 (35장) |
|---|---|
| 버퍼 오버플로우 | passwd/shadow 각 필드 |
| 레이스 컨디션 | SUID/SGID/Sticky 숫자·의미 |
| 루트킷 | umask 계산 |
| 랜섬웨어 | 로그 파일 6종 + 명령 |
| APT | 윈도우 이벤트 ID 5종 |
| SUID 권한상승 | 런레벨 0~6 |
| 포맷 스트링 | 레지스트리 루트키 5종 |
| 패스워드 크래킹·솔트 | SID / RID |
| 무결성 검사(Tripwire) | inode 포함/미포함 항목 |
| TCP Wrapper | PAM 모듈 유형 4종 |
| 접근통제 모델 DAC/MAC/RBAC | 취약 함수 5종 |
| 악성코드 유형 구분 | ADS |
| VM Escape | 하이퍼바이저 Type1/2 |
| 클라우드 책임 공유 모델 | cron/at 접근제어 파일 |
| 계정 잠금 정책(PAM) | syslog 우선순위 |
문서 원본은
docs/ 폴더의 마크다운입니다.