사용자가 이전에 실행한 명령어 내역을 보여 주는 명령은 history이다.
bash 등 셸은 사용자가 입력한 명령을 홈 디렉터리의 .bash_history 같은 기록 파일에 남기며, history 명령으로 이 목록을 번호와 함께 출력한다.
- touch: 빈 파일을 만들거나 파일의 시간 정보를 갱신하는 명령이다.
- dmesg: 커널 링 버퍼의 부팅·장치 메시지를 출력하는 명령이다.
- messages: 명령어가 아니라 시스템 전반의 로그가 쌓이는 로그 파일 이름이다.
FIN 스캔에서 닫힌 포트는 RST를 반환한다는 설명이 옳다.
FIN 플래그만 설정한 TCP 패킷을 보내면 열린 포트는 응답하지 않고, 닫힌 포트는 RST 패킷으로 응답한다. 이 차이로 포트 상태를 판단하는 스텔스 스캔이다.
- UDP에서 사용한다: FIN은 TCP 제어 플래그이므로 TCP 스캔 기법이다.
- 열린 포트는 reachable을 반환한다: 열린 포트는 아무 응답도 하지 않는다.
- Nmap에서 -sX 옵션을 쓴다: -sX는 FIN·PSH·URG를 함께 설정하는 Xmas 스캔이고, FIN 스캔은 -sF이다.
HKEY_CLASSES_ROOT에 애플리케이션 관리자의 권한 정보가 있다는 설명이 옳지 않다.
HKEY_CLASSES_ROOT는 파일 확장자와 연결 프로그램의 관계, COM 객체 등록 정보를 담는 키로, 권한 정보를 저장하는 곳이 아니다.
- HKEY_USERS: 컴퓨터에 있는 사용자들의 프로파일 정보를 담는다.
- HKEY_LOCAL_MACHINE: 하드웨어·드라이버·설치 소프트웨어 등 시스템 전체 설정을 담는다.
- HKEY_CURRENT_CONFIG: 시스템 시작 시 사용하는 현재 하드웨어 프로파일 정보를 담는다.
메모리 덤프 이미지에서 은닉된 악성코드를 분석하는 도구는 Volatility이다.
Volatility는 대표적인 메모리 포렌식 프레임워크로, 덤프에서 프로세스 목록·네트워크 연결·주입된 코드·숨겨진 프로세스 등을 추출해 분석한다.
- tcpdump: 네트워크 패킷을 캡처·출력하는 도구이다.
- Burp suite: 웹 요청·응답을 가로채 점검하는 웹 프록시 도구이다.
- tripwire: 파일의 해시를 기준값과 비교해 변조를 탐지하는 무결성 점검 도구이다.
DNSSEC은 DNS 응답 정보의 기밀성을 제공하지 않는다.
DNSSEC은 DNS 레코드에 전자서명을 붙여 응답의 출처와 내용을 검증하는 기술로, 데이터를 암호화하지 않으므로 질의·응답 내용은 그대로 노출된다. 즉 무결성과 출처 인증이 목적이다.
- DNS 정보 무결성: 서명 검증으로 내용 변경 여부를 확인한다.
- DNS 응답 정보 인증: 신뢰 체인을 따라 응답이 정당한 영역에서 왔음을 확인한다.
- DNS 정보 위변조 방지: 위조 응답을 검증 단계에서 걸러 캐시 포이즈닝 등을 막는다.
(Pre-Shared Key) 방식의 무차별 대입 공격 취약점을 방어하기 위해 도입한 인증 방식으로 가장 적절한 것은?
WPA3가 PSK 방식의 사전·무차별 대입 취약점을 막으려고 도입한 인증 방식은 SAE이다.
SAE(Dragonfly 핸드셰이크)는 패스워드를 직접 노출하지 않는 키 교환으로, 캡처한 핸드셰이크로 오프라인 사전 공격을 할 수 없게 하고 순방향 비밀성을 제공한다.
- WEP: 초기 무선 암호화 방식으로 취약점 때문에 폐기되었다.
- TKIP: WEP 하드웨어에서 쓰도록 만든 WPA의 과도기 암호화 방식이다.
- AES-CCMP: WPA2의 데이터 암호화·무결성 프로토콜로, 인증 방식이 아니다.
| rule mal_a{ meta: author = “police” date = “2026-08-01” description = “a 악성코드 탐지” strings: $mal_str1 = “VirtualAllocEx” $mal_str2 = “WriteProcessMemory” $mal_str3 = “cmd.exe /c” nocase $file_header = {4D 5A} condition: $file_header at 0 and 2 of ($mal_str*) and ($mal_str3 > 2) } |
특정 두 문자열이 각각 두 번 이상 나타날 때 탐지한다는 설명이 옳지 않다.
조건의 2 of (mal_str*)는 mal_str로 시작하는 세 문자열 가운데 아무거나 두 개가 존재하면 참이라는 뜻이지, 특정 두 문자열을 지정한 것이 아니다. 또 cmd.exe /c에 대한 비교는 그 문자열의 출현 횟수가 2보다 커야 한다는 별도 조건이다.
- 파일의 시작이 MZ: 16진수 4D 5A는 ASCII로 MZ이고, at 0으로 파일 시작 위치를 지정했다.
- strings 형식: 텍스트 문자열, 16진수 바이트열, 정규표현식을 모두 쓸 수 있다.
- 문자 패턴 탐지: 이 룰은 파일 안의 문자열·바이트 패턴 일치로 악성코드를 탐지한다.
HTTP/2에서 스트림을 열자마자 RST_STREAM으로 취소하기를 반복해 서버 자원을 고갈시키는 공격은 Rapid Reset Attack이다.
2023년 공개된 이 공격은 HTTP/2의 스트림 다중화와 즉시 취소 기능을 악용해, 동시 스트림 수 제한에 걸리지 않으면서 서버가 요청 처리를 계속 시작하게 만든다.
- Smurfing Attack: 출발지를 피해자로 위조한 ICMP Echo 요청을 브로드캐스트해 응답을 증폭시키는 공격이다.
- HTTP GET Flooding Attack: 정상적인 GET 요청을 대량으로 보내 웹 서버를 과부하시키는 공격이다.
- CC Attack: Cache-Control 헤더로 캐시 사용을 막아 원 서버가 직접 요청을 처리하도록 만드는 GET 플러딩 변형이다.
IP·AS 번호 소유권을 ROA로 인증해 라우터가 경로 출처를 검증하게 하는 프레임워크는 RPKI이다.
RPKI는 주소 자원 할당 체계에 맞춘 공개키 기반구조로, 어떤 AS가 어떤 프리픽스를 광고할 권한이 있는지 ROA로 서명해 두고 라우터가 경로 출처 유효성을 검증하게 한다.
- BGPsec: BGP 메시지의 AS 경로 전체에 서명해 경로 경유 정보를 보호하는 확장이다.
- IPSec: IP 계층에서 패킷 암호화·인증을 제공하는 보안 프로토콜이다.
- DANE: DNSSEC으로 보호된 DNS 레코드에 TLS 인증서 정보를 게시해 검증하는 방식이다.
TDE 방식은 컬럼 단위가 아니라 블록(파일) 단위 암호화 방식이다.
TDE(Transparent Data Encryption)는 DBMS 커널이 데이터 파일을 저장할 때 블록 단위로 암호화하고 읽을 때 복호화하므로 애플리케이션 수정이 필요 없다. 반면 컬럼 암호화는 특정 컬럼 값을 선택적으로 암호화한다.
- API 방식: 애플리케이션에서 암호화 모듈을 호출해 컬럼 값을 암·복호화한다.
- Plug-in 방식: DB 서버에 설치한 암호화 모듈이 컬럼 단위로 암·복호화를 수행한다.
- Hybrid 방식: API 방식과 Plug-in 방식을 결합해 컬럼 단위로 적용한다.
SYN Cookie는 클라이언트의 ACK가 도착한 후 연결 정보를 메모리에 할당한다.
서버는 SYN을 받아도 연결 상태를 저장하지 않고, 연결 정보를 해시해 만든 값을 초기 시퀀스 번호로 SYN-ACK에 실어 보낸다. 돌아온 ACK의 확인 번호로 쿠키를 검증한 뒤에야 연결 자원을 할당하므로 백로그 큐가 고갈되지 않는다.
- SYN 수신 시 즉시 메모리 할당: 이것이 바로 SYN Flooding에 취약한 기존 동작이다.
- Window Size 증가: 윈도 크기는 흐름 제어 값으로 SYN Cookie의 원리와 무관하다.
- 시퀀스 번호 미생성: 쿠키 값 자체를 시퀀스 번호로 생성해 사용한다.
서버 인증서를 포함한 모든 메시지를 SHA-224 이상으로 난독화했다는 설명이 옳지 않다.
TLS 1.3은 ServerHello 이후의 핸드셰이크 메시지(인증서 포함)를 AEAD 암호로 암호화해 보호한다. 해시 함수는 키 유도·무결성 확인에 쓰일 뿐 메시지를 난독화하는 수단이 아니다.
- Static RSA·Static DH 퇴출: 임시(Ephemeral) 키 교환만 허용해 Forward Secrecy를 강제했다.
- CBC 모드·SHA-1 금지: 취약성이 드러난 CBC 모드 암호와 SHA-1 등 약한 알고리즘을 제거했다.
- 1-RTT와 0-RTT: 핸드셰이크 왕복을 줄인 1-RTT를 기본으로 하고 재연결 시 0-RTT를 지원한다.
헤더 끝을 알리는 빈 줄을 보내지 않고 가짜 헤더를 천천히 이어 보내는 공격은 Slowloris Attack이다.
서버는 요청 헤더가 끝나기를 기다리며 연결을 계속 유지하므로, 적은 트래픽으로도 웹 서버의 동시 연결 자원이 고갈된다.
- SYN Flooding Attack: TCP 3-way 핸드셰이크를 완료하지 않아 서버의 연결 대기 큐를 채우는 공격이다.
- Hulk DoS Attack: URL을 계속 바꿔 가며 GET 요청을 대량으로 보내 차단 임계치를 피하는 공격이다.
- Hash DoS Attack: 해시 충돌을 일으키는 파라미터를 대량으로 보내 해시 테이블 처리 부하를 일으키는 공격이다.
ISP나 네트워크 경계에서 공격 대상 목적지로 가는 트래픽을 폐기하도록 경로를 조작하는 기법은 RTBH Filtering이다.
RTBH(Remotely Triggered Black Hole)는 공격 대상 주소의 경로를 BGP로 광고해 상위 라우터들이 그 트래픽을 Null 인터페이스로 보내 버리도록 유도한다. 내부망에 도달하기 전에 대량 트래픽을 걸러 내는 라우팅 기반 방어다.
- BGP Flowspec: 출발지·포트 등 세부 조건의 필터 규칙을 BGP로 배포하는 방식으로, 경로를 블랙홀로 보내는 것과 다르다.
- VPC Peering: 클라우드의 가상 네트워크끼리 사설 경로로 연결하는 기능이다.
- Split Tunneling: VPN 사용 시 일부 트래픽만 터널로, 나머지는 직접 인터넷으로 보내는 설정이다.
접근 권한을 부여·취소하는 제로 트러스트의 두뇌 역할은 정책 결정 지점(PDP)이다.
NIST 제로 트러스트 아키텍처에서 PDP는 정책 엔진과 정책 관리자로 구성되어 주체의 접근 요청을 평가하고 허용·거부를 결정하며, 그 결과를 집행 지점에 전달한다.
- 정책 집행 지점(PEP): PDP의 결정에 따라 실제로 연결을 열고 닫는 관문 역할을 한다.
- 신뢰 엔진(TE): 접근 판단에 쓰일 신뢰도를 산출하는 기능으로, 스스로 연결을 허용·차단하지 않고 결정은 PDP가 내린다.
- 지속적 진단 및 완화 시스템(CDM): 자산의 상태 정보를 수집해 PDP의 판단 근거를 제공하는 데이터 소스이다.
SSLv3의 하위 계층 프로토콜은 Record 프로토콜이다.
Record 프로토콜은 TCP 바로 위에서 데이터를 단편화·압축하고 MAC과 암호화를 적용해 전송한다. 그 위의 상위 계층에 Handshake, Change Cipher Spec, Alert 프로토콜이 놓인다.
- Alert 프로토콜: 오류·경고 상황을 상대에게 알리는 상위 계층 프로토콜이다.
- Handshake 프로토콜: 상호 인증과 암호 알고리즘·키 협상을 수행하는 상위 계층 프로토콜이다.
- Change Cipher Spec 프로토콜: 협상된 암호 설정의 적용 시작을 알리는 상위 계층 프로토콜이다.
IPSec 프로토콜 모드는 보안 연관(SA)의 식별 매개변수가 아니다.
SA는 SPI, 목적지 IP 주소, 보안 프로토콜 식별자의 세 값으로 유일하게 식별된다. 터널·전송 모드는 SA가 담고 있는 속성일 뿐 식별자에 포함되지 않는다.
- 보안 매개변수 인덱스(SPI): AH·ESP 헤더에 실려 수신 측이 해당 SA를 찾는 데 쓰인다.
- IP 목적지 주소: SA의 종단 주소로 식별에 사용된다.
- 보안 프로토콜 식별자: SA가 AH용인지 ESP용인지를 구분한다.
특정 호스트로 가는 경로를 재지정해야 하는 경우는 Destination unreachable이 아니라 Redirect 메시지(Type 5)를 생성한다.
ICMP Type 3은 패킷을 목적지까지 전달할 수 없을 때 보내는 오류 메시지이며, 사유는 코드 값으로 구분한다.
- 경로를 찾지 못한 경우: 네트워크 또는 호스트 도달 불가 코드로 보고된다.
- 특정 프로토콜을 사용할 수 없는 경우: 프로토콜 도달 불가 코드로 보고된다.
- 단편화가 필요하나 DF 비트로 단편화할 수 없는 경우: 단편화 필요 코드로 보고되며 경로 MTU 탐색에 쓰인다.
연결 생성·중단·종료에 쓰이지 않는 플래그는 URG이다.
URG는 세그먼트 안에 긴급 데이터가 있으며 긴급 포인터 필드가 유효함을 알리는 플래그로, 연결 관리와 무관하다.
- ACK: 3-way 핸드셰이크와 종료 과정에서 상대 세그먼트 수신을 확인한다.
- FIN: 더 보낼 데이터가 없음을 알려 정상적으로 연결을 종료한다.
- RST: 비정상 상황에서 연결을 즉시 중단(재설정)한다.
SSH 사용자 인증 프로토콜이 전송 계층 프로토콜의 하위 계층에서 동작한다는 설명이 옳지 않다.
SSH는 맨 아래에 전송 계층 프로토콜이 서버 인증·암호화·무결성을 제공하고, 그 위에서 사용자 인증 프로토콜과 연결 프로토콜이 동작하는 구조다.
- 전송 계층 프로토콜의 기밀성: 세션 키로 트래픽을 암호화해 기밀성을 제공한다.
- 연결 프로토콜의 다중화: 하나의 암호화 터널 위에 여러 논리 채널을 다중화한다.
- 원격 포워딩: 서버 쪽 포트로 들어온 연결을 클라이언트 쪽으로 넘겨, 클라이언트 측이 서비스를 제공하는 역할을 할 수 있다.
Genmask가 255.255.255.255이면 단일 목적지 호스트를 식별하는 마스크라는 설명이 옳다.
모든 비트가 1인 마스크는 Destination 주소 하나와 정확히 일치하는 호스트 경로를 뜻하며, 이때 플래그에 H가 표시된다.
- Destination: 호스트 주소뿐 아니라 네트워크 주소와 기본 경로도 들어간다.
- Gateway: 다음 홉 게이트웨이의 주소이며, 인터페이스 이름은 Iface 항목에 표시된다.
- UG 플래그: U는 경로가 활성화(up)되어 있다는 뜻이고 G는 게이트웨이를 거친다는 뜻이다.
NAPT가 하나의 사설 IP를 다수의 공인 IP로 변환한다는 설명이 옳지 않다.
NAPT(PAT)는 포트 번호를 함께 바꿔 다수의 사설 IP를 하나의 공인 IP로 변환하는 방식이다. 연결마다 다른 포트를 배정해 내부 호스트를 구분한다.
- 내부 호스트의 사설 IP: NAT 라우터 내부 네트워크 호스트에는 사설 IP가 할당된다.
- Static NAT: 사설 IP 하나와 공인 IP 하나를 1:1로 고정 매핑한다.
- Dynamic NAT: 공인 IP 풀에서 필요할 때 주소를 동적으로 할당해 변환한다.
netstat의 -r 옵션은 라우팅 테이블을 출력한다는 설명이 옳다.
netstat는 네트워크 연결·소켓·라우팅·통계를 보여 주는 명령으로, 옵션마다 출력 대상이 다르다.
- -l 옵션: 연결 대기(LISTEN) 중인 소켓만 출력하며, 프로토콜별 통계는 -s 옵션이다.
- -n 옵션: 주소와 포트를 이름으로 바꾸지 않고 숫자로 출력하며, 인터페이스별 통계는 -i 옵션이다.
- -s 옵션: 프로토콜별 통계를 출력하며, 모든 소켓 정보는 -a 옵션이다.
nmap의 -sU 옵션이 TCP NULL 스캔이라는 설명이 옳지 않다.
-sU는 UDP 스캔 옵션이며, 플래그를 하나도 설정하지 않은 패킷을 보내는 TCP NULL 스캔은 -sN 옵션이다.
- -sS 옵션: SYN만 보내고 핸드셰이크를 완료하지 않는 TCP SYN(하프 오픈) 스캔이다.
- -p 옵션: 스캔할 포트 번호나 범위를 지정한다.
- -O 옵션: 응답 특성을 분석해 대상 호스트의 운영체제를 추정한다.
Egress 필터링이 라우터 내부로 유입되는 패킷을 필터링한다는 설명이 옳지 않다.
Egress 필터링은 내부에서 외부로 나가는 패킷을 검사하는 것이고, 외부에서 내부로 들어오는 패킷을 검사하는 것은 Ingress 필터링이다.
- IP·포트 기반 필터링: 방화벽은 출발지·목적지 IP와 포트 번호를 보고 허용·차단을 결정한다.
- 페일 세이프 원칙: 장애가 발생하면 통신을 차단하는 안전한 상태로 동작하도록 설계한다.
- Blackhole 필터링: 특정 패킷을 Null 인터페이스로 보내 폐기한다.
inetd.conf의 구조 항목에 호스트명은 없다.
inetd.conf의 각 줄은 서비스명, 소켓 타입, 프로토콜, 대기 여부(wait/nowait), 실행 사용자, 실행 경로명, 실행 인자 순으로 구성된다. 접속 호스트 제어는 TCP Wrapper 설정 파일이 맡는다.
- 서비스명: /etc/services에 정의된 서비스 이름을 첫 항목에 쓴다.
- 소켓타입: stream, dgram 등 소켓 유형을 지정한다.
- 실행 경로명: 요청 시 실행할 서버 프로그램의 경로를 지정한다.
i-node에는 심볼릭 링크 개수가 아니라 하드 링크 개수가 저장된다.
심볼릭 링크는 별도의 i-node를 가진 독립 파일이어서 원본 i-node가 그 수를 알지 못한다. i-node는 파일 이름을 제외한 메타데이터와 데이터 블록 위치를 담는다.
- 파일의 소유자: 소유자 UID와 그룹 GID가 저장된다.
- 접근 권한: 파일 유형과 읽기·쓰기·실행 권한 비트가 저장된다.
- 속성 변경 시간: 마지막 접근·수정 시간과 함께 속성 변경 시간(ctime)이 저장된다.
SIGSTOP의 디폴트 동작은 종료가 아니라 프로세스 일시 정지이다.
SIGSTOP으로 멈춘 프로세스는 SIGCONT를 받으면 다시 실행되며, 이 시그널은 가로채거나 무시할 수 없다.
- SIGINT: 터미널 인터럽트(Ctrl+C)로 프로세스를 종료한다.
- SIGTERM: kill 명령의 기본 시그널로 프로세스에 종료를 요청한다.
- SIGQUIT: 종료하면서 코어 덤프를 생성한다.
| ○제어 채널과 데이터 채널을 다르게 사용하고 데이터 채널을 생성할 때 목적지를 확인하지 않는 FTP 설계의 구조적 취약점을 이용하는 공격이다. ○FTP 서버의 전송 목적지 주소를 임의로 지정하여 FTP 서버를 경유해 임의의 목적지로 메시지나 자료를 전송하도록 할 수 있다. |
FTP 서버를 경유해 임의의 목적지로 데이터를 보내게 하는 공격은 FTP Bounce Attack이다.
공격자는 PORT 명령으로 데이터 채널의 목적지를 제3의 주소로 지정해, FTP 서버가 그 주소로 연결하도록 만든다. 이를 이용해 포트 스캔이나 우회 전송을 수행할 수 있다.
- Anonymous FTP Attack: 익명 계정 접속을 허용한 서버의 설정 취약점을 악용하는 공격이다.
- Brute Force Attack: 계정 비밀번호를 무차별 대입으로 추측하는 공격이다.
- TFTP Attack: 인증 없이 파일을 주고받는 TFTP를 이용해 중요 파일을 가져가는 공격이다.
파일 규칙 설명
10.20.30. EXCEPT 10.20.30.40 규칙을 10.20.30.40 호스트 허용으로 설명한 것이 옳지 않다.
TCP Wrapper에서 점으로 끝나는 주소는 해당 대역 전체를 뜻하고 EXCEPT는 예외를 지정하므로, 이 규칙은 10.20.30 대역은 허용하되 10.20.30.40만 제외한다는 의미다.
- hosts.allow의 vsftpd: 10.20.30.11: vsftpd 서비스에 대해 해당 호스트를 허용한다.
- hosts.deny의 ALL:ALL: 모든 서비스에 대해 모든 호스트를 거부하는 기본 차단 규칙이다.
- hosts.deny의 vsftpd:1.2.3.4: vsftpd 서비스에 대해 해당 호스트를 거부한다.
판정 순서는 hosts.allow를 먼저 확인하고 일치하지 않으면 hosts.deny를 확인한다.

