TCB 분할은 기존 TCB를 재사용할 수 없게 만드는 구조가 아니므로 이 설명이 옳지 않다.
TCB 분할은 TCB를 계층·모듈 단위로 나누어 구현하는 방식으로, 각 부분을 독립적으로 검증하고 기존 TCB를 재사용할 수 있게 하는 것이 오히려 장점이다.
- 보안 커널이 접근 제어와 감사 추적 메커니즘을 포함한다는 설명은 보안 커널의 핵심 기능으로 옳다.
- 패스워드 설정 등 보안 관련 작업을 위해 안전한 경로(trusted path)를 제공한다는 설명은 보안 운영체제의 요건으로 옳다.
- 운영체제 결함에 따른 해킹을 막기 위해 보안 커널을 추가 이식한 운영체제라는 설명은 보안 운영체제의 정의 그대로 옳다.
○ 중앙 집중화된 정보 관리가 어려워서 정보에 대한 엄격한 접근 통제는 거의 불가능하다.
정보 소유자가 보안 수준과 접근 권한을 직접 정하는 모델은 임의적 접근통제(DAC)이다.
DAC는 소유자 재량으로 권한을 부여하므로 유연하지만, 중앙 집중 관리가 어려워 엄격한 통제가 거의 불가능하다는 단점이 지문과 일치한다.
- 비바(Biba)는 무결성 등급에 따라 중앙에서 통제하는 강제적 접근통제 모델이다.
- 역할기반 접근통제(RBAC)는 소유자가 아니라 조직의 역할에 권한을 부여해 중앙에서 관리한다.
- 벨 라파둘라(Bell-LaPadula)는 기밀성 등급에 따라 시스템이 강제하는 강제적 접근통제 모델이다.
스파이웨어가 사용자 동의 없이 정보를 수집해 외부로 전송한다는 설명이 옳다.
나머지는 다른 악성코드의 특징을 뒤섞었다. 특히 바이러스와 웜은 숙주 필요 여부와 자기 전파 능력이 반대로 서술되었다.
- 시스템 자원을 암호화해 금전을 요구하는 것은 트로이목마가 아니라 랜섬웨어의 특징이다.
- 바이러스는 숙주 프로그램에 기생해야 실행되며, 독립 실행·자기 전파는 웜의 특징이다.
- 웜은 독립적으로 실행되며 네트워크를 통해 다른 시스템으로 스스로 전파한다.
○ 이 공격의 사례는 제로데이 취약점을 활용한 Stuxnet이 있다.
특정 대상을 장기간 지속적으로 노리는 공격은 APT(지능형 지속 위협)이다.
APT는 표적을 정해 여러 공격 기법을 동원해 오래 잠복·공격하며, 제로데이 취약점을 이용해 산업 제어 시스템을 노린 Stuxnet이 대표 사례이다.
- DDoS는 다수의 좀비 PC로 트래픽을 쏟아내 서비스를 마비시키는 공격으로 지속적 표적 침투와 다르다.
- Ransomware는 데이터를 암호화하고 금전을 요구하는 악성코드이다.
- Reverse Engineering은 프로그램을 분석해 구조를 알아내는 기법으로 공격 유형 자체가 아니다.
시그니처 기반 탐지는 이상탐지가 아니라 오용탐지를 가리키므로 이 설명이 옳지 않다.
오용탐지는 알려진 공격 패턴(시그니처)과 비교하고, 이상탐지는 정상 행위 프로파일에서 벗어난 이벤트를 탐지한다.
- 이상탐지는 패턴이 알려지지 않은 제로데이 공격도 정상 범위 이탈로 잡을 수 있어 오용탐지보다 유리하다는 설명은 옳다.
- 오용탐지가 알려진 공격의 패턴을 탐지한다는 설명은 옳다.
- 이상탐지가 정상·평균 상태를 크게 벗어나는 이벤트를 탐지한다는 설명은 옳다.
브라우저와 웹 서버 사이에서 요청·응답을 중계하며 데이터를 수정할 수 있는 도구는 웹 프록시(web proxy)이다.
Burp Suite, Paros 같은 웹 프록시는 중간에서 HTTP 메시지를 가로채 변조할 수 있어 웹 취약점 점검에 쓰인다.
- 루트킷은 침입 흔적을 숨기고 관리자 권한을 유지하기 위한 도구 모음이다.
- 애드웨어는 사용자에게 광고를 띄우는 소프트웨어이다.
- 포트 스캐너는 대상 시스템의 열린 포트와 서비스를 확인하는 도구이다.
SELECT * FROM member
WHERE id = 'admin' and password = ''or''='';
입력값으로 쿼리 조건을 항상 참으로 만들어 인증을 우회하는 SQL Injection 공격이다.
패스워드 자리에 ''or''=''가 들어가면 빈 문자열 비교가 항상 참이 되어 패스워드 없이 admin으로 로그인된다.
- XSS는 웹 페이지에 악성 스크립트를 삽입해 다른 사용자의 브라우저에서 실행시키는 공격이다.
- CSRF는 인증된 사용자의 권한으로 의도하지 않은 요청을 위조해 보내게 하는 공격이다.
- Format String은 printf 계열 함수의 서식 지정자를 악용해 메모리를 읽거나 쓰는 공격이다.
○ (나) 는 시스템 자체의 결함 때문에 발생하는 보안 문제를 체계적으로 관리하는 것이다.
○ (다) 는 시스템 내부 또는 외부에서 시스템에 어떤 영향을 미쳤을 경우, 해당 사항을 기록하고 관리한다.
(가)는 세션 관리, (나)는 취약점 관리, (다)는 로그 관리이다.
활성화된 접속을 관리하는 것은 세션 관리, 시스템 자체 결함으로 생기는 보안 문제를 다루는 것은 취약점 관리, 시스템에 미친 영향을 기록하는 것은 로그 관리이다.
- (가)를 로그 관리로 본 조합은 접속 관리와 기록 관리를 혼동했다.
- (다)를 계정 관리나 세션 관리로 본 조합은 기록·보존 기능을 놓쳤다.
- (나)를 권한 관리로 본 조합은 시스템 결함 관리가 취약점 관리임을 놓쳤다.
문맥 교환은 한 프로세스 내부가 아니라 CPU가 실행 중인 프로세스를 다른 프로세스로 바꿀 때 발생하므로 이 설명이 옳지 않다.
문맥 교환 시 현재 프로세스의 상태를 PCB에 저장하고 다음 프로세스의 상태를 PCB에서 복원한다.
- 프로세스가 실행 중인 프로그램이라는 설명은 옳다.
- 프로세스 상태에 준비·실행·종료 등이 있다는 설명은 옳다(대기·생성 상태도 있다).
- 프로세스 관리 정보가 프로세스 제어 블록에 저장된다는 설명은 옳다.
소유자 실행 자리의 s는 SetUID이며, 권한을 숫자로 쓰면 4755이다.
특수권한 자리: SetUID는 4, SetGID는 2, Sticky bit는 1이다. 소유자 rws → rwx(4+2+1=7)+SetUID, 그룹 r-x → 4+1=5, 기타 r-x → 4+1=5.
따라서 특수권한 4를 앞에 붙여 4755가 된다.
- SetGID였다면 s가 그룹 실행 자리에 나타나야 하므로 SetGID로 본 조합은 틀렸다.
- 2755는 SetGID를 나타내는 숫자이므로 소유자 자리 s와 맞지 않는다.
ㄴ. /etc/passwd 파일의 소유자와 권한 설정을 확인한다.
ㄷ. 소유자가 없는 파일과 디렉터리를 관리자가 삭제하거나 소유자를 변경한다.
세 가지 모두 리눅스 서버 보안 관리 항목으로 옳다.
모두 계정·파일 권한 관리 분야의 기본 점검 항목으로, 관리자 권한 탈취와 파일 악용을 예방한다.
- ㄱ: 원격 root 접속 제한은 관리자 계정 탈취를 막기 위한 기본 점검 항목이다.
- ㄴ: /etc/passwd 파일은 소유자 root, 권한 644 이하인지 확인해 무단 변경을 막는다.
- ㄷ: 소유자가 없는 파일·디렉터리는 악용될 수 있으므로 삭제하거나 소유자를 지정한다.
chown -R은 하위 파일의 권한이 아니라 소유자를 재귀적으로 변경하므로 이 설명이 옳지 않다.
권한 변경은 chmod의 역할이며, -R 옵션을 붙이면 하위 파일까지 재귀 적용된다.
- -rw-r-xr-x는 rw-=4+2=6, r-x=4+1=5, r-x=4+1=5이므로 655로 옳다.
- 권한 문자열 첫 글자 d가 디렉터리를 뜻한다는 설명은 옳다.
- chmod u-w가 소유자(u)의 쓰기(w) 권한을 제거한다는 설명은 옳다.
ㄴ. btmp는 실패한 로그인 정보를 기록한 바이너리 파일로 lastb 명령어로 확인한다.
ㄷ. boot.log는 부팅 시 동작하는 데몬 관련 정보를 기록한다.
세 가지 모두 리눅스 로그에 대한 옳은 설명이다.
lastlog·btmp는 바이너리 파일이라 cat 대신 전용 명령어로 보고, boot.log는 텍스트 파일이다.
- ㄱ: lastlog는 사용자별 최근 로그인 정보를 기록하며 lastlog 명령어로 확인한다.
- ㄴ: btmp는 실패한 로그인 시도를 기록하는 바이너리 파일로 lastb 명령어로 확인한다.
- ㄷ: boot.log는 부팅 시 시작되는 데몬·서비스의 동작 정보를 기록한다.
버퍼 오버플로는 데이터 타입 정의의 모호함이 아니라 입력 길이 검사 부재로 발생하므로 이 설명이 옳지 않다.
strcpy, gets처럼 경계 검사를 하지 않는 함수에 버퍼 크기보다 긴 입력이 들어가면 인접 메모리(복귀 주소 등)가 덮어써진다.
- realpath()는 경로 문자열을 고정 크기 버퍼에 담아 버퍼 오버플로 취약 함수로 분류된다.
- 할당된 버퍼 한계를 넘어 인근 메모리에 덮어쓴다는 설명은 버퍼 오버플로의 정의이다.
- 스택가드, 스택쉴드, ASLR은 대표적인 버퍼 오버플로 대응 기법이다.
SET의 이중 서명으로 은행은 고객의 주문 정보를 알 수 없으므로 이 설명이 옳지 않다.
이중 서명은 주문 정보와 지불 정보를 분리해, 상점은 주문 정보만, 은행(지불 게이트웨이)은 지불 정보만 확인하도록 한다.
- SET은 전자서명과 키 교환에 RSA 공개키 암호를 사용한다.
- SET은 주문·지불 정보를 연결하는 이중 서명 프로토콜을 사용한다.
- 상점은 이중 서명 구조 때문에 고객의 카드 번호 등 지불 정보를 알 수 없다.
ㄴ. “url:”은 페이지의 URL에 검색하려는 문자가 포함된 사이트를 검색한다.
ㄷ. “title:”은 페이지의 제목에 검색하려는 문자가 포함된 사이트를 검색한다.
ㄹ. “filetype:”은 특정 파일타입만 검색한다.
옳은 것은 site:와 filetype:이다.
URL이나 제목에 특정 문자가 포함된 페이지를 찾는 연산자는 각각 inurl:, intitle:이다.
- ㄱ: site:는 특정 사이트(도메인) 안에서만 검색하므로 옳다.
- ㄴ: URL에 문자열이 포함된 페이지 검색은 url:이 아니라 inurl:이므로 틀리다.
- ㄷ: 제목에 문자열이 포함된 페이지 검색은 title:이 아니라 intitle:이므로 틀리다.
- ㄹ: filetype:은 pdf, xls 등 특정 파일 형식만 검색하므로 옳다.
ㄴ. 데이터베이스 REVOKE문은 허가된 권한을 취소하는 명령어이다.
ㄷ. 리눅스 chage는 사용자 계정의 패스워드 에이징(aging) 정보를 변경하는 명령어이다.
세 가지 모두 옳은 설명이다.
각각 웹 취약점 점검, 데이터베이스 권한 관리, 리눅스 계정 패스워드 정책 관리에 쓰이는 도구·명령어이다.
- ㄱ: OWASP-ZAP은 OWASP에서 만든 오픈소스 웹 취약점 점검 도구(프록시 기반 스캐너)이다.
- ㄴ: SQL의 REVOKE문은 GRANT로 부여한 권한을 회수한다.
- ㄷ: chage는 패스워드 최소·최대 사용 기간, 경고 일수 등 에이징 정보를 변경한다.
ㄴ. PGP에서 타임스탬프, KeyID, 공개키, 암호화된 개인키, 인증서, 사용자 ID는 개인키 링에 포함되어 있다.
ㄷ. S/MIME에서 봉인된 데이터(enveloped data)는 메시지의 비밀성을 제공하기 위해 사용된다.
ㄹ. S/MIME에서 키 관리는 X.509와 PGP에서 사용되는 키 관리의 조합 방법을 사용한다.
옳은 것은 ㄱ, ㄷ, ㄹ이며, 개인키 링에 인증서까지 포함된다고 한 ㄴ이 틀렸다.
PGP 개인키 링은 타임스탬프, KeyID, 공개키, 암호화된 개인키, 사용자 ID로 구성되며 인증서는 포함하지 않는다.
- ㄱ: PGP는 전자서명에 DSS 또는 RSA를 사용하므로 옳다.
- ㄴ: 개인키 링 구성 요소에 인증서를 넣었으므로 틀리다.
- ㄷ: S/MIME의 봉인된 데이터(enveloped data)는 암호화된 내용과 암호화된 세션키로 비밀성을 제공하므로 옳다.
- ㄹ: S/MIME 키 관리는 X.509 인증서 계층과 PGP 신뢰망 방식을 결합한 형태로 옳다.
○ 일반적으로 게시판의 목록이나 글 보기 화면은 접근 자유도를 부여하기 위해 (다) 방식을 사용하고, 게시글을 저장ㆍ수정ㆍ삭제하거나 대용량 데이터를 전송할 때는 (라) 방식을 사용한다.
(가) POST, (나) GET, (다) GET, (라) POST이다.
GET은 데이터를 URL 쿼리 문자열에 실어 노출되므로 목록·글 보기 같은 조회에 쓰이고, POST는 데이터를 요청 본문에 담아 파일 업로드·저장·수정·대용량 전송에 쓰인다.
- (다)를 POST, (라)를 GET으로 본 조합은 조회와 데이터 전송 용도를 뒤바꿨다.
- (가)를 GET, (나)를 POST로 본 조합은 URL 노출 여부를 반대로 이해했다.
ㄴ. (나)는 패스워드를 변경하지 않고 사용 가능한 최대 일수이다.
ㄷ. (다)는 패스워드가 만료되기 전에 경고를 시작하는 일수이다.
ㄹ. (라)는 사용자 계정이 만료되는 날이다.
shadow 필드 순서상 (가)~(라)는 최소 사용 일수, 최대 사용 일수, 경고 일수, 비활성 일수이므로 옳은 것은 ㄱ, ㄴ, ㄷ이다.
/etc/shadow는 계정명:암호:최종 변경일:최소:최대:경고:비활성:계정 만료일:예약 필드 순이다. 지문에서 (라) 뒤의 빈 필드가 계정 만료일이다.
- ㄱ: (가) 최소 사용 일수가 0이면 변경 후 곧바로 다시 변경할 수 있어 옳다.
- ㄴ: (나)는 패스워드 최대 사용 일수이므로 옳다.
- ㄷ: (다)는 만료 전 경고를 시작하는 일수이므로 옳다.
- ㄹ: (라)는 만료 후 계정이 비활성화되기까지의 유예 일수이며, 계정 만료일은 그다음 필드이므로 틀리다.