보안 패치가 나오기 전에 이루어지는 공격은 제로데이(Zero-day) 공격이다.
취약점이 공개되거나 발견된 뒤 패치가 배포되기까지의 공백 기간을 노리므로, 시그니처 기반 탐지로는 막기 어렵고 행위 기반 탐지나 가상 패치 등으로 대응한다.
- 사회공학: 기술적 취약점이 아니라 사람의 심리·신뢰를 이용해 정보를 빼내는 공격이다.
- 분산 서비스 거부(DDoS): 다수의 감염 시스템으로 대상의 자원을 고갈시키는 공격이다.
- 무차별 대입: 가능한 모든 값을 대입해 패스워드 등을 알아내는 공격이다.
거짓 자원을 실제처럼 보이게 해 공격을 유도하고 침입자 정보를 수집하는 시스템은 허니팟(Honeypot)이다.
허니팟은 정상 사용자가 접근할 이유가 없으므로 접근 자체가 의심 행위가 되며, 공격자의 수법과 도구를 관찰·기록하는 데 쓰인다.
- IPS: 트래픽을 검사해 침입을 실시간으로 차단하는 시스템이다.
- DMZ: 외부에 공개하는 서버를 내부망과 분리해 두는 네트워크 구간이다.
- Firewall: 정책에 따라 트래픽을 허용·차단하는 접근통제 장비이다.
게시판이나 이메일 등에 악의적인 스크립트를 삽입하여 게시글이나 이메일을 읽는 사용자의 쿠키를 탈취하는 공격 기법이다.
설명된 공격은 XSS(Cross Site Scripting)이다.
게시글·이메일에 삽입된 스크립트가 이를 읽는 사용자의 브라우저에서 실행되어 쿠키(세션 정보)를 공격자에게 전송하는 것이 XSS의 전형적인 피해이다.
- SQL Injection: 입력값으로 DB 쿼리를 조작하는 공격으로, 사용자 브라우저에서 실행되지 않는다.
- DNS Spoofing: DNS 응답을 위조해 사용자를 가짜 사이트로 유도하는 공격이다.
- IP Spoofing: 출발지 IP 주소를 위조해 신뢰 관계를 악용하는 공격이다.
커널 부팅 과정의 로그를 확인하는 명령어는 dmesg이다.
dmesg는 커널 링 버퍼에 쌓인 메시지를 출력해 부팅 시 장치 인식, 드라이버 적재, 하드웨어 오류 등을 확인하게 해 준다.
- cron: 작업을 주기적으로 실행하는 스케줄링 데몬이다.
- wtmp: 로그인·로그아웃·재부팅 이력을 담은 로그 파일로, last 명령으로 확인한다.
- sulog: su 명령 사용 기록을 담은 로그 파일이다.
국내의 국가보안기술연구소 주도로 학계, 연구소, 정부기관 등의 암호 전문가들이 공동 개발한 암호화 알고리즘으로 KS인증을 획득하였다.
설명된 암호 알고리즘은 ARIA이다.
ARIA는 국가보안기술연구소(NSRI) 주도로 학계·연구소·정부기관이 함께 개발한 128비트 블록 암호로, KS 표준으로 제정되었다.
- DES: 미국 IBM이 개발해 미국 표준으로 채택된 블록 암호이다.
- SEED: 한국인터넷진흥원(KISA) 주도로 개발된 국산 블록 암호로, 국가보안기술연구소 주도 개발이 아니다.
- IDEA: 스위스에서 개발되어 PGP 등에 쓰인 블록 암호이다.
리버스 엔지니어링 기법에 해당하는 것은 언패킹이다.
언패킹은 압축·암호화된 실행 파일을 원래 코드로 복원해 분석할 수 있게 만드는 작업으로, 분석자가 수행하는 리버싱 기법이다. 나머지는 모두 분석을 막는 안티 리버싱 쪽 기법이거나 무관한 기술이다.
- 난독화: 코드를 이해하기 어렵게 변형하는 안티 리버싱 기법이다.
- 디지털 서명: 코드의 출처와 무결성을 확인하는 기술로, 리버싱 기법이 아니다.
- 안티 디버깅: 디버거 사용을 탐지·방해하는 안티 리버싱 기법이다.
소유자가 root이고 SetUID 비트를 가진 프로세스가 생성한 임시 파일의 처리가 완료되기 전에 공격자의 프로세스가 동일한 이름의 심볼릭 링크 파일을 생성하여 root 소유의 파일 내용을 수정하는 공격 기법이다.
설명된 공격은 Race Condition(경쟁 조건) 공격이다.
SetUID root 프로그램이 임시 파일을 확인하고 사용하는 시간 차이를 노려, 그 사이에 같은 이름의 심볼릭 링크를 만들어 root 권한으로 원하는 파일(예: /etc/passwd)을 수정하게 만든다.
- Format String: 서식 지정자를 그대로 넘겨 메모리를 읽거나 쓰는 공격이다.
- Heap Overflow: 힙 영역 버퍼를 넘치게 해 인접 데이터를 덮어쓰는 공격이다.
- Stack Overflow: 스택 버퍼를 넘치게 해 반환 주소 등을 덮어쓰는 공격이다.
파일 시스템 상태를 점검하고 문제를 복구하는 명령어는 fsck이다.
fsck(file system check)는 슈퍼블록, i-node, 디렉터리 구조의 불일치를 검사·수리하며, 점검 대상 파일 시스템은 마운트 해제 상태에서 실행하는 것이 원칙이다.
- fdisk: 디스크 파티션을 생성·삭제·조회하는 명령어이다.
- df: 파일 시스템별 디스크 사용량을 보여 주는 명령어이다.
- fstab: 부팅 시 마운트할 파일 시스템을 정의한 설정 파일(/etc/fstab)로, 명령어가 아니다.
root:x:0:0:root:/root:/bin/bash
두 번째 필드의 x는 실제 패스워드가 아니라 패스워드가 /etc/shadow에 저장되어 있음을 나타내는 표시이므로, 패스워드가 'x'라는 설명이 틀렸다.
/etc/passwd 필드는 계정명:패스워드 표시:UID:GID:설명:홈 디렉터리:로그인 셸 순서이다.
- 첫 번째 필드에 따라 계정명은 root이다.
- 여섯 번째 필드에 따라 홈 디렉터리는 /root이다.
- 일곱 번째 필드 /bin/bash에 따라 기본 셸은 bash이다.
서버가 검증 없이 요청을 처리해 접근통제를 우회하고 내부 데이터가 탈취되는 취약점은 SSRF(Server-Side Request Forgery)이다.
SSRF는 공격자가 조작한 URL로 서버가 대신 내부 요청을 보내게 만들어, 외부에서 직접 접근할 수 없는 내부 시스템·메타데이터에 접근하는 공격이다. OWASP Top 10 2021에서 A10으로 새로 추가되었다.
- XXE: XML 외부 엔티티 처리를 악용하는 취약점으로, 2021판에서는 Security Misconfiguration에 통합되었다.
- Cryptographic Failures: 암호화 미적용이나 취약한 암호 사용으로 민감 데이터가 노출되는 항목이다.
- Insufficient Logging & Monitoring: 2017판 항목명으로, 로깅·모니터링 부족을 다룬다.
405는 Method Not Allowed이므로 Request Entity Too Large라고 한 짝이 틀렸다.
405는 요청 메소드가 해당 자원에서 허용되지 않을 때의 응답이고, 요청 본문이 너무 큰 경우는 413(Request Entity Too Large, 현재 명칭은 Content Too Large)이다.
- 301 Moved Permanently: 요청 자원이 영구적으로 다른 URL로 이동했음을 뜻한다.
- 304 Not Modified: 캐시된 자원이 변경되지 않았음을 뜻한다.
- 401 Unauthorized: 인증이 필요하거나 인증에 실패했음을 뜻한다.
사용자 모르게 사용자의 권한으로 공격자가 의도한 요청을 서버에 보내게 하는 공격은 CSRF이다.
피해자가 로그인한 상태에서 악성 스크립트가 담긴 페이지를 열면 브라우저가 세션 쿠키를 포함한 위조 요청을 보내고, 서버는 이를 정상 요청으로 처리한다.
- Slowloris: HTTP 헤더를 아주 느리게 보내 연결을 오래 점유하는 서비스 거부 공격이다.
- Heartbleed: OpenSSL Heartbeat 구현 결함으로 서버 메모리 내용을 유출하는 취약점이다.
- DNS Cache Poisoning: DNS 캐시에 위조 응답을 심어 사용자를 가짜 주소로 유도하는 공격이다.
세션을 활성 상태로 유지하는 목적의 TLS 프로토콜은 Heartbeat Protocol이다.
Heartbeat는 데이터가 오가지 않는 동안에도 상대가 살아 있는지 확인하는 keep-alive 메시지를 주고받으며, OpenSSL의 구현 결함이 Heartbleed 취약점으로 알려졌다.
- Alert Protocol: 오류나 연결 종료 등 경고 상황을 상대에게 알린다.
- Connection Protocol: TLS의 하위 프로토콜이 아니다. TLS는 Handshake·Change Cipher Spec·Alert·Heartbeat·Record 등으로 구성된다.
- Application Data Protocol: 응용 계층 데이터를 실어 나르는 용도로, 세션 유지 목적이 아니다.
메모리 영역의 위치를 무작위로 배치하는 기법은 ASLR(Address Space Layout Randomization)이다.
스택·힙·라이브러리 주소를 실행할 때마다 바꿔, 버퍼 오버플로 공격에서 공격자가 점프할 주소를 예측하기 어렵게 만든다.
- X.509: 공개키 인증서의 형식 표준이다.
- PAM: 리눅스에서 인증 방식을 모듈로 교체·조합할 수 있게 하는 플러그형 인증 모듈이다.
- ASBR: 메모리 주소 무작위화 기법의 명칭이 아니다.
현재 시스템에 로그온하고 있는 사용자에 대한 구성 정보를 저장한다.
현재 로그온한 사용자의 구성 정보를 저장하는 루트키는 HKEY_CURRENT_USER이다.
HKCU는 바탕화면·제어판 설정 등 로그온 사용자별 정보를 담으며, 실제로는 HKEY_USERS 아래 해당 사용자 SID 키에 연결된 것이다.
- HKEY_CLASSES_ROOT: 파일 확장자 연결과 COM 객체 등록 정보를 저장한다.
- HKEY_LOCAL_MACHINE: 하드웨어·소프트웨어 등 시스템 전체에 적용되는 설정을 저장한다.
- HKEY_CURRENT_CONFIG: 현재 사용 중인 하드웨어 프로필 정보를 저장한다.
PGP는 IETF가 아니라 필 짐머만(Phil Zimmermann)이 개발했으므로 설명이 틀렸다.
IETF는 이후 PGP를 바탕으로 OpenPGP 표준을 정했을 뿐이다. 반면 PEM은 IETF가 개발한 메일 보안 표준이다.
- PGP는 메시지 해시를 송신자 개인키로 서명하는 전자 서명으로 인증을 제공한다.
- PGP는 서명 후 ZIP 알고리즘으로 메시지를 압축한다.
- PGP는 일회용 세션키로 대칭 키 암호화해 기밀성을 제공하고, 세션키는 수신자 공개키로 암호화한다.
nmap의 -R 옵션은 RPC 스캔이 아니라 모든 대상에 대해 역방향 DNS 조회를 수행하는 옵션이다.
RPC 스캔은 -sR 옵션으로 수행했으며(현재는 -sV 버전 탐지에 통합), -R은 -n과 반대로 이름 해석을 항상 하도록 지정한다.
- -O 옵션은 TCP/IP 스택 지문으로 운영체제를 확인한다.
- -n 옵션은 DNS 이름 해석(Lookup)을 하지 않는다.
- -v 옵션은 스캔 진행 상황과 결과를 상세하게 출력한다.
TCP 포트 번호 (가) 을 사용하는 (나) 을/를 통해, 사용자는 전자우편 서버에 메일 박스 생성, 삭제 및 이름 변경이 가능하다.
| (가) | (나) | |
|---|---|---|
| ① | 110 | SMTP |
| ② | 143 | SMTP |
| ③ | 110 | IMAP |
| ④ | 143 | IMAP |
(가)는 143, (나)는 IMAP이다.
IMAP은 메일을 서버에 둔 채 관리하는 프로토콜로, 서버의 메일 박스를 생성(CREATE)·삭제(DELETE)·이름 변경(RENAME)할 수 있으며 TCP 포트 143을 사용한다.
- 포트 110은 POP3가 사용하는 포트로, POP3는 메일을 내려받는 기능 위주라 서버 메일 박스 관리 기능이 없다.
- SMTP는 메일 송신·중계 프로토콜(포트 25)로, 메일 박스를 관리하지 않는다.
프로그램을 실행시키기 위한 가상의 메모리 공간이 할당되면, 할당된 메모리 공간은 여러 영역으로 나뉘어 관리된다. 그중 ( )은 프로세스 로직이 실행되는 데 필요한 파라미터, 지역변수, 반환 주소 등이 저장된다.
빈칸에 들어갈 영역은 스택 영역이다.
함수가 호출될 때마다 스택에 파라미터, 반환 주소, 이전 프레임 포인터, 지역변수로 이루어진 스택 프레임이 쌓이고, 함수가 끝나면 해제된다. 반환 주소가 있기 때문에 스택 버퍼 오버플로의 공격 대상이 된다.
- 텍스트 영역: 실행할 기계어 코드가 저장되는 영역이다.
- 힙 영역: 실행 중 동적으로 할당되는 메모리 영역이다.
- 데이터 영역: 전역·정적 변수가 저장되는 영역이다.
chmod 1111 /directory
chmod 1111을 수행하면 /directory에는 Sticky Bit가 부여된다.
네 자리 8진수의 맨 앞자리는 특수 권한으로 SetUID=4, SetGID=2, Sticky Bit=1이다.
1111 → 특수 권한 1(Sticky Bit) + 일반 권한 111(--x--x--x)
결과 표시: d--x--x--t
- Read: 일반 권한 111은 소유자·그룹·기타 모두 실행(x)만 있고 읽기(r)는 없다.
- SetGID: 맨 앞자리가 2(또는 2를 포함한 값)일 때 부여된다.
- SetUID: 맨 앞자리가 4(또는 4를 포함한 값)일 때 부여된다.