패시브 모드에서는 클라이언트가 서버가 알려준 포트(3267)로 데이터 채널을 연결하므로, 서버의 포트 20이 클라이언트의 두 번째 포트로 데이터 채널을 만든다는 설명이 적절하지 않다.
서버 포트 20이 클라이언트 쪽으로 데이터 연결을 여는 것은 액티브(Active) 모드의 동작이다. 그림에서도 데이터 채널 화살표는 클라이언트 포트 5151에서 서버의 두 번째 포트 3267로 향한다.
- 클라이언트가 명령 채널인 포트 21로 접속해 PASV 명령으로 패시브 모드 사용을 알리는 것은 첫 단계로 옳다.
- 서버가 데이터 전송에 쓸 포트(3267)를 정해 OK 3267로 클라이언트에 알려 주는 것은 옳다.
- 클라이언트의 데이터 채널 연결 요청에 서버가 OK(ACK)로 응답하는 것은 마지막 단계로 옳다.
| ㉠ Radix-64 Conversion ㉡ IDEA, CAST, Triple-DES ㉢ RSA, DSS, RIPEMD-160 |
㉠ ㉡ ㉢
㉠은 호환성, ㉡은 기밀성, ㉢은 인증 기능이다.
Radix-64 변환은 암호화된 이진 데이터를 ASCII 문자로 바꿔 전자우편 시스템과의 호환성을 확보한다. IDEA·CAST·Triple-DES는 메시지를 암호화하는 대칭키 알고리즘이고, RSA·DSS와 RIPEMD-160 해시는 전자서명에 쓰여 송신자 인증을 제공한다.
- ㉠을 기밀성으로 본 조합: Radix-64는 인코딩일 뿐 암호화가 아니다.
- ㉡을 인증이나 호환성으로 본 조합: 대칭키 블록 암호는 내용 보호, 즉 기밀성을 담당한다.
- ㉢을 기밀성이나 호환성으로 본 조합: 서명 알고리즘과 해시 함수는 인증·무결성을 담당한다.

