정보보안기사

[정보보안기사(실기)] SECTION 01 시스템 기본 학습 (3)

tnvori 2026. 4. 5. 02:39

마냥 놀진 않고 프로젝트 마무리(진짜)랑 원서 쳐내기를 하고 있음.. 정보기도 해야 하는데 자꾸 밀린다

맨날 가는 그곳. 오랜만이라 사진이 밀렸다.


4. UNIX/Linux 서버 보안

  1. 시스템 보안
    1. 사용자 패스워드 관리
      • 개요
      • passwd(/etc/passwd) 파일
      • shadow(/etc/shadow) 파일(Linux 기준)
        • 형식
          • user_account
          • encrypted_password
          • last_change(1970년 1월 1일 기준)
          • minlife
          • maxlife
          • warn
          • inactive
          • expires(1970년 1월 1일 기준)
        • encrypted_password 필드 구성
          • $ID$Salt$encrypted_password
          • ID — 1:MD5, 2:Blowfish, 5:SHA-256, 6:SHA-512
            • — 패스워드가 잠긴 상태로 로그인은 불가하지만, 별도의 인증 방식을 사용하여 로그인 가능
          • !! — 패스워드가 잠긴 상태로 모든 로그인 불가능. 기본적으로 사용자 계정을 생성하고 패스워드를 설정하지 않으면 이 상태
          • 빈값 — 패스워드가 설정되지 않은 상태. 패스워드가 설정되어 있지 않으면 패스워드 없이 로그인할 수 있어 설정 필요
          • 패스워드 잠금 설정 명령 — passwd -l 계정명
          • 패스워드 잠금 해제 명령 — passwd -u 계정명
          • Unix(SunOS)의 /etc/shadow
            • NP — No Password. 로그인할 수 없는 계정
            • LK — 패스워드가 잠겨 로그인 불가능
            • 빈값 — 패스워드가 설정되지 않은 상태. 로그인 시 패스워드 설정 과정 진행
        • 패스워드 저장 정책 변경
          • pwconv — shadow로
          • pwunconv — 일반으로
    2. 프로세스 실행권한[SUID, SGID]
      • RUID — 프로세스를 실행시킨 사용자의 UID
      • EUID — 프로세스가 실행 중인 동안에만 부여되는 UID. 자원 접근 권한을 판단하기 위한 UID로 사용
      • SUID — 프로세스가 실행 중인 동안 해당 실행 파일의 소유자, 소유그룹의 권한으로 자원에 접근할 수 있도록 하는 권한 설정
      • 특수 권한 비트
        • 4 — s(suid)
        • 2 — s(sgid)
        • 1 — t(sticky-bit)
      • chmod -s 실행 파일명 — suid, sgid 권한 모두 제거
    3. 디렉터리 접근권한(sticky-bit)
      • 자유롭게 파일을 생성하되 파일 삭제나 파일명 변경은 소유자만이 가능하도록 하는 것
      • Linux — o+t
      • Unix — u+t
  2. 네트워크 보안
    1. SSH
      • 암호화된 원격 터미널 서비스 제공
      • 암호화된 파일 송수신 서비스 제공
    2. 슈퍼 서버[inetd 데몬]
      • 개요
        • Stand-Alone 방식 — 개별 서비스별로 서버 프로세스(데몬)가 동작하는 방식으로 속도가 빠른 장점이 있지만 서버 자원도 많이 점유
        • inetd(xinetd) 방식 — 슈퍼 데몬(inetd 데몬)을 이용하여 개별 서비스를 동작시키는 방식으로 상대적으로 속도가 느리지만 서버 자원 절약 가능
        • N개의 개별 서버를 하나로 통합하여 클라이언트로부터 서비스 요청이 올 때마다 해당 서비스에 관련된 실행 모듈을 실행해줌
        • 최초 실행 시 /etc/inetd.conf 파일의 정보를 참조하여 서비스할 프로그램 정보 획득
        • TCP Wrapper 서비스와 연동하여 서비스별 호스트 접근제어 수행
        • 리눅스 — xinetd — inetd에서 보안과 자원 관리 등 향상
      • inetd.conf 파일 구조
        • 서비스명
        • 소켓 타입 — TCP 기반은 stream, UDP 기반은 datagram
        • 프로토콜 — /etc/protocols 파일에 주어진 프로토콜 중 사용 가능한 프로토콜 설정
        • 플래그
          • nowait — 서비스 요청을 받은 이후에 즉시 다음 서비스 요청을 처리
          • wait — 요청 처리가 완료될 때까지 대기하였다가 다음 요청 처리
        • 사용할 사용자 계정
        • 실행 인수 — 프로그램의 인수 설정. 첫 번째는 응용 프로그램 자신의 이름
      • 불필요한/취약한 서비스 비활성화
        • DoS 공격에 취약한 Simple TCP 서비스 — echo(7/tcp), discard(9/tcp), daytime(13/tcp), chargen(19/tcp) 등
        • r 계열 서비스 — rlogin, rsh, rexec 등은 인증 없이 관리자의 원격 접속을 가능하게 하는 명령어들로, 이기종 운영체제 간 백업 등의 용도로 사용되는 경우가 있으나 보안상 취약하므로 사용하면 안 됨
        • 불필요한 rpc 서비스 — rpc.cmsd, rusersd 등 분산 환경에서 서버 응용 프로그램에 접근하여 작업 호출을 할 수 있는 서비스로 버퍼 오버플로우 등 다수의 취약점이 존재하여 침해사고 발생 위험이 있음
        • 기타 불필요한 finger, tftp, talk 등의 서비스
    3. 접근 통제[TCP Wrapper]
      • 개요
        • 외부에서 들어오는 클라이언트에 대해 접근통제 기능 제공
        • 클라이언트의 IP 주소를 확인하여 시스템 관리자가 접근을 허용한 호스트들에 대해서만 서비스 허용
        • /etc/hosts.allow → /etc/hosts.deny → default 허용
        • 사용 시 해당 서비스 실행 경로에 usr/sbin/tcpd 명시
      • hosts.allow와 hosts.deny
        • service_list : client_list [: shell_command]
        • 접근통제 리스트(ACL)에 일치하는 것 있으면 실행
        • twist — 명령의 결과를 클라이언트에 전송
        • spawn — 미전송
        • shell_command 라인에서 사용 가능한 특수 문자
          • %a — 클라이언트 IP 주소
          • %A — 서버 IP 주소
          • %c — 클라이언트 정보
          • %d — 서비스명
          • %h — 클라이언트의 호스트명 또는 IP 주소
          • %n — 클라이언트의 호스트명
          • %u — 클라이언트의 사용자 이름
          • %p — 서비스의 데몬 프로세스
          • %s — 서버의 정보
          • %% — 하나의 % 문자
    4. xinetd 슈퍼 데몬
      • 개요
        • inetd 슈퍼 데몬의 비효율적인 자원 관리와 보안성 개선
        • 서비스별로 다양한 설정 옵션 지원
        • 다양한 서비스별 접근 제어 기능 제공
        • 설정 파일
          • /etc/xinetd.conf — 모든 서비스에 적용되는 xinetd 설정 파일
          • /etc/xinted.d/서비스별 설정 파일 — 개별 서비스에 적용되는 xinetd 설정 파일
      • 설정 파일 형식
        • service
        • disable
        • socket_type — tcp는 stream, udp는 dgram
        • wait — 요청 대기 yes(udp 기본), 요청 즉시 처리 no(tcp 기본)
        • user
        • sesrver — 서비스 실행 파일 경로 설정
      • 설정 파일 형식(접근 제어 관련 설정)
        • only_from
        • no_access
        • access_times — 접근을 허용할 시간(24시간 기준) 범위 설정
        • cps(connection per second) — 초당 최대 연결 개수 설정
          • 초당 최대 연결 개수
          • 초과 시 연결 제한 시간
        • instances — 최대 서버 개수 설정
        • per_source — 출발지 IP별 최대 연결 개수 설정
      • 설정 파일 형식(로그 관련 설정)
        • log_on_failure — 서버 접속 실패 시 로그 파일에 기록할 내용 설정
        • log_on_success
        • 로그 설정 시 주요 설정값
          • PID
          • HOST
          • DURATION
          • EXIT — 서비스 종료 상태 코드
  3. PAM(장착형 인증 모듈)
    1. 개요
      • 리눅스 시스템 내에서 사용되는 각종 애플리케이션 인증을 위해 제공되는 다양한 인증용 라이브러리
        • /lib/security 또는 /usr/lib/security 디렉터리에 해당 라이브러리 저장
        • 라이브러리 인증 목적으로 관리자에 의해 선택적으로 사용 가능
        • 소프트웨어 개발 시 인증 부분을 독립적으로 개발하고 필요에 따라 인증체계를 선택적으로 사용 가능
      • 인증 방식 및 정책의 유연성과 중앙 통제 가능
      • 기존 응용 프로그램 수정 필요 없음
    2. PAM을 사용한 인증 절차
      • 각 프로그램은 인증이 필요한 부분에 PAM 라이브러리 호출
      • /etc/pam.d — PAM 라이브러리를 이용하는 각 응용 프로그램의 설정 파일 위치. 설정 파일명은 응용 프로그램명과 동일
      • /lib/security — PAM 라이브러리가 제공하는 다양한 인증 모듈 위치
      • /etc/security — PAM 모듈 실행에 필요한 추가 설정 파일 위치
    3. PAM 설정 파일(/etc/pam.d/remote 설정 파일 일부)
      • type control module-path module-arguments
      • type — PAM 모듈 종류
        • account
          • 서비스 사용자 계정의 유효성을 검증하는 유형
          • 계정의 유효 기간(비밀번호 만료), 접속 가능 시간, 서비스 접근 허용 여부 등
        • auth
          • 서비스 사용자 계정의 비밀번호 설정 및 변경 조건을 지정하는 유형 등사용자 신원 확인을 수행하는 유형
          • 패스워드 인증, OTP/보안카드를 통한 인증
        • password
          • 서비스 사용자 계정의 비밀번호 설정 및 변경 조건을 지정하는 유형
          • 패스워드 설정/변경 시 최소 길이, 복잡도 설정 등
        • session
          • 서비스 사용자 계정의 인증 처리 전후에 수행할 작업을 지정하는 유형
          • 사용자 홈 디렉터리 마운트, 메일함 생성 등
      • control — 각 모듈 실행 후 성공 또는 실패에 따른 PAM 라이브러리 행동 결정
        • requisite — 인증 실패 시 즉시 인증 거부
        • required — 인증에 실패하더라도 다음 라인의 모듈을 실행하지만 최종 결과는 인증 실패
        • sufficient — 이전에 요청된 모듈이 실패하더라도 여기서 성공하면 PAM 인증 성공(단, 이전에 있는 required가 모두 성공일 경우)
        • optional — 모듈의 성공, 실패 결과는 모두 무시됨
      • module-path
        • PAM에서 사용할 실제 모듈 파일이 위치한 경로
        • 모듈 이름(*.so 파일)만 명시할 경우 기본 PAM 모듈 디렉터리(/lib/security)에서 해당 모듈을 찾음
      • module-arguments — 모듈에 전달되는 인수
    4. PAM 활용 예 (시스템 취약점 분석, 평가 항목)
      • root 계정의 원격 접속 제한
        • /etc/securetty — pam_securetty.so 모듈이 사용하는 파일로 터미널 접속 시 root 접근 제한 설정 파일
      • 실습
        1. 터미널 접근 시 root 계정 사용을 막기 위해 /etc/pam.d 디렉터리에 있는 remote 서비스(또는 login 서비스) 설정 파일에 pam_securetty.so 모듈 추가
        2. /etc/securetty 파일에 pts/~ 터미널을 모두 제거
          • tty — 서버와 연결된 모니터, 키보드 등을 통해 사용자가 콘솔로 직접 로그인
          • pts — Telnet, 터미널 등을 통해 접속하는 가상 터미널
        3. Telnet 클라이언트로 서버에 root 계정 접근 시 거부
        4. /var/log/secure를 통한 pam 모듈 로그 확인
      • 유닉스/리눅스 시스템별 root 계정 원격 접속 제한 설정
        • SOLARIS
          • /etc/default/login 파일의 CONSOLE 라인을 통해 root의 원격 접속 제한 가능
          • CONSOLE 라인을 주석 처리하지 않으면 콘솔에서만 접속 가능
        • AIX — /etc/security/user 파일의 rlogin 설정을 false로 하면 외부 접속 불가능
        • HP-UX — /etc/securetty 파일의 CONSOLE 라인을 통해 root의 원격 접속 제한 가능
      • 취약점 점검 — w 명령을 통해 현재 접속 중인 root 사용자 정보 확인
      • SSH root 원격 접속 제한 설정 — sshd_config의 PermitRootLogin 항목을 no로 설정
    5. PAM 활용 예 (시스템 취약점 분석, 평가 일부 항목)
      • 계정 잠금 임계값 설정 — pam_tally2.so(또는 pam_tally.so) 모듈 이용
      • 실습
        1. /etc/pam.d 디렉터리에 있는 system-auth 서비스 설정 파일에 모듈 추가
          • auth required pam_tally2.so deny=5 unlock_time=120
        2. telnet 5회 실패 시 계정 잠김
        3. /var/log/secure로 로그 확인
        4. pam_tally2 명령으로 실패 횟수 확인 및 초기화
          • pam_tally2 -u 계정명 — 실패 횟수 확인
          • pam_tally2 -u 계정명 -r — 실패 횟수 초기화
      • 유닉스/리눅스 시스템별 계정 잠금 임계값 설정
        • SOLARIS
          • /etc/default/login — RETRIES
          • /etc/security/policy.conf
            • LOCK_AFTER_RETRIES=YES
            • 5.9 버전 이상
          • LINUX — /etc/pam.d/system-auth
            • no_magic_root — root 계정은 패스워드 잠금 설정을 적용하지 않음
            • reset — 접속 시도 성공 시 실패한 횟수 초기화
          • AIX — /etc/security/user
          • HP-UX
            • /tcb/files/auth/system/default
            • /etc/default/security
    6. PAM 활용 예 (시스템 취약점 분석, 평가 일부 항목)
      • root 계정 su 제한 — pam_whell.so 모듈 이용
      • 실습
        1. wheel 그룹(su 명령어 사용 그룹)에 su 명령어 사용자 추가
          • usermod -G wheel 계정명
          • 또는 직접 /etc/group 파일 수정
        2. wheel 그룹의 사용자만 su 명령어를 허용하도록 /etc/pam.d 디렉터리에 있는 su 서비스 설정 파일에서
          • auth required pam_wheel.so use_uid debug
      • 유닉스/리눅스 시스템별 root 계정 su 제한 설정
        • SOLARIS, LINUX, AIX, HP-UX
          1. wheel 그룹 및 그룹 내 구성원 존재 여부 확인
          2. wheel 그룹이 su 명령어를 사용할 수 있는지 확인
          3. 파일 권한 확인
        • LINUX PAM 모듈 이용 시
          1. wheel 그룹 및 그룹 내 구성원 존재 여부 확인
          2. 허용 그룹 설정 여부 확인
      • sudo 명령을 이용한 관리자 권한 부여
        • 개요
          • sudo 명령 설정 파일 — /etc/sudoers
        • sudo 명령어 및 sudoers 파일 설정
          • 계정명 호스트명=(실행 권한 계정명) [NOPASSWD:]명령어
  4. 시스템 로그 설정과 관리
    1. 개요
      • 유닉스 — /var/adm
      • 리눅스 — /var/log
      • /etc/syslog.conf — 시스템 로그 파일 위치 저장
    2. 유닉스/리눅스 주요 로그 파일
      • utmp(x) 로그 파일(Linux/Unix(SunOS))
        • 개요
          • 현재 로그인한 사용자의 상태 정보를 담고 있는 로그 파일
          • w, who, finger 등
          • Linux — /var/run/utmp
          • Unix(SunOS) — /var/adm/utmpx
        • w 명령 실습
          • USER
          • TTY — 터미널 장치명
          • FROM — 원격 호스트 주소
          • LOGIN@ —로그인한 시간
          • IDLE — 아무 입력도 수행하지 않은 idle 시간
          • WHAT — 현재 수행하는 작업(명령어)
      • wtmp(x) 로그 파일
        • 개요
          • 사용자의 성공한 로그인/로그아웃 정보, 시스템의 Boot/Shutdown 정보에 대한 히스토리를 담고 있는 파일
          • last
        • last 명령 실습
          • 계정명, 터미널 타입, 접속 주소, 로그인 시간, 로그아웃 시간 등
          • reboot 사용자(pseduo user)를 통해 Boot/Shutdown 정보 확인
      • lastlog 로그 파일
        • 개요
          • 가장 최근에 성공한 로그인 기록을 담고 있는 로그 파일
          • lastlog — Linux
          • finger — Linux, Unix/SunOS
        • lastlog, finger 명령 실습(Linux)
          • lastlog -u 계정명 — 해당 계정의 최근 접속 기록
          • lastlog -t 일수 — 해당 일수 이내에 접속한 기록
      • btmp(Linux), loginlog(Unix(SunOS)) 로그 파일
        • 실패한 로그인 시도에 대한 기록을 담고 있는 파일
        • Linux — /var/log/btmp, 바이너리 파일로 되어 있으며 lastb 명령 사용. 실패한 모든 로그 기록
        • Unix(SunOS) — /var/adm/loginlog, 텍스트 파일, 5회 이상 실패한 로그
      • sulog 로그 파일(Unix(SunOS))
        • 개요
          • su 명령을 사용한 결과를 저장한 파일
          • Unix(SunOS) — /var/adm/sulog, 텍스트 파일
          • Linux 계열 — /var/log/secure
        • sulog 내용 확인 실습
            • — 성공
            • — 실패
      • acct/pacct 로그 파일(Linux/Unix(SunOS))
        • 개요
          • 시스템에 로그인한 모든 사용자가 로그아웃할 때까지 입력한 모든 사용자가 로그아웃할 때 입력한 명령어와 터미널의 종류, 프로세스 시작 시간 등을 저장한 로그
          • lastcomm 명령 사용
          • Linux — /var/account/pacct, 기본 생성되는 로그 파일이 아니므로 accton /var/account/pacct 명령 실행 필요
          • Unix(SunOS) — /var/amd/pacct, 기본 생성되는 로그 파일이 아니므로 /usr/lib/acct/accton /var/adm/pacct 명령 실행 필요
        • lastcomm 명령 실습(Linux)
          • flag — S(root에 의해 실행), F(exec 없이 fork에 의해 실행), X(SIGTERM 시그널에 의해 종료) 등
      • history 로그 파일
        • 계정별로 실행한 명령어에 대한 기록을 저장한 파일
        • .셸종류_history
      • secure 로그 파일(Linux)
        • 사용자/그룹 생성/삭제, 로그인 등의 사용자 인증에 대한 정보를 기록하고 있는 로그 파일
        • 원격에서 접속한 내역과 su 명령을 수행한 내역 등 저장
        • Linux — /var/log/secure
      • message 로그 파일(Linux)
        • 리눅스 시스템의 가장 기본적인 시스템 로그파일
        • 시스템 데몬들의 실행 상황과 내역, 사용자들의 접속 정보, TCP Wrapper 접근 제어 정보 등
        • Linux — /var/log/messages
      • dmesg 로그 파일(Linux)
        • 리눅스가 부팅될 때 출력되는 모든 메시지 기록
        • 텍스트 형식의 로그 파일을 보거나 dmesg 명령
        • Linux — /var/log/dmesg
      • boot.log 로그 파일(Linux)
        • 리눅스가 부팅되리 때 파일 시스템에 대한 체크, 서비스 데몬들의 실행 상태 등을 기록하고 있는 로그 파일로 성공/실패 여부 확인 가능
        • Linux — /var/log/boot.log
      • xferlog 로그 파일(Linux)
        • 개요
          • 리눅스 시스템의 FTP 서비스 로그 파일
          • vsFTP, ProFTP 등 다양한 FTP 서버 프로그램에서 내역 기록
          • FTP 접속 일시, 원격 호스트와 사용자 정보, 업로드/다운로드한 파일 등
          • /var/log/xferlog
        • /var/log/xferlog 로그 실습
          • 전송 날짜 및 시간
          • 전송 소요 시간(초)
          • 원격 호스트 주소
          • 전송 파일 크기(바이트)
          • 전송 파일명
          • 전송 유형
            • a — 아스키/텍스트
            • b
          • 액션 플래그 — FTP 서비스에서 어떤 특별한 동작을 수행했는지 나타내는 플래그
            • _ — 액션 없음
            • C(compressed) — 파일이 압축됨
            • U(uncompressed) — 압축된 파일이 해제됨
            • T(archived(tar)) — 파일이 아카이브됨(tar로 묶임)
          • 전송 방향
            • i(incoming)
            • o(outgoing)
            • d(delete) — 서버에 있는 파일 삭제
          • 접근 방향
            • r(real) — 로컬 시스템 계정으로 접근
            • a(anonymous) — 익명 계정으로 접근
            • g(guest)
          • 사용자명
          • 서비스명
          • 인증 방법
            • 0 — 없음
            • 1 — RFC 931 인증
          • 인증된 사용자 ID — *인 경우 이용 불가능 상태
          • 완료 상태
            • c(complete)
            • i(incomplete)
      • cron 로그 파일(Linux)
      • maillog 로그 파일(Linux)
        • 시스템에서 동작 중인 메일서버의 메일 송수신 관련 작업을 기록한 로그 파일
        • /var/log/maillog
    3. syslog 설정 및 관리
      • 개요
        • /etc/syslog.conf
          • syslogd가 실행될 때 참조되는 로그 설정 파일
          • 어떤 로그를 어디에 남길지 로그 저장 규칙 저장
        • rsyslog — syslog 개선
        • 기밀성, 무결성, 가용성 등 정보보호 특성을 고려하지 않고 개발
          • 로그 전송의 신뢰성 보장을 위해 TCP 이용 권고
          • 기밀성 보장을 위해 BEEP 이용 권고
      • facility 로그 생성 서비스
        • *
        • auth, authpriv
        • cron
        • daemon — telnet, ftp 등과 같은 데몬에 의한 메시지
        • kern — 커널 메시지
        • Ipr — 프린터 데몬인 Ipd에 의해 발생되는 메시지
        • mail
        • news
        • uucp
        • syslog
        • local0 ~ local7 — 시스템 부팅 메시지 기록, 기타 여분 서비스에 사용하기 위함
      • priority — 로그 수준
        • Emergency(emerg)
          • 시스템이 전면 중단되는 패닉 상태, 전체 공지가 필요한 상황
          • system is unsable
        • alert(alert)
          • 즉각적인 조치가 필요한 상황(시스템 데이터베이스 오류 등)
          • action must be taken immediately
        • Critical(crit)
          • 하드웨어 등의 심각한 오류가 발생한 상황
          • ciritical condition
        • Error(err)
          • 일반적인 에러/오류가 발생한 상황
          • error condition
        • Warning(warning)
          • 경고 메시지
          • warning condition
        • Notice(notice)
          • 에러/오류는 아니지만 관리자의 조치가 필요한 상황
          • normal, but significant condition
        • Information(info)
          • 의미 있는 정보 관련 메시지
          • information message
        • debug(debug)
          • 디버깅용 메시지
          • debug-level message
        • facility에 로그 수준을 지정하여 해당 수준 이상의 상황이 발생했을 때 로그 기록
      • action
        • 로그를 어디에 남길 것인지 결정
        • 로그 파일 — 파일명 지정
        • 콘솔 — /dev/console로 지정 시 콘솔 출력
        • 원격 로그 서버 — “@호스트 주소”를 통해 지정한 호스트로 로그를 보냄
        • 특정 사용자 — 지정된 사용자의 스크린으로 메시지 전송
          • — 현재 로그인된 모든 사용자의 스크린으로 메시지 전송
    4. 리눅스 로그 관리
      • 로그 모니터링
        • tail -f /var/log/messages — /var/log/secure 등 텍스트 형식 로그 실시간 모니터링
        • 바이너리 로그 파일은 별도 명령어
      • 로그 파일 순환 관리
        • logrotate — 시스템 로그 파일을 관리하기 위한 도구. 순환, 압축 등 기능 제공
          • 데몬(위치)(/usr/sbin/logrotate) — logrotate 데몬 위치 및 데몬 프로그램
          • 데몬 설정 파일(/etc/logrotate.conf) — logrotate 데몬 설정 파일
          • 설정 디렉터리(/etc/logrotate.d) — logrotate를 적용할 프로세스의 개별 설정 파일이 위치한 디렉터리
          • 상황 파일(/var/lib/logrotate.status) — logrotate를 수행한 작업 내역을 보관한 파일
          • cron(일 단위)(/etc/cron.daily/logrotate) — logrotate는 주기적으로 실행돼야 하므로 cron 데몬에 의해 일 단위로 실행됨
        • logrotate.conf 주요 옵션
          • daily, monthly, weekly
          • rotate n
          • create [퍼미션] [소유자] [소유 그룹] — 순환 시 새롭게 로그 파일을 생성하며 퍼미션, 소유자, 소유 그룹 지정 가능
          • dateext — 로그 파일의 확장자로 날짜를 붙여 보관
          • compress, noncompress
          • size n
          • include /etc/logrotate.d — 해당 디렉터리에 있는 개별 데몬/프로세스 설정 파일 포함
        • missingok — 로그 파일이 없어도 오류 발생 x
        • notifempty — 로그 파일이 비어있는 경우 순환하지 않음
        • sharedscripts — 로그 파일이 여러 개 있어도 스크립트를 공유하여 prerotate, postrotate 스크립트를 한 번만 실행
        • postrotate/endscript — 순환 후 스크립트 파일 실행

