페이지 목차
이 페이지에서 검색
EIS
이 페이지에 묻기
EIS · 현재 차시와 목차 본문에서만 찾아 답합니다. 답을 지어내지 않고 해당하는 대목을 그대로 보여 주며, 여기에 없으면 없다고 알려 드립니다.
생성형 AI가 아니라 이 페이지 본문을 찾아 그대로 보여 주는 방식입니다. 외부로 나가는 요청이 없습니다.
EIS · SECURITY
EIS
생성 수정
정보보안기사의 시스템·네트워크·애플리케이션 보안과 암호·관리·실기 내용을 개념의 경계와 실습으로 연결합니다.
29개 문서 · 3 · 어플리케이션보안 · 15 / 29
14 · DNS · DB 보안
지도 위치 : 3과목 어플리케이션 보안 · README 4장 ③ 영역(어플리케이션) — 이름 서비스와 데이터 저장소의 공격 ↔ 대응 | 출제기준: 1. 인터넷 응용 보안 > 4. DNS 보안, 5. DB 보안 | 이전: 13 웹 · 앱 보안 | 다음: 15 전자상거래 보안 출제 빈도 : ⭐⭐ (회당 약 2.8문항 — 출제분석.md. DNS 0.9 → 2.2, DB 0.9 → 1.5) · 변화 ▲ (DNS) · ⚠️ 신규 범위 포함 (DNS 터널링, DNS 싱크홀, 경량 DNS 서버) 세세항목 : DNS 보안 — DNS 개념 / DNS 서비스 운영 / DNS 공격유형 / DNS 보안 기술 · DB 보안 — DB 보안 개념 / DB 공격 유형 / DB 보안 기술
이 노트를 다 읽으면
- 도메인 이름이 IP로 바뀌는 질의 과정 (hosts · 캐시 · 재귀 · 반복)과 레코드 유형 (A · AAAA · CNAME · MX · NS · PTR · SOA · TXT)을 말할 수 있다.
- BIND 설정에서 존 전송 제한(allow-transfer) 과 재귀 제한(recursion) 을 읽고 점검할 수 있다.
- 캐시 포이즈닝 · DNS 스푸핑 · 파밍 · DNS 증폭 · DNS 터널링 을 "무엇을 속이거나 악용하는가"로 구별할 수 있다.
- DNSSEC 이 주는 것(무결성 · 출처 인증)과 주지 않는 것(기밀성 · 가용성)을, DNS 싱크홀 의 동작을 말할 수 있다.
- DB 보안 요구사항과 추론 ↔ 집성 , 대응(뷰 · 다중 인스턴스화)을 구별할 수 있다.
- DB 암호화 방식 API · 플러그인 · TDE 를 "어디서 암호화하나, 누가 부하를 지나"로 비교할 수 있다.
GRANT/REVOKE,xp_cmdshell의 위험과 조치를 말할 수 있다.
0. 이 노트의 판별 축
| # | 축 | 왼쪽 (0) | 오른쪽 (1) | 이 축으로 갈리는 것 | 큰 축 (README 5장) |
|---|---|---|---|---|---|
| 1 | 누가 끝까지 찾아 주나 | 서버가 대신 끝까지 (재귀 질의) | 다음 서버만 알려 줌 (반복 질의) | 클라이언트 → 캐시 서버 ↔ 캐시 서버 → 루트 · TLD · 권한 서버 | 이 노트의 축 |
| 2 | DNS를 속이나, DNS를 이용하나 | 응답을 위조 (무결성 공격) | 정상 DNS를 도구로 악용 | 캐시 포이즈닝 · 스푸핑 · 파밍 ↔ 증폭 · 터널링 | ② 수동적 ↔ 능동적 · ① 공격 ↔ 방어 |
| 3 | DNSSEC이 주는가 | 무결성 · 출처 인증 ⭕ | 기밀성 · 가용성 ❌ | DNSSEC의 범위 | CIA (README 4장) |
| 4 | 흩어진 정보를 모아 알아내는 방식 | 추론 — 공개(통계) 정보로 기밀 값을 계산 | 집성 — 낮은 등급 정보를 모으면 높은 등급이 됨 | Inference ↔ Aggregation | ⑥ 인증 ↔ 인가 (접근통제의 한계) |
| 5 | 어디서 암호화하나 | 애플리케이션 (API) | DBMS 내부 (플러그인 · TDE) | DB 암호화 방식 | ③ 관리적 ↔ 기술적 (기술적 대책 내부의 선택) |
이 노트가 답하는 질문은 "모든 서비스가 기대는 두 개의 기반 — 이름(DNS)과 데이터(DB) — 은 어떻게 속고, 어떻게 새는가" 입니다. DNS는 웹 · 메일 · 인증서까지 모든 접속의 첫 단계라 응답이 위조되면 그 뒤의 모든 보안이 무력 해집니다. DB는 웹 공격의 최종 목적지입니다. 앞에서 배운 UDP · 포트(06번 노트), DRDoS(08번 노트), 스푸핑(09번 노트), 앞 노트의 SQL Injection(13번 노트), 전자서명(18번 노트), 접근통제 모델(17번 노트)이 그대로 쓰입니다.
1. DNS의 구조와 질의 과정
1.1 이름 공간과 서버의 종류
. (루트)
┌─────────────┼──────────────┐
com kr net ← TLD
│ │
example co.kr ← 2단계 · 3단계
│
www → FQDN: www.example.com. (맨 끝 점 = 루트)
| 용어 | 정의 (유 + 종차) |
|---|---|
| FQDN | [도메인 이름]인데, [ 호스트부터 루트까지 전부 적은 완전한 이름 ]이라는 점에서 일부만 적은 상대 이름과 구별 |
| 리졸버 (Stub Resolver) | [DNS 클라이언트]인데, [ OS 안에서 질의를 만들어 캐시 서버에 맡기기만 한다 ] |
| 캐시(재귀) DNS 서버 | [DNS 서버]인데, [ 클라이언트 대신 루트부터 끝까지 찾아 주고 결과를 TTL 동안 캐시 한다]는 점에서 자기 존만 답하는 권한 서버와 구별 (ISP · 사내 DNS) |
| 권한(Authoritative) DNS 서버 | [DNS 서버]인데, [ 특정 존의 원본 레코드를 가지고 최종 답을 준다 ]. 원본을 가진 1차(Primary/Master), 복사본을 받는 2차(Secondary/Slave) |
| 존 (Zone) | 한 권한 서버가 관리를 맡은 이름 공간의 범위. 존 파일에 레코드를 적음 |
DNS는 질의 · 응답에 UDP 53 , 응답이 크거나 존 전송(AXFR · IXFR)에는 TCP 53 을 씁니다.
1.2 ⭐ 질의 과정 — 재귀와 반복
① PC: hosts 파일 · 로컬 DNS 캐시 확인
② PC → 캐시 DNS 서버 : "www.example.com?" ← 재귀 질의 (끝까지 찾아와)
③ 캐시 서버 → 루트 : "com은 저 서버에 물어봐" ← 반복 질의 (다음 주소만)
④ 캐시 서버 → com TLD : "example.com은 저 서버에"
⑤ 캐시 서버 → example.com 권한 서버 : "203.0.113.80"
⑥ 캐시 서버 → PC (결과를 TTL 동안 캐시)
🔍 읽는 포인트 : 공격자가 노리는 곳은 ⑥의 캐시 (포이즈닝)와, ②를 아무에게나 받아 주는 열린 재귀 서버 (증폭)입니다.
이름 해석 순서 — OS마다 다르고 자료마다 표현이 다릅니다.
| 환경 | 순서 |
|---|---|
| Windows | 로컬 DNS 캐시 → hosts 파일 → DNS 서버 . 단, Windows는 hosts 내용을 캐시에 미리 올려 두므로(ipconfig /displaydns에 hosts 항목이 보임) "hosts → 캐시 → DNS 서버"로 설명하는 자료도 있음 |
| Linux | /etc/nsswitch.conf의 hosts: files dns → /etc/hosts 먼저 , 다음 /etc/resolv.conf의 네임서버 |
⚠️ 시험에서는 두 표현이 모두 나왔습니다(2019 · 2024). 공통점은 "DNS 서버 질의는 맨 마지막, hosts는 서버보다 먼저" 입니다. 그래서 hosts 파일 변조만으로 파밍 이 됩니다.
1.3 ⭐ 레코드 유형과 존 파일
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2026101901 ; serial (바뀔 때마다 증가 → 2차 서버가 전송 여부 판단)
3600 ; refresh 900 ; retry 604800 ; expire 86400 ) ; minimum
IN NS ns1.example.com.
IN MX 10 mail.example.com. ; 숫자(선호도)가 작을수록 우선
ns1 IN A 203.0.113.53
www IN A 203.0.113.80
www IN AAAA 2001:db8::80
ftp IN CNAME www.example.com.
@ IN TXT "v=spf1 ip4:203.0.113.25 -all"
; 역방향 존(113.0.203.in-addr.arpa)에서:
80 IN PTR www.example.com.
🔍 읽는 포인트 : SOA의 관리자 메일은 @ 대신 점 (admin.example.com. = admin@example.com). MX는 숫자가 작을수록 먼저 시도합니다.
| 레코드 | 뜻 | 헷갈리는 짝 |
|---|---|---|
| A / AAAA | 이름 → IPv4 / IPv6 | — |
| CNAME | 별칭 → 정식 이름 | A는 IP를 직접 가리킴 |
| MX | 그 도메인의 메일 서버 (선호도 포함) | NS |
| NS | 그 존의 권한 네임서버 | MX |
| PTR | IP → 이름 (역방향), in-addr.arpa(IPv6는 ip6.arpa) 아래 | A의 반대 |
| SOA | 존의 시작 · 일련번호 · 갱신 주기 | — |
| TXT | 임의 문자열 — SPF · DKIM · DMARC (12번 노트) | — |
| ANY (질의 유형) | "가진 레코드를 전부 달라" — 증폭 공격에 악용 | 레코드가 아니라 질의 타입 |
1.4 도구
| 도구 · 명령 | 하는 일 |
|---|---|
nslookup → server 8.8.8.8 → set type=mx | 질의할 DNS 서버 변경, 레코드 타입 지정 |
dig @8.8.8.8 example.com MX / dig example.com ANY | 지정 서버 · 타입 질의 |
dig -x 203.0.113.80 | 역방향(PTR) 조회 |
dig axfr example.com @ns1.example.com | 존 전송 시도 (점검 시 거부되어야 양호) |
ipconfig /displaydns · ipconfig /flushdns | Windows DNS 캐시 조회 · 비우기 |
| BIND(named) ↔ dnsmasq | 대표 DNS 서버 소프트웨어 ↔ 소규모 네트워크용 경량 DNS(+DHCP) 서버 ⚠️ |
📝 기출 포인트 — MX · NS · PTR 구분 (4회), " IP → 도메인 역질의 = PTR, in-addr.arpa ", 이름 해석 순서 (2회), 윈도우 DNS 캐시 명령 = ipconfig /displaydns (2회), nslookup
server명령 · ANY 질의 · FQDN · dnsmasq(2025). 도구 문항이 최근 늘었습니다.
2. DNS 서비스 운영 — BIND 하드닝
// /etc/named.conf (권한 DNS 서버의 예)
options {
directory "/var/named";
version "unknown"; // 버전 질의에 실제 버전 숨김
recursion no; // 권한 서버는 재귀 질의 처리 안 함
allow-query { any; };
allow-transfer { 203.0.113.54; }; // 존 전송은 2차 DNS에게만
};
// 사내 캐시 서버라면: recursion yes; allow-recursion { 10.0.0.0/8; };
🔍 읽는 포인트 : allow-transfer가 없거나 any면 누구나 존 전체를 내려받습니다 (내부 호스트 목록 노출 → 공격 지도). 재귀를 아무에게나 열면 증폭 공격의 반사기(오픈 리졸버)가 됩니다.
| 점검 항목 | 양호 |
|---|---|
| 존 전송 | allow-transfer에 2차 서버 IP만 |
| 재귀 질의 | 권한 서버는 recursion no, 캐시 서버는 allow-recursion으로 내부망만 |
| 버전 노출 | version 숨김, BIND 최신 패치 |
| 동적 업데이트 | allow-update { none; } 또는 TSIG 키로 제한 |
| 서버 분리 | 권한 서버와 캐시 서버 분리, 외부 · 내부용 분리(Split DNS) |
💡 존 전송 자체를 인증하려면 서버끼리 공유 비밀키로 HMAC을 붙이는 TSIG 를 씁니다(앞에서 배운 MAC, 20번 노트).
앞으로 다시 만납니다 — 25번 노트(실기 취약점 점검)에서 "DNS 서버의 불필요한 명령어(존 전송 · 재귀) 허가 여부" 점검으로 다시 나옵니다.
3. DNS 공격
3.1 ⭐ 응답을 속이는 공격 (축 2의 왼쪽)
| 공격 | 정의 (유 + 종차) | 어디를 오염시키나 | 대응 |
|---|---|---|---|
| DNS 캐시 포이즈닝 | [DNS 응답 위조 공격]인데, [ 캐시 DNS 서버가 질의를 보낸 직후 위조 응답을 먼저 도착시켜 캐시에 저장 하게 한다] | 캐시 서버 → 그 서버를 쓰는 모든 사용자 피해 | DNSSEC , 출발지 포트 · 트랜잭션 ID 무작위화, 재귀 제한 |
| DNS 스푸핑 | [DNS 응답 위조 공격]인데, [ 같은 네트워크에서 피해자의 질의를 엿보고 가짜 응답을 먼저 보낸다 ] (ARP 스푸핑과 결합) | 개별 피해자 하나의 응답 | 스위치 보안 · ARP 감시, DNSSEC |
| 파밍 (Pharming) | [사기 사이트 유도 공격]인데, [ 사용자가 정상 주소를 입력해도 hosts 파일 · DNS 변조로 가짜 사이트에 접속 된다] | hosts 파일 , 공유기 DNS 설정, DNS 캐시 | hosts 무결성 점검, 백신, DNSSEC |
⚠️ 경계: 피싱 은 가짜 링크를 클릭하게 만들고, 파밍 은 정상 주소를 입력해도 가짜로 갑니다. 그래서 파밍이 더 알아채기 어렵습니다.
💡 캐시 포이즈닝이 가능한 이유: DNS는 UDP이고, 응답이 맞는지 확인하는 값이 16비트 트랜잭션 ID(+ 출발지 포트) 뿐이라 추측해서 먼저 도착하면 받아들여집니다. 2008년 카민스키(Kaminsky) 공격이 이를 대규모로 보여 줬습니다.
📝 기출 포인트 — 파밍 3회, 캐시 포이즈닝 3회. "DNS를 조작해 정상 주소 입력에도 가짜 사이트로", "캐시를 변조"가 정답 핵심어. 앞에서 배운 스푸핑 분류(09번 노트)와 함께 묶여 출제됩니다.
3.2 DNS를 도구로 악용하는 공격 (축 2의 오른쪽)
| 공격 | 정의 | 대응 |
|---|---|---|
| DNS 증폭 (DRDoS) | 출발지를 피해자 IP로 위조해 열린 재귀 서버에 작은 질의(ANY 등) 를 보내면 큰 응답이 피해자에게 쏟아짐 (앞에서 배운 DRDoS, 08번 노트) | 재귀 질의 제한 (오픈 리졸버 차단), ANY 응답 최소화, 응답 속도 제한(RRL), 출발지 위조 패킷 필터링 |
| DNS 쿼리 플러딩 | 권한 서버에 대량의 질의를 보내 서버 자체를 마비 | 대역 · 서버 증설, Anti-DDoS |
| DNS 터널링 ⚠️ | [은닉 통신 기법]인데, [ 허용된 DNS 질의 · 응답의 서브도메인 · TXT 레코드에 데이터를 인코딩해 실어 나른다 ] → 방화벽 우회, C&C 통신, 정보 유출 | 길고 무작위한 서브도메인 · 비정상 TXT 질의량 탐지, 내부 PC의 외부 DNS 직접 질의 차단 |
| Domain Shadowing | 탈취한 도메인 관리 계정 으로 정상 도메인 아래 서브도메인을 대량 생성 해 악성 사이트에 사용 | 등록 계정 MFA, 존 변경 감시 |
| 존 전송 악용 | AXFR로 내부 호스트 목록 수집 (정보 수집) | allow-transfer 제한 |
aGVsbG8gd29ybGQgc2VjcmV0.x7f.tunnel.attacker.example. TXT ?
🔍 읽는 포인트 : 사람이 쓰지 않는 길고 무작위해 보이는(Base64 · Hex) 서브도메인 이 한 도메인으로 반복되면 DNS 터널링을 의심합니다. DNS(UDP 53)는 대부분 방화벽에서 열려 있어 우회 통로가 됩니다.
📝 기출 포인트 — DNS 증폭과 대응(재귀 질의 제한) (2023), ANY 질의 (2022, 2025), DNS 터널링 (2025 "처음 등장" ⚠️), Domain Shadowing(2019), 쿼리 플러딩 · 증폭 · 싱크홀 · 스푸핑 구분 (2025).
4. DNS 보안 기술
4.1 ⭐ DNSSEC
DNSSEC (DNS Security Extensions) — [DNS 보안 확장]인데, [ 권한 서버가 레코드에 전자서명을 붙이고 리졸버가 상위 존부터 이어지는 신뢰 사슬로 검증 한다]는 점에서 응답 자체를 암호화하는 DoT · DoH와 구별된다.
| 레코드 | 역할 |
|---|---|
| DNSKEY | 존의 공개키 (ZSK — 레코드 서명용, KSK — DNSKEY 서명용) |
| RRSIG | 레코드 집합에 대한 서명 |
| DS | 자식 존 KSK의 해시를 부모 존 에 등록 → 신뢰 사슬 연결 |
| NSEC / NSEC3 | "그런 이름은 없다"는 부재 증명 (NSEC3는 이름을 해시해 존 나열을 어렵게) |
존 서명 절차 : ① 키 생성(ZSK · KSK) → ② 존 파일에 DNSKEY 포함 후 존 서명 (RRSIG · NSEC 생성) → ③ KSK의 DS 레코드를 상위 존에 등록 → ④ 리졸버는 루트 → TLD → 존 순으로 검증.
| DNSSEC이 주는 것 ⭕ | 주지 않는 것 ❌ |
|---|---|
| 데이터 무결성 , 출처 인증 → 캐시 포이즈닝 · 파밍(DNS 변조형) 방지 | 기밀성 (질의 · 응답은 평문), 가용성 (DDoS 방지 아님, 오히려 응답이 커짐) |
⚠️ 반례: DNSSEC은 hosts 파일을 변조한 파밍은 막지 못합니다. DNS 질의 자체가 일어나지 않기 때문입니다.
📝 기출 포인트 — DNSSEC 4회(A1.4 최다): " DNSSEC이 제공하지 않는 것 = 기밀성 ", "막을 수 있는 위협 = 캐시 포이즈닝 · 파밍", "DNS 무결성 보강 확장 표준", 존 서명 절차 (2025).
4.2 ⭐ DNS 싱크홀
DNS 싱크홀 (Sinkhole) — [악성 통신 차단 기술]인데, [ 악성(C&C) 도메인 질의에 진짜 IP 대신 싱크홀 서버 IP를 응답 해 감염 PC의 접속을 끊고 식별한다]는 점에서 응답을 위조해 피해를 주는 DNS 스푸핑과 같은 기법을 방어에 쓴 것이다.
감염 PC ─"cnc.bad.example?"─> ISP/기관 DNS ─(싱크홀 목록에 있음)─> "10.10.10.10 (싱크홀 서버)"
감염 PC ──> 싱크홀 서버 : 접속 기록 → 감염 PC 식별 · 조치 안내
🔍 읽는 포인트 : 봇이 C&C에서 명령을 받지 못하게 하고, 싱크홀 서버의 접속 기록으로 감염 PC 목록 을 얻습니다. 국내에서는 KISA가 ISP · 기관과 함께 운영합니다.
📝 기출 포인트 — DNS 싱크홀 3회(2023 · 2024 · 2025 연속): " 봇넷 C&C 접속 차단 ". 2025년에는 오답 보기로 "DNS 라우팅 · 웜홀" 같은 그럴듯한 이름이 나왔습니다.
💡 비유는 마지막에 — DNSSEC은 주소록 각 줄에 찍힌 관인 , 싱크홀은 사기범 전화번호를 경찰 상황실로 돌려 놓는 것 입니다.
5. DB 보안 개념
5.1 DB 보안 요구사항과 통제 유형
| 요구사항 | 뜻 |
|---|---|
| 부적절한 접근 방지 | 허가된 사용자만 허가된 데이터에 |
| 추론 방지 | 공개 · 통계 정보로 기밀 정보를 유추하지 못하게 |
| 데이터 무결성 | 허가 없는 변경 · 오류로부터 보호 |
| 운영적 무결성 | 동시 처리(트랜잭션) 중에도 논리적 일관성 유지 |
| 의미적 무결성 | 값이 허용 범위 · 규칙(도메인 제약)을 지킴 |
| 감사 기능 | 접근 · 변경 기록 |
| 사용자 인증 | OS보다 엄격한 DB 수준 인증 |
| 기밀 데이터 관리 · 제한(Confinement) | 민감 데이터 분리, 허가되지 않은 경로로 정보 흐름 금지 |
DB 보안 통제 3유형 : 접근통제 (누가 무엇에 접근), 추론통제 (통계로 개별 값 유추 방지), 흐름통제 (높은 등급 → 낮은 등급으로 정보 이동 방지).
⚠️ 반례: "집성(Aggregation)"은 통제가 아니라 위협 입니다. "부인방지"는 DB 보안 요구사항으로 보통 꼽지 않습니다 (메시지 · 거래의 요구사항).
📝 기출 포인트 — "DB 보안 요구사항이 아닌 것 "(2015, 2025 — 부인방지), "DB 보안 통제 유형이 아닌 것 = 집성"(2018), 무결성 개념. 앞에서 배운 접근통제 모델(17번 노트)의 DB판입니다.
5.2 ⭐ 추론 ↔ 집성
| 추론 (Inference) | 집성 (Aggregation) | |
|---|---|---|
| 정의 | 접근 가능한 비기밀 · 통계 데이터를 조합 · 계산 해 기밀 값을 알아냄 | 낮은 등급 정보를 많이 모으면 전체가 높은 등급 가치를 가짐 |
| 예 | "부서 평균 연봉"과 "부서 인원 · 다른 직원 연봉"으로 한 사람의 연봉 계산 | 부대별 보급 물량(각각 공개)을 모두 모으면 작전 규모(기밀) |
| 대응 | 다중 인스턴스화(Polyinstantiation) , 질의 결과 집합 최소 크기 제한, 통계값에 잡음 추가(섭동), 셀 은폐 | 데이터 분할 저장, 수집량 제한 · 감시 |
다중 인스턴스화 (Polyinstantiation) — [추론 방지 기법]인데, [ 같은 키의 레코드를 보안 등급별로 다른 값으로 여러 개 두어 , 낮은 등급 사용자가 "여기에 기밀이 있다"는 사실조차 추론하지 못하게 한다]는 점에서 접근 자체를 막는 접근통제와 구별된다.
📝 기출 포인트 — 추론 방지 · 추론 통제는 A1.5 최다(5회 이상). " 통계값으로 개별 데이터를 유추하는 것을 통제 ", "추론 · 집성과 다중 인스턴스화 대응"(2024 · 2025).
6. DB 공격과 접근통제
6.1 DB 공격
| 공격 | 내용 | 대응 |
|---|---|---|
| SQL Injection | 앞 노트(13번 노트)의 주입 공격. DB 쪽에서 보면 " DB를 공격하는 주입 " | Prepared Statement, 최소 권한 |
| xp_cmdshell 악용 | MS SQL의 확장 저장 프로시저로 OS 명령 실행 — SQLi와 결합하면 서버 장악 | 비활성화 (sp_configure 'xp_cmdshell', 0), sysadmin 권한 최소화 |
| 기본 계정 · 약한 비밀번호 | 설치 기본 계정(예: 오라클 샘플 계정), sa 빈 비밀번호 | 기본 계정 잠금 · 삭제, 비밀번호 변경 |
| 권한 남용 · 내부자 | 과도한 권한, PUBLIC에 부여된 권한 | 최소 권한, 감사 |
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE; -- 0 = 비활성
🔍 읽는 포인트 : SQL Server 2005 이후 xp_cmdshell은 기본 비활성 입니다. 점검에서 1이면 취약입니다.
MS SQL 인증 모드 : Windows 인증 모드 (OS 계정으로 인증, 권장) ↔ 혼합 모드 (Windows + SQL Server 자체 계정). 혼합 모드면 sa 계정 비밀번호 관리가 중요합니다.
6.2 ⭐ 뷰와 권한 — GRANT · REVOKE
뷰 (View) — [가상 테이블]인데, [ 기본 테이블의 일부 행 · 열만 보이도록 정의해 그 범위만 접근시키는 ] 점에서 데이터를 실제로 복사하는 별도 테이블과 구별된다.
CREATE VIEW emp_public AS SELECT name, dept FROM employee; -- 연봉 · 주민번호 열 제외
GRANT SELECT ON emp_public TO staff; -- 뷰에만 조회 권한
GRANT SELECT, UPDATE ON employee TO hr_manager WITH GRANT OPTION; -- 받은 권한을 남에게 줄 수 있음
REVOKE UPDATE ON employee FROM hr_manager CASCADE; -- 그가 다시 준 권한까지 연쇄 회수
🔍 읽는 포인트 : WITH GRANT OPTION은 앞에서 배운 DAC(임의적 접근통제, 17번 노트) 의 특징 — 권한을 가진 자가 남에게 넘깁니다. CASCADE는 그렇게 퍼진 권한을 연쇄 회수 합니다.
DB 접근제어 솔루션 유형
| 방식 | 구조 | 특징 |
|---|---|---|
| 게이트웨이(프록시) | 사용자와 DB 사이에 독립 서버 를 두고 모든 질의가 통과 | 통제 강력, 우회 경로 차단 필요 · 성능 영향 |
| 스니핑 | 네트워크 트래픽을 복사해 모니터링 | 성능 영향 없음, 차단은 어려움 (감사 중심) |
| 에이전트 | DB 서버에 에이전트 설치 | 로컬 접속까지 통제, DB 서버 부하 |
| 하이브리드 | 위 방식 조합 | — |
📝 기출 포인트 — 뷰 (2017, 2023): "허가된 범위만 보이도록 제한". xp_cmdshell (2024, 2025), MS SQL 인증 모드 (2022), 독립 서버형 = 게이트웨이 방식 (2022).
7. DB 암호화와 감사
7.1 ⭐ DB 암호화 방식
| 방식 | 어디서 암 · 복호화 | 애플리케이션 수정 | 부하가 걸리는 곳 | 특징 |
|---|---|---|---|---|
| API 방식 | 애플리케이션 서버 에서 암호 라이브러리 호출 | 필요(많음) | 애플리케이션 서버 | DB 서버 부하 없음, 개발 공수 큼 |
| 플러그인 방식 | DB 서버 에 설치한 암호 모듈을 DB 함수(뷰 · 트리거)로 호출 | 적음(쿼리 일부) | DBMS 서버 | 설치 쉬움, DB 부하 |
| TDE (Transparent Data Encryption) | DBMS 커널 안에서, 디스크에 쓸 때 암호화 · 읽을 때 복호화 | 없음 | DBMS (커널 수준이라 효율적) | DBMS 제품 기능, 응용에 투명 |
| 파일 암호화 | OS · 파일 시스템 수준에서 DB 파일 전체 | 없음 | OS | 컬럼 단위 선택 불가 |
| 하이브리드 | API + 플러그인 결합 | 부분 | 분산 | 성능 · 공수 절충 |
💡 기억법: "어디까지 내려가서 암호화하나" — 애플리케이션(API) → DB 함수(플러그인) → DB 커널(TDE) → OS(파일). 아래로 갈수록 애플리케이션 수정이 줄고 , 위로 갈수록 세밀한 통제(컬럼 · 사용자별) 가 쉽습니다.
📝 기출 포인트 — DB 암호화 방식은 2024~2025에 3회 연속: " DBMS에 부하가 생기는 것 = 플러그인 ", " 앱 수정 없이 커널 수준 = TDE ", " 애플리케이션에서 암호화 = API ".
7.2 감사와 회복
- 감사 : 누가 · 언제 · 어떤 객체에 · 무엇을 했는지 기록(오라클
AUDIT문, DB 접근제어 솔루션 로그). 개인정보처리시스템이면 접속기록 보관 · 점검 의무 가 붙습니다. - 회복(Recovery) : 장애 시 로그로 되돌리기. 체크포인트 는 "이 시점까지는 디스크에 반영 완료"라는 표시로, 회복 때 로그를 처음부터 다시 읽지 않게 합니다.
- 오라클 보안 설정 예 : 기본 계정 잠금 · 비밀번호 변경, 리스너 보호, PUBLIC 권한 회수, 감사 활성화, 최신 패치.
앞으로 다시 만납니다 — 24번 노트(개인정보보호법)에서 암호화 대상 정보와 접속기록 보관 기간을 법 기준으로 다시 봅니다.
8. 실기 연결
관련 수행준거 : 1-3 DNS · DB 서비스 동작절차와 환경 설정, 2-2-6 DNS 서버의 불필요한 명령어 수행 허가 여부 · DNS 보안 조치 점검 , 2-2-7 DB 서버 중요정보 암호화 저장 · DB 객체(테이블 · 칼럼 · 뷰)별 접근통제 점검 , 3-1 서비스별(DNS · DB) 로그 모니터링.
| 예상 질문 | 답안 핵심어 |
|---|---|
| 존 전송 취약점과 조치 | AXFR로 내부 호스트 정보 노출, allow-transfer에 2차 DNS만 , TSIG |
| DNS 증폭 공격 대응 | 오픈 리졸버, recursion 제한(allow-recursion 내부망) , ANY 응답 제한, RRL |
| DNSSEC의 효과와 한계 | 서명(RRSIG) · 신뢰 사슬(DS), 무결성 · 출처 인증 ⭕ / 기밀성 · 가용성 ❌ |
| DNS 싱크홀 동작 | C&C 도메인 질의 → 싱크홀 IP 응답 → 접속 차단 · 감염 PC 식별 |
| DB 암호화 방식 비교 | API(앱 수정 · 앱 서버 부하), 플러그인(DB 부하), TDE(커널 · 앱 수정 없음) |
| DB 접근통제 점검 | 뷰 · GRANT/REVOKE, 최소 권한, 기본 계정, xp_cmdshell 비활성 |
점검 예시
$ dig axfr example.com @ns1.example.com
; Transfer failed. ← 양호 (거부됨)
$ dig @ns1.example.com www.google.com +recurse
;; WARNING: recursion requested but not available ← 권한 서버 양호 (재귀 거부)
🔍 읽는 포인트 : 존 전송이 레코드 목록을 쏟아내면 취약 , 외부에서 남의 도메인 재귀 질의에 답을 주면 오픈 리졸버(취약) 입니다.
9. 확인 문제
1. IP 주소로 도메인 이름을 찾는 역방향 조회에 쓰이는 레코드와 특수 도메인의 짝은? ① MX — in-addr.arpa ② PTR — in-addr.arpa ③ CNAME — ip6.int ④ NS — root-servers.net
2. BIND에서 허가된 2차 DNS 서버 외에는 존 전체 정보를 내려받지 못하게 하는 설정은?
① recursion no ② allow-query ③ allow-transfer ④ version "unknown"
3. DNSSEC이 제공하지 않는 것은? ① DNS 응답의 무결성 ② 응답 출처 인증 ③ DNS 질의 · 응답의 기밀성 ④ 캐시 포이즈닝 방지
4. 다음 설명에 해당하는 것은? "악성코드에 감염된 PC가 C&C 서버 도메인을 질의하면 실제 주소 대신 지정된 서버 주소를 응답해 접속을 차단하고 감염 PC를 식별한다." ① DNS 스푸핑 ② DNS 싱크홀 ③ DNS 터널링 ④ Domain Shadowing
5. 방화벽이 허용하는 DNS 질의의 서브도메인에 인코딩한 데이터를 실어 외부와 통신하는 기법은? ① DNS 증폭 ② DNS 쿼리 플러딩 ③ DNS 터널링 ④ 파밍
6. 데이터베이스 보안에서 "통계 정보 등 접근 가능한 데이터로 기밀 데이터를 유추하는 것"을 막기 위한 기법으로 가장 적절한 것은? ① 집성 ② 다중 인스턴스화 ③ WITH GRANT OPTION ④ 체크포인트
7. DB 암호화 방식 중 DB 서버에 암호 모듈을 설치하고 DB 함수로 암 · 복호화해 DBMS 서버에 부하가 걸리는 방식은? ① API 방식 ② 플러그인 방식 ③ TDE 방식 ④ 파일 암호화 방식
정답과 해설
| # | 정답 | 해설 (판별 축) |
|---|---|---|
| 1 | ② | PTR = IP → 이름, IPv4 역방향은 in-addr.arpa. MX는 메일 서버, NS는 네임서버 |
| 2 | ③ | 존 전송 = allow-transfer. recursion은 재귀(증폭 대응), version은 버전 숨김 |
| 3 | ③ | 축 3: 서명은 무결성 · 출처 인증 만. 평문 그대로라 기밀성 없음 |
| 4 | ② | 응답을 바꾸는 기법이 방어 에 쓰이면 싱크홀, 공격에 쓰이면 스푸핑(축 2 · 큰 축 ①) |
| 5 | ③ | 축 2 오른쪽(DNS를 도구로). 증폭 · 플러딩은 가용성 공격, 파밍은 응답 위조 |
| 6 | ② | 축 4: 추론 대응 = 다중 인스턴스화. 집성은 위협, GRANT OPTION은 권한 위임, 체크포인트는 회복 |
| 7 | ② | 축 5: DB 함수 호출 = 플러그인 = DBMS 부하 . API는 앱 서버, TDE는 커널 수준 |
부록 A. 스스로 확인하기
| # | 질문 | 답이 있는 곳 |
|---|---|---|
| 1 | 캐시 DNS 서버와 권한 DNS 서버의 차이는? | 1.1 |
| 2 | 재귀 질의와 반복 질의는 각각 누구와 누구 사이인가? | 1.2 |
| 3 | 이름 해석 순서에서 hosts와 DNS 서버의 선후는? | 1.2 |
| 4 | A · CNAME · MX · NS · PTR · TXT · ANY를 구분하면? | 1.3 |
| 5 | Windows DNS 캐시 조회 · 삭제 명령은? nslookup에서 질의 서버를 바꾸려면? | 1.4 |
| 6 | allow-transfer와 recursion 설정은 각각 무엇을 막나? | 2 |
| 7 | 캐시 포이즈닝 · DNS 스푸핑 · 파밍의 오염 대상은? | 3.1 |
| 8 | DNS 증폭과 DNS 터널링의 대응은? | 3.2 |
| 9 | DNSSEC 레코드 네 가지와 제공하지 않는 것은? | 4.1 |
| 10 | DNS 싱크홀의 두 가지 효과는? | 4.2 |
| 11 | DB 보안 통제 3유형과 "통제가 아닌 것"은? | 5.1 |
| 12 | 추론과 집성의 차이, 다중 인스턴스화란? | 5.2 |
| 13 | xp_cmdshell 조치와 MS SQL 인증 모드는? | 6.1 |
| 14 | 게이트웨이 · 스니핑 · 에이전트 방식의 차이는? | 6.2 |
| 15 | API · 플러그인 · TDE의 부하 위치와 앱 수정 여부는? | 7.1 |
부록 B. 자주 하는 실수 · 함정
| 실수 | 바로잡기 |
|---|---|
| "DNS는 TCP만 쓴다" / "UDP만 쓴다" | ⚠️ 질의는 UDP 53 , 존 전송 · 큰 응답은 TCP 53 |
| "ANY는 레코드 유형" | ❌ 질의 유형 (가진 것 전부) |
| "MX 선호도는 클수록 우선" | ❌ 작을수록 우선 |
| "DNSSEC은 DNS를 암호화한다" | ❌ 서명 만. 기밀성 없음 |
| "DNSSEC이면 모든 파밍이 막힌다" | ❌ hosts 변조형 은 못 막음 |
| "싱크홀은 공격 기법" | ❌ 응답 조작을 방어에 쓰는 기법 |
| "권한 DNS 서버도 재귀를 열어 둔다" | ❌ 권한 서버는 recursion no. 열린 재귀는 증폭의 반사기 |
| "집성은 DB 보안 통제 유형" | ❌ 위협 . 통제는 접근 · 추론 · 흐름 |
| "부인방지는 DB 보안 요구사항" | ⚠️ 보통 꼽지 않음 — "거리가 먼 것"의 정답 |
| "TDE는 애플리케이션을 고쳐야 한다" | ❌ 수정 불필요 (투명). 수정이 많은 것은 API |
| "플러그인 방식은 DB 서버 부하가 없다" | ❌ DB 서버 부하 가 가장 큰 방식 |
| "REVOKE하면 그 사람이 남에게 준 권한은 그대로" | ⚠️ CASCADE로 연쇄 회수 |
부록 C. AI · NotebookLM 복습 프롬프트
이 14번 노트(DNS · DB 보안)만 근거로 4지선다 7문제를 내줘. 노트 밖 내용은 쓰지 마.
레코드 유형(PTR · MX), allow-transfer/recursion, 캐시 포이즈닝과 파밍, DNSSEC이 주지 않는 것, DNS 싱크홀, 추론과 다중 인스턴스화, DB 암호화 방식은 반드시 포함해줘.
내가 답하면 채점하고, 오답 보기가 0절의 어느 축 반대편인지 절 번호와 함께 설명해줘.
LangTailor