발신 도메인의 DNS에 발신 메일서버 정보를 등록해 두고 수신 서버가 이를 조회해 수신 여부를 결정하는 기술은 SPF(Sender Policy Framework)이다.
SPF는 도메인 관리자가 DNS TXT 레코드에 메일을 보낼 수 있는 서버의 IP 목록을 공개하고, 수신 메일서버가 실제 발송 서버 IP와 대조해 발신자 위조 여부를 판단한다. 그림의 정보 등록 → 메일 전송 → 발신 도메인 조회 → 수신 여부 결정 흐름과 일치한다.
- DKIM은 발신 서버가 메일에 전자서명을 붙이고 수신 측이 DNS에 공개된 공개키로 서명을 검증하는 방식으로, 발신 서버 IP 정보를 등록·대조하는 구조가 아니다.
- Spam Assassin은 메일 헤더·본문을 규칙과 점수로 분석해 스팸을 걸러내는 콘텐츠 필터링 도구이다.
- Procmail은 수신된 메일을 사용자 규칙에 따라 분류·전달·처리하는 메일 처리 프로그램이다.
DISCARD가 폐기 메시지를 보낸다는 설명이 옳지 않다.
DISCARD는 발신자에게 아무 메시지도 보내지 않고 메일을 조용히 폐기한다. 거부 메시지를 돌려보내는 것은 REJECT이다.
- RELAY: 지정한 대상의 메일 릴레이를 허용한다.
- REJECT: 거부 메시지를 보내며 지정한 대상의 메일을 거부한다.
- OK: 다른 제한 규칙과 관계없이 지정한 대상의 메일을 허용한다.
| ○메일을 안전하게 전송하기 위한 프로토콜 ○메시지에 대한 기밀성, 무결성, 사용자 인증, 송신 사실 부인 방지 ○X.509 인증서를 통해 송신자 인증 보장 |
X.509 인증서로 기밀성·무결성·인증·부인 방지를 제공하는 보안 메일 프로토콜은 S/MIME이다.
S/MIME은 MIME 형식 메일에 공개키 암호와 전자서명을 적용하며, X.509 인증서 기반 PKI로 송신자를 인증한다.
- SMTP: 메일을 전송하는 기본 프로토콜로 자체 보안 기능이 없다.
- IMAP: 메일 서버의 메일함을 조회·관리하는 수신 프로토콜이다.
- RBL: 스팸 발송지로 알려진 IP 목록을 실시간 조회해 메일을 차단하는 방식이다.
| id=1 UNION SELECT 1, username, password FROM users -- |
UNION 연산자로 다른 테이블 조회 결과를 붙여 가져오는 방식은 Union SQL Injection이다.
원래 쿼리 뒤에 UNION SELECT를 덧붙여 users 테이블의 계정·비밀번호를 정상 결과와 함께 출력시키고, 끝의 주석 기호로 나머지 쿼리를 무력화한다.
- Form SQL Injection: 로그인 폼 등 입력란에 조건을 항상 참으로 만드는 구문을 넣어 인증을 우회하는 방식이다.
- Stored Procedure SQL Injection: 데이터베이스의 저장 프로시저를 악용해 명령을 실행하는 방식이다.
- Error-based SQL Injection: 고의로 오류를 유발해 오류 메시지에 드러나는 정보를 수집하는 방식이다.
| ○(㉠) 공격은 가장 일반적인 XSS 공격 유형으로, 단순히 게시판 또는 자료실과 같이 사용자가 글을 저장할 수 있는 부분에 정상적인 평문이 아닌 스크립트 코드를 입력하는 공격 기법이다. ○(㉡) 공격은 사용자가 악성 스크립트 코드를 포함하고 있는 악성 URL을 클릭하면 서버의 응답으로 악성 스크립트가 실행되어 사용자의 정보를 탈취하거나 리다이렉트하는 공격 기법이다. ○(㉢) 공격은 보안에 취약한 자바스크립트 코드를 이용해 사용자가 예측하지 못한 방식으로 동작하는 HTML 문서 객체 모델을 제어하는 과정에서 발생하는 공격 기법이다. |
㉠ ㉡ ㉢
㉠은 Stored XSS, ㉡은 Reflected XSS, ㉢은 DOM based XSS이다.
게시판 등에 스크립트를 저장해 열람자에게 실행시키면 저장형, 악성 URL의 스크립트가 서버 응답에 그대로 반사되어 실행되면 반사형, 클라이언트 자바스크립트가 문서 객체 모델을 조작하는 과정에서 발생하면 DOM 기반이다.
- ㉠에 Reflected XSS를 둔 조합: 서버에 저장되어 지속되는 공격은 저장형이다.
- ㉡에 DOM based XSS나 Stored XSS를 둔 조합: 악성 URL 클릭 후 서버 응답으로 실행되는 것은 반사형이다.
- ㉢에 Stored XSS나 Reflected XSS를 둔 조합: 서버를 거치지 않고 DOM 처리에서 발생하는 것은 DOM 기반이다.
| ○웹 해킹을 통해 시스템의 권한을 획득한 후 해당 시스템에 텔넷과 같이 직접 명령을 입력하고 확인할 수 있는 쉘을 획득하기 위한 방법 ○해커가 자신의 시스템에서 특정 포트를 개방하고, 웹 서버에서 해당 포트로 접속함으로써 해커가 웹 서버에 대한 원격 접속을 얻는 공격 기법 |
해커가 포트를 열어 두고 웹 서버가 그쪽으로 접속하게 해 쉘을 얻는 기법은 Reverse Shell이다.
방화벽은 대개 인바운드 접속을 막지만 아웃바운드는 허용하므로, 피해 서버가 공격자에게 역으로 접속하게 만들어 원격 명령 실행 환경을 확보한다.
- Cross Site Request Forgery: 로그인한 사용자가 의도하지 않은 요청을 서버에 보내도록 만드는 공격이다.
- HTTP Header Injection: 입력값에 개행 문자를 넣어 응답 헤더를 조작하는 공격이다.
- Insecure Direct Object Reference: 파라미터의 객체 식별자를 바꿔 권한 없는 자원에 접근하는 취약점이다.
| ㉠해커는 사용자의 DNS 질의를 감지하여 가짜 응답을 준비한다. ㉡사용자가 특정 도메인에 대한 DNS 질의를 보낸다. ㉢해커는 악성 DNS 서버 또는 조작된 IP 주소를 포함한 응답을 사용자에게 전송한다. ㉣사용자의 웹 브라우저는 위조된 IP 주소 또는 악성 웹 사이트로 접속된다. |
DNS Spoofing은 사용자 질의 → 해커의 감지·위조 응답 준비 → 위조 응답 전송 → 위조 사이트 접속 순으로 진행된다.
공격은 사용자의 DNS 질의(㉡)가 있어야 시작되고, 해커가 이를 감지해(㉠) 정상 DNS 서버보다 먼저 위조 응답을 보내면(㉢) 사용자는 조작된 주소로 접속하게 된다(㉣). 따라서 ㉡→㉠→㉢→㉣이다.
- ㉠으로 시작하는 순서: 질의가 없으면 해커가 감지할 대상이 없다.
- ㉢이 ㉠보다 앞선 순서: 질의를 감지하고 응답을 준비해야 위조 응답을 보낼 수 있다.
| ○리눅스 계열 OS에서 주로 사용하는 GNU Bash 환경변수를 통해 코드 인젝션 기법으로 특정 코드를 삽입하여 실행할 수 있는 취약점이다. ○공격자가 환경변수를 조작하여 원격에서 임의의 명령을 실행할 수 있다. |
Bash 환경변수에 함수 정의 뒤 명령을 덧붙여 원격 실행을 일으키는 취약점은 ShellShock이다.
취약한 Bash는 환경변수에 담긴 함수 정의를 해석할 때 그 뒤에 이어진 명령까지 실행했다. CGI처럼 외부 입력을 환경변수로 넘기는 서비스에서 원격 명령 실행으로 이어졌다.
- Heartbleed: OpenSSL의 하트비트 확장에서 경계 검사 누락으로 서버 메모리가 유출되는 취약점이다.
- Log4j: 로그 문자열의 JNDI 조회 기능을 악용해 원격 코드를 실행하는 Java 로깅 라이브러리 취약점이다.
- Stuxnet: 산업제어시스템(PLC)을 노린 악성 웜으로, Bash 취약점이 아니다.