5. 시스템 해킹

  1. 버퍼 오버플로우 공격
    • 개요
      • 스택 버퍼 오버플로우
      • 힙 버퍼 오버플로우
    • 버퍼 오버플로우 이해를 위한 C언어 함수
      • 주요 C언어 함수
        • strcpy(char *dst, const char *src) — src 문자열을 dst 버퍼에 저장
        • strncpy(char *dst, const char *src, size_t len)
        • size_t strlen(const char *str) — str의 null 문자를 제외한 바이트 수 반환
        • sizeof(피연산자) — 피연산자 크기 반환
      • C언어에서 문자열 처리 방식 — null 문자(0x00)로 문자열 끝 표현
    • 스택 버퍼 오버플로우 대응 기술
      • 스택 가드 — 메모리상에서 프로그램의 복귀 주소와 변수 사이에 특정 값을 저장해두었다가 그 값이 변경되었을 경우를 오버플로우로 가정하여 프로그램 실행 중단
      • 스택 쉴드 — 함수 시작 시 복귀 주소를 Global RET라는 특수 스택에 저장해두었다가 함수 종료 시 저장된 값과 스택의 RET 값을 비교하여 다를 경우 오버플로우로 가정하여 실행 중단
      • ASLR(Address Space Layout Randomization) — 주소 공간 배치를 난수화하는 기법
  2. 레이스 컨디션 공격
    • 개요
      • 둘 이상의 프로세스나 스레드가 공유 자원에 동시에 접근할 때 순서에 따라 비정상적인 결과가 발생하는 조건/상황
      • 실행되는 프로세스가 임시 파일을 만드는 경우 악의적이니 프로그램을 통해 그 프로세스의 실행 중에 끼어들어 임시 파일을 목적 파일로 연결(심볼릭 링크)하여 악의적인 행위를 하는 것
      • 프로세스가 setuid 설정이 되어 root 권한으로 실행된다면 권한 상승을 통한 중요 자원에 접근하는 심각한 문제가 발생 가능
    • 레이스 컨디션 대응 방안
      • 가능하면 임시 파일을 생성하지 않음
      • 파일 생성 시 이미 동일한 파일이 존재하는 경우, 파일 생성 또는 쓰기 금지
      • 사용하고자 하는 파일에 링크가 걸려있으면 실행 중단
      • umask를 최하 022 정도로 유지하여 임시로 생성한 파일이 공격자에 의해 악의적으로 삭제되지 않도록 함
  3. 포맷 스트링 공격
    • 개요
      • 포맷 스트링 — C언어의 printf() 등의 함수에서 사용되는 문자열의 입출력 형태를 정의하는 문자열
      • 외부로부터 입력된 값을 검증하지 않고 입출력 함수의 포맷 스트링을 그대로 사용하는 경우 발생 가능한 취약점
      • 프로세스 공격, 메모리 내용 읽거나 쓰기 → 프로세스의 권한을 획득하여 임의의 코드 실행
    • 공격 원리 실습
      • %n — 이전까지 출력한 총 바이트 수를 지정한 변수(4바이트 단위)에 저장
      • %hn — 2바이트 단위 저장
      • 포맷 스트링 취약점 — 포맷 스트링을 인자로 하는 함수 사용 시 포맷 스트링을 지정하지 않고 사용자 입력을 통해서 포맷 스트링이 결정된다면 이를 조작하여 메모리 내용을 참조하고 특정 영역 값을 변경할 수 있음
    • 포맷 스트링 대응 방안 — 포맷 스트링을 함수의 입력 파라미터로 직접 사용하지 않는다