실행할 때마다 메모리 주소를 무작위로 배치하는 기능은 ASLR(Address Space Layout Randomization)이다.
ASLR은 스택·힙·공유 라이브러리 등의 적재 주소를 실행 시마다 바꿔, 공격자가 셸코드나 라이브러리 함수의 주소를 예측하기 어렵게 만든다. 리눅스에서는 /proc/sys/kernel/randomize_va_space 값으로 설정한다.
- DLL: 윈도에서 여러 프로그램이 공유하는 동적 연결 라이브러리이다.
- Canary: 버퍼와 반환 주소 사이에 넣은 값의 변조 여부로 스택 오버플로를 탐지하는 기법이다.
- Packing: 실행 파일을 압축·암호화해 분석을 어렵게 하는 기법이다.
작업을 주기적으로 실행하도록 예약하는 명령어는 crontab이다.
crontab -e로 분·시·일·월·요일과 실행할 명령을 등록하면 cron 데몬이 정해진 주기마다 실행한다.
- wc: 파일의 줄 수·단어 수·바이트 수를 센다.
- ps: 현재 실행 중인 프로세스 목록을 보여 준다.
- df: 파일 시스템별 디스크 사용량을 보여 준다.
리눅스에는 사용자의 비밀번호를 지정하거나 변경할 때 쓰이는 (가) 명령어가 있다. 이 명령어는 사용자의 비밀번호가 저장된 (나) 파일에 접근하여 기존 비밀번호를 새로 입력한 값으로 변경하는 기능을 한다. (가) 명령어를 일반 사용자가 실행하였다고 하더라도, 해당 프로세스가 관리자 계정만 접근권한이 있는 파일에 접근하여 비밀번호를 바꾸는 것이 가능한 이유는 (가) 명령어에 설정된 (다) 때문이다. 일반 사용자가 (다) 가 설정된 (가) 명령어를 실행하면 해당 프로세스는 일시적으로 파일 소유자인 관리자(root)의 권한을 얻게 되어 관리자만 접근할 수 있는 (나) 파일에 접근하여 해당 사용자의 비밀번호를 수정할 수 있다.
| (가) | (나) | (다) | |
|---|---|---|---|
| ① | passwrd | /etc/shadow | SetUID |
| ② | passwrd | /etc/passwd | SetRID |
| ③ | passwd | /etc/shadow | SetUID |
| ④ | passwd | /etc/shadow | SetRID |
(가)는 passwd, (나)는 /etc/shadow, (다)는 SetUID이다.
/etc/shadow는 root만 읽고 쓸 수 있지만, /usr/bin/passwd 파일에는 SetUID가 설정되어 있어 일반 사용자가 실행해도 실행 중에는 파일 소유자인 root 권한으로 동작하므로 자기 비밀번호를 변경할 수 있다.
- passwrd라는 명령어는 없으며, 비밀번호 변경 명령은 passwd이다.
- /etc/passwd에는 계정 정보만 있고 실제 패스워드 해시는 /etc/shadow에 저장된다.
- SetRID라는 특수 권한은 없으며, 특수 권한은 SetUID·SetGID·Sticky Bit이다.
[root@security ~]# umask
022
[root@security ~]# touch file1
생성된 file1의 권한은 -rw-r--r--(644)이다.
일반 파일의 기본 권한은 666(rw-rw-rw-)이고, umask에 해당하는 비트를 제거한다.
666 = 110 110 110, umask 022 = 000 010 010
110 110 110 에서 000 010 010을 빼면 110 100 100 = 644
- -rwxr-xr-x(755)는 디렉터리 기본값 777에 umask 022를 적용한 결과로, 일반 파일에는 실행 권한이 기본 부여되지 않는다.
- -r-xrwxrwx는 umask로 그룹·기타의 쓰기 비트를 제거한 결과와 맞지 않는다.
- -rw-------(600)는 umask 077일 때의 결과이다.
utmp는 현재 로그인한 사용자 정보를 바이너리 형태로 기록하므로 텍스트 형태라는 설명이 틀렸다.
utmp는 who·w 명령으로, wtmp는 last 명령으로 확인하는 바이너리 로그이며, 일반 편집기로 직접 읽지 않고 전용 명령어로 조회한다.
- wtmp는 로그인·로그아웃·재부팅 이력을 바이너리로 누적 기록한다.
- su 로그(sulog)는 su 명령 사용에 따른 권한 변경 시도와 결과를 텍스트로 기록한다.
- pacct는 사용자가 실행한 프로그램(명령) 정보를 바이너리로 기록하며 lastcomm 등으로 확인한다.
- (가) 서버는 UDP 목적지 포트 번호 68, 발신지 포트 번호 67로 지정한 뒤, 유니캐스트 메시지나 브로드캐스트 메시지를 클라이언트에 전송
- (나) UDP 사용자 데이터그램(user datagram)으로 캡슐화 이후, IP 데이터그램으로 캡슐화
- (다) DHCP 서버는 UDP 포트 번호 67에 수동 개방(passive open) 명령을 수행
- (라) 부팅된 클라이언트는 포트 번호 68에 능동 개방(active open) 명령을 수행
순서는 (다)→(라)→(나)→(가)이다.
먼저 DHCP 서버가 UDP 포트 67에서 수동 개방으로 요청을 기다리고, 부팅된 클라이언트가 포트 68에서 능동 개방한다. 클라이언트의 요청 메시지는 UDP 사용자 데이터그램, 다시 IP 데이터그램으로 캡슐화되어 전송되고, 마지막으로 서버가 목적지 포트 68·발신지 포트 67로 응답을 보낸다.
- 클라이언트의 능동 개방이 서버의 수동 개방보다 먼저 올 수는 없다. 서버가 대기 상태여야 요청을 받는다.
- 서버 응답은 클라이언트 요청이 캡슐화되어 도착한 뒤에 이루어지므로 맨 마지막이다.
- (가) 은 블루투스 공격 장치의 검색 활동을 뜻한다.
- (나) 은 블루투스의 취약점을 이용하여 블루투스 기기의 정보에 접근하는 공격이다.
- (다) 은 블루투스 장비 간의 취약한 연결 관리를 악용한 공격이다.
| (가) | (나) | (다) | |
|---|---|---|---|
| ① | 블루재킹(Bluejacking) | 블루스나핑(Bluesnarfing) | 블루프린팅(Blueprinting) |
| ② | 블루프린팅 | 블루스나핑 | 블루재킹 |
| ③ | 블루스나핑 | 블루프린팅 | 블루버깅(Bluebugging) |
| ④ | 블루프린팅 | 블루스나핑 | 블루버깅 |
(가)는 블루프린팅, (나)는 블루스나핑, (다)는 블루버깅이다.
블루프린팅은 공격 대상 블루투스 장치를 검색해 종류·서비스를 파악하는 활동이고, 블루스나핑은 취약점(OPP 등)을 이용해 주소록·파일 등 기기 정보에 접근한다. 블루버깅은 장비 간 취약한 연결 관리를 악용해 원격으로 기기를 제어한다.
- 블루재킹은 근처 기기에 명함 등 익명 메시지를 보내는 행위로, 검색 활동이나 연결 관리 악용과 다르다.
- 블루스나핑은 정보 접근 공격이지 장치 검색 활동이 아니다.
x86계열 32-bit CPU 환경에서, 구동 중인 프로세스가 사용하는 메모리 영역 중 스택 영역 관리에 사용되는 주요 레지스터는 EIP, (가) , ESP가 있다. 스택 영역에는 함수 호출 시 전달되는 파라미터, 함수 실행 중 할당되는 지역변수, 함수 종료 시 되돌아갈 리턴 주소 등이 저장된다. 파라미터 및 지역변수는 (가) 를 기준으로 오프셋 값을 설정하여 접근할 수 있다.
(가)는 스택 프레임의 기준점인 EBP(Base Pointer)이다.
함수 프롤로그에서 EBP를 현재 스택 위치로 고정하면, 파라미터는 EBP+오프셋, 지역변수는 EBP−오프셋으로 접근한다. ESP는 스택 꼭대기, EIP는 다음 실행할 명령어 주소를 가리킨다.
- ESI: 문자열 복사 등에서 원본 주소를 가리키는 범용 레지스터이다.
- EAX: 산술 연산과 함수 반환값 저장에 쓰이는 누산기 레지스터이다.
- ECX: 반복 횟수를 세는 카운터 레지스터이다.
- (가) 은(는) 보안 관리자나 보안 시스템의 탐지를 피하면서 시스템을 제어하기 위해 공격의 의도로 설치되는 악성파일로, 보통 운영체제의 합법적인 명령어처럼 모아 놓은 것을 말한다.
- (가) 은(는) 공격자의 파일, 디렉터리 및 프로세스를 숨기는 것을 제외하고 합법적인 명령어처럼 동작한다.
(가)는 루트킷(rootkit)이다.
루트킷은 ls·ps·netstat 같은 정상 명령어를 변조한 모음으로, 평소에는 원래 명령처럼 동작하면서 공격자의 파일·디렉터리·프로세스만 숨겨 탐지를 피하고 시스템 제어권을 유지한다.
- 랜섬웨어: 파일을 암호화한 뒤 복구 대가를 요구하는 악성코드이다.
- 키로거: 키보드 입력을 가로채 기록하는 악성코드이다.
- 웜: 스스로 복제해 네트워크로 전파되는 악성코드이다.
Authorization(인가)을 지문 자체라고 한 설명이 틀렸다. 인가는 인증된 사용자에게 허용할 권한을 결정하는 과정이다.
AAA는 신원을 증명하는 인증(Authentication), 접근 권한을 부여하는 인가(Authorization), 사용 내역을 기록하는 계정 관리(Accounting)로 구성된다. 지문은 인증에 쓰이는 생체 정보일 뿐이다.
- Authentication은 자신의 신원을 시스템에 증명하는 과정이다.
- Accounting 기록은 시스템에 접근한 사용자를 추적하는 데 활용된다.
- Accounting은 로그인 등 사용자 활동에 대해 시스템이 기록을 남기는 활동이다.
송신 부인방지에는 전자 서명을 적용한다.
전자 서명은 송신자만 가진 개인키로 생성되므로, 공개키로 검증되면 송신자가 나중에 보낸 사실을 부인할 수 없다.
- 대칭키 암호화: 송·수신자가 같은 키를 공유하므로 누가 만들었는지 증명할 수 없어 부인방지가 안 된다.
- 앨리어스: 메일 주소에 별칭을 붙이는 기능일 뿐 보안 기능이 아니다.
- 커버로스: 대칭키 기반 인증 프로토콜로, 메일 송신 부인방지용이 아니다.
OTP 기기는 사용자가 가지고 있는 것인 소지 기반(Something You Have) 인증 수단이다.
인증 수단은 아는 것(지식), 가진 것(소지), 자신의 특징(생체), 하는 것(행위)으로 나뉘며, OTP 토큰·스마트카드·보안카드는 소지 기반에 속한다.
- Something You Know: 패스워드·PIN처럼 사용자가 기억하는 정보이다.
- Something You Are: 지문·홍채 같은 생체 정보이다.
- Something You Do: 서명 습관·키 입력 패턴 같은 행위 특성이다.
(가) 은(는) 신뢰할 수 없는 데이터가 명령어나 쿼리문의 일부분으로서, 인터프리터로 보내질 때 발생한다. 공격자의 악의적인 데이터는 예기치 않은 명령을 실행하거나 올바른 권한 없이 데이터에 접근하도록 인터프리터를 속일 수 있다.
(가)는 OWASP Top 10 2017의 Injection(A1)이다.
SQL·OS 명령·LDAP 인젝션처럼 검증되지 않은 입력이 명령어나 쿼리의 일부로 인터프리터에 전달되어 의도치 않은 명령 실행이나 무단 데이터 접근이 일어나는 취약점이다.
- Broken Access Control: 인증된 사용자에 대한 권한 제한이 제대로 적용되지 않는 문제이다.
- Broken Authentication: 인증·세션 관리 기능이 잘못 구현되어 계정이 탈취되는 문제이다.
- Sensitive Data Exposure: 민감한 데이터를 암호화 등으로 적절히 보호하지 않는 문제이다.
- 공격자는 악의적인 스크립트가 포함된 콘텐츠를 웹 애플리케이션 서버에 업로드한다.
- 해당 콘텐츠는 웹 애플리케이션 서버에 저장된다.
- 희생자는 해당 콘텐츠를 웹 애플리케이션 서버에 요청하여 수신한다.
- 해당 콘텐츠에 포함된 악의적인 스크립트가 희생자의 디바이스에서 실행된다.
악성 스크립트가 서버에 저장된 뒤 희생자가 조회할 때 실행되므로 Stored XSS이다.
게시판 글 등에 심어 둔 스크립트가 서버에 남아 있어, 해당 콘텐츠를 요청하는 모든 사용자의 브라우저에서 반복 실행된다는 점이 특징이다.
- Reflected XSS: 스크립트가 서버에 저장되지 않고, 조작된 링크의 요청 값이 응답에 즉시 반사되어 실행된다.
- Brute Force: 가능한 값을 모두 대입해 패스워드 등을 알아내는 공격이다.
- Buffer Overflow: 버퍼 경계를 넘는 입력으로 메모리를 덮어쓰는 공격이다.
CSRF는 로그인한 사용자의 브라우저가 세션 쿠키 등 인증 정보를 담은 위조된 HTTP 요청을 보내게 만드는 취약점이다.
서버는 정상 사용자의 인증 정보가 포함된 요청이므로 그대로 처리하게 되며, 이를 막으려면 CSRF 토큰이나 재인증, Referer 검증 등을 적용한다.
- 취약한 컴포넌트 악용으로 데이터 손실·서버 장악이 생기는 것은 알려진 취약점이 있는 컴포넌트 사용 문제이다.
- 조작된 XPath 쿼리로 비정상 데이터를 가져오는 것은 XPath 인젝션이다.
- 보호되지 않은 쿠키 값을 변조해 위장·권한 상승하는 것은 쿠키 변조이다.
어느 한 시점에서 시스템에 존재하는 특정 경로 혹은 모든 파일에 관한 정보를 DB화하여 저장한 후, 수정·삭제·생성된 파일에 관한 정보를 알려주며, 해커들에 의한 파일의 위변조 여부를 판별할 수 있는 기능을 제공해 주는 검사 도구이다.
설명된 검사 도구는 파일 무결성 점검 도구인 Tripwire이다.
Tripwire는 기준 시점의 파일 속성과 해시값을 데이터베이스로 만들어 두고, 이후 다시 비교해 수정·삭제·생성된 파일을 보고함으로써 위변조 여부를 판별한다.
- Burp Suite: 웹 요청·응답을 가로채 분석·변조하는 웹 프록시 점검 도구이다.
- Snort: 네트워크 패킷을 규칙과 대조하는 침입 탐지 시스템이다.
- NESSUS: 원격 시스템의 알려진 취약점을 점검하는 취약점 스캐너이다.
robots.txt 파일은 웹 루트 디렉터리에 위치한다.
검색 엔진 로봇은 사이트 최상위의 /robots.txt를 먼저 읽고, User-agent로 대상 로봇을, Disallow로 수집을 거부할 경로를 지정한 규칙을 따른다.
- User-agent는 접근 거부 디렉터리가 아니라 규칙을 적용할 검색 로봇(에이전트)을 지정한다.
- Disallow는 검색 엔진 종류가 아니라 수집을 막을 경로를 지정한다.
- User-agent와 Disallow는 한 규칙 안에서 함께 사용한다.
S-1-5-21-2823624781-484892517-3265479878-500
- (가): 21-2823624781-484892517-3265479878
- (나): 500
(가)는 시스템(도메인) 고유 식별자로 설치 시 생성되어 고정되므로, 부팅할 때마다 새로 부여된다는 설명이 틀렸다.
SID는 S-1(버전)-5(식별자 기관)-21-…로 이어지는 시스템·도메인 식별자와, 끝의 RID(상대 식별자)로 구성된다. 같은 시스템의 계정은 앞부분이 같고 RID로 구별된다.
- RID 500은 기본 관리자 계정 Administrator이다.
- RID 501은 Guest 계정이다.
- 일반 사용자 계정에는 1000 이상의 RID가 부여된다.
- (가) 증거 수집
- (나) 보관 및 이송
- (다) 보고서 작성
- (라) 증거 분석 및 조사
사전준비 이후 순서는 (가)→(나)→(라)→(다)이다.
디지털 포렌식은 사전준비 → 증거 수집 → 증거 보관 및 이송 → 증거 분석 및 조사 → 보고서 작성 순으로 진행되며, 전 과정에서 증거의 무결성과 연계 보관성(Chain of Custody)을 유지해야 한다.
- 보관 및 이송은 증거를 수집한 뒤에야 할 수 있으므로 증거 수집보다 앞설 수 없다.
- 보고서 작성은 분석 결과를 정리하는 단계이므로 분석·조사보다 앞설 수 없다.
- CVE(Common Vulnerabilities and Exposure)는 공개적으로 알려진 소프트웨어의 보안취약점을 가리키는 고유 표기를 의미한다.
- 취약점명은 CVE - (가) - (나) 형식으로 구성되어 있다.
| (가) | (나) | |
|---|---|---|
| ① | 일련번호 | 소프트웨어 버전 |
| ② | 연도 | 소프트웨어 버전 |
| ③ | 일련번호 | 연도 |
| ④ | 연도 | 일련번호 |
(가)는 연도, (나)는 일련번호이다.
CVE 식별자는 CVE-연도-일련번호 형식으로, 예를 들어 Log4Shell 취약점은 CVE-2021-44228로 표기된다. 일련번호는 4자리 이상으로 부여된다.
- CVE 식별자에는 소프트웨어 버전 정보가 들어가지 않는다.
- 연도가 일련번호보다 앞에 온다.