시스템 보안은 리눅스와 윈도를 오가며 파일 위치, 로그, 명령어를 묻는 문제가 많습니다. 외워야 할 게 많아 보이지만 자주 나오는 것만 정확히 알면 점수가 안정됩니다. 이번에는 8문제로 핵심을 훑어 봅니다.
이 문제들은 학습용으로 직접 만든 예상문제이며 실제 시험과 다를 수 있습니다. 최신 출제 범위와 일정은 KISA 등 공식 공지를 확인하세요. 정답과 해설은 접혀 있으니, 먼저 스스로 답을 적어 본 뒤 눌러서 확인하세요.
이 글의 구성
- 리눅스 계정과 로그(문제 1~3, 7)
- 윈도 이벤트와 레지스트리(문제 4, 8)
- 프로그램 취약점(문제 5~6)
문제 1. 계정 파일 해석
다음은 /etc/passwd 와 /etc/shadow 의 한 줄이다. (1) passwd의 각 필드 의미를 순서대로 쓰시오. (2) shadow의 $6$ 은 무엇을 의미하는가.
user1:x:1001:1001:Kim:/home/user1:/bin/bash user1:$6$ab12$....:19800:0:99999:7:::
정답 및 해설 보기
정답 (1) 계정명 : 비밀번호(x는 shadow 사용) : UID : GID : 설명 : 홈 디렉터리 : 로그인 쉘 (2) 비밀번호 해시 알고리즘이 SHA-512임을 나타낸다.
해시 접두어는 $1$ MD5, $5$ SHA-256, $6$ SHA-512 입니다. 두 번째 줄의 “ab12″는 솔트 값입니다. shadow는 root만 읽을 수 있도록 해서 해시 노출을 막습니다.
문제 2. 리눅스 로그 파일 매칭
다음 설명에 맞는 로그 파일을 쓰시오. (가) 현재 로그인한 사용자 정보 (나) 로그인과 로그아웃, 시스템 재부팅 기록(last 명령으로 확인) (다) 로그인 실패 기록(lastb 명령으로 확인) (라) 계정별 최근 로그인 시각(lastlog 명령으로 확인)
정답 및 해설 보기
정답 (가) utmp (나) wtmp (다) btmp (라) lastlog
utmp, wtmp, btmp는 텍스트가 아니라 바이너리 파일이라 전용 명령으로 읽어야 합니다. 텍스트 로그로는 SSH 인증 내역이 남는 /var/log/auth.log(데비안 계열) 또는 /var/log/secure(레드햇 계열)가 있습니다.
문제 3. SUID 파일 찾기
시스템 전체에서 SUID가 설정된 일반 파일을 찾는 명령을 쓰고, SUID가 보안상 위험한 이유를 설명하시오.
정답 및 해설 보기
정답
find / -perm -4000 -type f 2>/dev/null
SUID 파일은 실행하는 사용자가 아니라 파일 소유자의 권한으로 실행됩니다. 소유자가 root인 SUID 프로그램에 취약점이 있으면 일반 사용자가 root 권한을 얻는 권한 상승에 악용될 수 있습니다. -perm -4000 은 4000(SUID) 비트가 포함된 파일을 찾는다는 뜻이고, 2>/dev/null 은 오류 메시지를 버립니다.
문제 4. 윈도우 이벤트 ID
윈도우 보안 로그의 다음 이벤트 ID가 의미하는 바를 쓰시오. 4720, 4726, 4732, 1102
정답 및 해설 보기
정답 4720 사용자 계정 생성, 4726 사용자 계정 삭제, 4732 보안 사용 로컬 그룹에 구성원 추가, 1102 감사 로그 삭제
침해사고에서는 공격자가 백도어 계정을 만들고(4720) 관리자 그룹에 넣은 뒤(4732) 흔적을 지우는(1102) 순서가 흔하므로 묶어서 외워 두면 좋습니다. 앞서 나온 4624(로그온 성공), 4625(로그온 실패)도 함께 기억하세요.
문제 5. 버퍼 오버플로 대응
버퍼 오버플로 공격을 완화하는 기술 3가지와, 사용을 피해야 할 C 함수 3가지, 대체 함수를 쓰시오.
정답 및 해설 보기
정답 완화: 스택 카나리(스택 가드), ASLR(주소 공간 배치 무작위화), DEP/NX(스택·힙 실행 방지). 위험 함수: strcpy, strcat, gets, sprintf, scanf 등. 대체: strncpy, strncat, fgets, snprintf (길이 지정)
카나리는 반환 주소 앞에 임의 값을 두고 함수 종료 시 변조 여부를 확인합니다. 길이를 지정하는 함수도 길이를 잘못 주면 위험하니 경계 검사를 함께 해야 합니다.
문제 6. 포맷 스트링 취약점
다음 코드의 취약점을 쓰고 올바르게 고치시오. 또 공격자가 %n 을 쓰는 이유를 설명하시오.
printf(buf);
정답 및 해설 보기
정답 포맷 스트링 취약점. 수정: printf(“%s”, buf);
사용자 입력이 포맷 문자열로 해석되면 %x로 스택 값을 읽거나 %s로 임의 주소를 읽을 수 있습니다. %n 은 지금까지 출력한 글자 수를 지정한 주소에 쓰기 때문에 임의 메모리 쓰기로 이어집니다.
문제 7. cron 작성
매주 월요일 새벽 3시 30분에 /usr/local/bin/backup.sh 를 root 권한으로 실행하도록 /etc/crontab 형식으로 쓰시오.
정답 및 해설 보기
정답
30 3 * * 1 root /usr/local/bin/backup.sh
필드는 분, 시, 일, 월, 요일, 사용자, 명령 순서입니다. 요일은 0 또는 7이 일요일, 1이 월요일입니다. 이 설정 파일은 일반 사용자가 수정할 수 없게 하고, 실행하는 스크립트의 쓰기 권한도 root만 갖도록 점검해야 권한 상승 경로가 생기지 않습니다.
문제 8. 윈도우 자동 실행 레지스트리
악성코드가 재부팅 후에도 실행되도록 등록하는 대표적인 레지스트리 키 두 곳을 쓰시오.
정답 및 해설 보기
정답 HKLM\Software\Microsoft\Windows\CurrentVersion\Run, HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKLM은 모든 사용자에게, HKCU는 현재 사용자에게 적용됩니다. RunOnce 키, 시작 프로그램 폴더, 예약 작업, 서비스 등록도 같은 목적으로 쓰이므로 점검 대상입니다. Sysinternals의 Autoruns 같은 도구로 한 번에 확인할 수 있습니다.
공부 팁 3가지
- 명령어와 파일 경로는 직접 입력하면서 외우세요. 실기는 눈으로 아는 것과 손으로 쓰는 것의 차이가 큽니다.
- 리눅스와 윈도 항목을 같은 주제로 짝지어 보세요(예: 로그인 기록 — wtmp와 이벤트 4624).
- 가상머신에 리눅스를 설치해 find, last, cron 설정을 직접 해 보면 기억에 오래 남습니다. 본인 환경에서만 실습하세요.
면책: 이 글의 문제는 학습용으로 직접 만든 예상문제이며 실제 시험과 다를 수 있습니다. 시험 범위, 일정, 합격 기준은 KISA 등 공식 공지를 확인하세요.