이 책에서 다룬 핵심 용어와 약어를 정리했습니다. 본문을 읽다 막힐 때, 또는 빠르게 개념을 확인할 때 참조하십시오. 각 항목 끝의 장 번호로 본문의 자세한 설명을 찾을 수 있습니다.
위협과 공격자
APT (Advanced Persistent Threat, 지능형 지속 위협) 높은 기술 역량과 자원을 가지고, 특정 표적을 장기간에 걸쳐 끈질기게 공격하는 조직화된 위협. 대개 국가의 지원을 받으며, 들키지 않고 오래 머무는 것을 목표로 한다. 은행·대기업·정부도 APT 앞에서는 절대 안전하지 않다. 이들이 쓰는 전술·기법은 MITRE ATT&CK에 체계적으로 정리되어 있다. (2장)
무차별 공격 (opportunistic attack) 특정 피해자를 정하지 않고, 인터넷 전체를 훑어 취약한 모든 대상을 노리는 공격. 공격자에게 피해자는 이름이 아니라 IP 주소이며, 기본기로 대부분 막을 수 있다. (2장)
표적 공격 (targeted attack) 특정 대상을 정해 놓고, 그에 맞춰 설계하는 공격. 한 경로가 막히면 다른 경로를 찾으며, "옆 사람보다 빠르면 된다"는 논리가 통하지 않는다. (2장)
스크립트 키디 (script kiddie) 공격 원리를 깊이 이해하지 못한 채 남이 만든 도구와 익스플로잇을 받아 실행하는 사람. 역량은 낮지만 수가 많고 도구가 강력하다. (2장)
봇넷 (botnet) 이미 감염되어 공격자의 통제를 받는 다수의 컴퓨터·장치 네트워크. 사람의 개입 없이 자동으로 스캔하고 공격하며 스스로 확장한다. (2장)
랜섬웨어 (ransomware) 피해자의 데이터를 암호화하여 사용할 수 없게 만든 뒤 몸값을 요구하는 악성코드. 데이터를 미리 빼돌려 공개를 협박하는 이중 갈취가 일반적. 최강의 방어는 검증된 백업이다. (2장, 13장)
RaaS (Ransomware-as-a-Service, 서비스형 랜섬웨어) 랜섬웨어를 직접 개발할 능력이 없는 범죄자도 빌려서 공격할 수 있게 한 산업화된 범죄 모델. 공격의 진입 장벽을 낮춰 규모를 키웠다. (2장)
핵티비스트 (hacktivist) 정치적·사회적·이념적 목적으로 해킹하는 개인이나 집단. 메시지 전파, 항의, 적대 세력 타격이 목적. (2장)
내부자 위협 (insider threat) 이미 합법적 접근 권한을 가진 사람(직원, 계약자 등)으로부터 오는 위협. 악의적이거나 부주의할 수 있으며, 외부 방어가 무력하다. (2장, 14장)
소셜 엔지니어링 (social engineering) 기술이 아니라 사람을 속여 보안을 무너뜨리는 공격. 신뢰·권위·긴급성 등 사람의 정상적 성향을 악용한다. AI로 질적으로 강화되었다. 침해의 상당수가 결국 사람 요소에서 비롯된다는 점은 매년 Verizon DBIR 같은 통계가 거듭 보여 준다. (3장, 14장)
피싱 (phishing) 신뢰할 수 있는 출처로 위장하여 정보를 빼내거나 악성 행동을 유도하는 소셜 엔지니어링. 특정인을 정밀 겨냥하면 스피어 피싱. (3장, 14장)
딥페이크 (deepfake) AI로 특정 인물의 목소리나 얼굴을 위조한 가짜 음성·영상. 신뢰하는 사람을 사칭하는 공격에 쓰인다. (3장)
취약점과 위험
CVE (Common Vulnerabilities and Exposures, 공통 취약점 및 노출) 공개적으로 알려진 보안 취약점에 부여되는 고유 식별 번호. 전 세계가 같은 취약점을 같은 이름으로 부르게 한다. 공개 시 방어자와 공격자에게 동시에 정보를 준다. 번호의 공식 출처는 CVE(MITRE)이고, 상세 정보·점수는 NVD(미국 국립취약점DB)에서 찾는다. (4장)
CVSS (Common Vulnerability Scoring System) 취약점의 심각도를 0~10으로 표현하는 표준 점수 체계. 유용하지만, 당신의 맥락·실제 악용 여부·연쇄를 반영하지 못하므로 점수만으로 우선순위를 정하면 안 된다. 점수가 높지 않아도 실제로 악용되고 있다면 먼저 막아야 하므로, CISA KEV(실제 악용 취약점 목록)를 함께 본다. (4장)
0-day (제로데이) 공급자가 모르거나 패치가 없는 상태에서 악용되는 취약점. 매우 위험하지만 드물고, 주로 고가치 표적에 쓰인다. (4장)
n-day 이미 공개되고 패치가 나온 취약점. 패치를 적용하지 않은 시스템이 많아, 대부분의 조직에게 0-day보다 실질적으로 더 위험하다. 2021년에 패치가 나온 Log4Shell(CVE-2021-44228)이 그 뒤로도 수년간 악용된 것이 대표적인 예다. (4장)
무기화 (weaponization) 공개된 취약점 정보를 실제 동작하는 익스플로잇으로 만드는 것. AI가 이 속도를 가속하여 패치 골든타임을 줄인다. (3장, 4장)
골든타임 취약점이 공개·무기화되어 대량 악용되기까지의 시간. 이 안에 패치하면 안전하다. (4장)
익스플로잇 (exploit) 취약점을 실제로 악용하기 위한 코드나 기법. (4장, 11장)
공급망 공격 (supply chain attack) 표적을 직접 공격하는 대신, 표적이 신뢰하고 가져다 쓰는 것(라이브러리, 서비스 등)을 오염시키는 공격. 신뢰를 악용한다. 2024년 xz-utils 백도어(CVE-2024-3094)는 한 오픈소스 유틸리티에 몰래 심긴 백도어가 전 세계 리눅스 배포판으로 퍼질 뻔한 사건으로, 이 위협의 대표 사례다. (4장, 14장)
의존성 (dependency) 애플리케이션이 가져다 쓰는 외부 구성 요소(라이브러리 등). 직접 의존성이 또 다른 것에 의존하는 깊은 나무를 이루며, 그 전체가 공격면이다. 내가 쓰는 패키지에 알려진 취약점이 있는지는 OSV나 GitHub Advisory에서 확인할 수 있다. (4장)
방어 개념
공격면 (attack surface) 공격자가 시스템에 진입하거나 영향을 미치려 시도할 수 있는 모든 지점의 총합. 외부에서 닿을 수 있는 모든 접점. 줄이는 것이 가장 강력한 방어. (5장)
공격면 축소 (attack surface reduction) 기능을 끄고, 포트를 닫고, 노출을 제거하여 공격받을 지점 자체를 줄이는 것. 존재하지 않는 것은 공격당하지 않는다. (이 책의 첫 번째 원칙) (5장)
그림자 자산 (shadow asset) 조직이 가지고 있는 줄도 모르거나 관리에서 누락된 자산(잊힌 서버, 방치된 서브도메인 등). 패치·모니터링이 안 되어 약한 고리가 된다. (5장)
Zero Trust (제로 트러스트) 네트워크의 위치를 신뢰의 근거로 삼지 않고, 모든 접근을 신원으로 검증하는 보안 모델. "안쪽이라고 신뢰하지 않는다." (이 책의 두 번째 원칙과 연결) (6장)
침해 가정 (assume breach) 완벽한 예방은 없다는 전제 하에, 뚫렸을 때의 피해 최소화·빠른 탐지·회복에 대비하는 사고방식. (이 책의 두 번째 원칙) (2장, 13장)
깊이 방어 (defense in depth) 단일 방어선에 의존하지 않고 여러 겹의 방어를 쌓아, 한 겹이 뚫려도 다음 겹이 막게 하는 것. (이 책의 세 번째 원칙) (책 전체)
최소 권한 원칙 (principle of least privilege) 각 계정·프로세스·사람이 자신의 작업에 필요한 최소한의 권한만 갖게 하는 것. 침해 시 피해를 그 권한 범위로 가둔다. (OWASP에서도 거듭 강조하는 기본 원칙이다.) (7장, 11장, 14장)
체류 시간 (dwell time) 공격자가 침입한 순간부터 발각되기까지의 시간. 짧을수록 피해가 작다. 빠른 탐지의 중요성을 나타내는 지표. (13장)
3-2-1 규칙 백업의 원칙. 사본 셋, 두 종류의 매체·장소, 한 벌은 분리된 곳(off-site). 단일 실패점을 없앤다. (13장)
접근과 인증
SSH (Secure Shell) 서버에 대한 암호화된 원격 접속 프로토콜. 강력한 만큼 공격자가 가장 사랑하는 표적이며, 무차별 대입 공격이 끊임없이 도달한다. 구현체는 대개 OpenSSH이고, 안전한 설정값은 Mozilla OpenSSH 가이드를 따르면 된다. (7장)
공개키 인증 (public key authentication) 개인키와 공개키 한 쌍을 사용하는 인증. 개인키는 전송되지 않으므로 추측·무차별 대입·유출에 면역. 단, 개인키를 안전하게 지킬 때만. (7장)
개인키 / 공개키 (private key / public key) 공개키 인증에 쓰이는 키 쌍. 개인키는 자신만 보관하고 절대 내보내지 않으며, 공개키는 공개되어도 안전하고 서버에 등록한다. (7장)
패스프레이즈 (passphrase) 개인키 파일을 보호하는 추가 암호. 개인키가 유출되어도 패스프레이즈를 모르면 쓸 수 없게 하는 두 번째 자물쇠. (7장)
MFA (Multi-Factor Authentication, 다단계 인증) 비밀번호 등 한 가지 외에 추가 인증 요소를 요구하는 것. 자격 증명이 유출되어도 두 번째 요소가 막는다. 피싱에 강한 방식(하드웨어 키)이 더 안전. 인증 요소에 대한 표준 권고는 NIST SP 800-63B에 정리되어 있다. (3장, 7장, 14장)
무차별 대입 (brute force) 가능한 조합을 끊임없이 시도하여 비밀번호 등을 알아내려는 공격. 공개키 인증으로 원리적으로 무력화된다. 비밀번호 로그인을 끄지 못하는 경우라면, 반복 실패 IP를 자동 차단하는 fail2ban으로 시도 자체를 줄일 수 있다. (1장, 7장)
자격 증명 스터핑 (credential stuffing) 한 곳에서 유출된 자격 증명을 다른 서비스에 시도하는 공격. 비밀번호 재사용을 악용한다. 내 이메일·비밀번호가 이미 유출 목록에 있는지는 Have I Been Pwned에서 확인할 수 있다. (11장)
배스천/점프 호스트 (bastion / jump host) 내부 서버에 접근하기 위해 거쳐야 하는, 잘 보호된 단일 진입점. 외부 접점을 하나로 줄여 집중 방어한다. 요즘은 서버 포트를 아예 외부에 열지 않는 Cloudflare Tunnel/Zero Trust 같은 방식으로 같은 목적을 달성하기도 한다. (7장)
발견과 정찰
CT 로그 (Certificate Transparency Log, 인증서 투명성 로그) 발급된 TLS 인증서가 기록되는 공개 장부. HTTPS를 쓰는 모든 호스트명이 노출되므로, 공격자가 새 서버를 즉시 발견하는 경로이자, 방어자가 자신의 서브도메인을 점검하는 도구. crt.sh에 자신의 도메인을 넣어, 잊고 있던 서브도메인이 드러나는지 직접 확인해 보길 권한다. (1장, 5장)
패시브 DNS (passive DNS) DNS 질의 응답을 대규모로 수집·기록한 데이터. 공격자가 오리진 IP를 역추적하는 데 쓰인다. 한 번 노출된 IP는 영구히 기록될 수 있다. (1장, 6장)
OSINT (Open Source Intelligence, 공개 출처 정보) 공개된 정보를 수집·종합하여 표적을 조사하는 것. 채용 공고, 코드 저장소, SNS 등이 공격자에게 지도가 된다. (1장)
오리진 IP (origin IP) CDN이나 프록시 뒤에 있는 실제 서버의 IP. 노출되면 공격자가 보호 계층을 우회해 직접 공격할 수 있다. (6장)
전수 스캐너 (internet-wide scanner) 인터넷 전체를 훑어 열린 포트·서비스를 색인하는 도구·서비스. 새 CVE 공개 시 취약한 서버 목록을 즉시 제공한다. 대표적으로 Shodan, Censys가 있으며, 내 서버가 외부에 무엇을 드러내고 있는지 방어자도 같은 도구로 점검할 수 있다. (1장, 5장)
웹 애플리케이션
인젝션 (injection) 사용자 입력을 데이터가 아니라 명령의 일부로 잘못 해석하게 만드는 공격. SQL 인젝션, 명령 인젝션 등. 방어는 데이터와 명령의 분리(매개변수화된 질의). 언어·프레임워크별 구체적 방어법은 OWASP Cheat Sheets에 잘 정리되어 있다. (12장)
XSS (Cross-Site Scripting, 교차 사이트 스크립팅) 웹 페이지에 악성 스크립트를 주입하여 다른 사용자의 브라우저에서 실행되게 하는 공격. 방어는 출력 인코딩과 CSP. 헤더·속성의 정확한 동작은 MDN Web Docs에서 확인하는 습관을 들이자. (9장, 12장)
인증 / 인가 (authentication / authorization) 인증은 "당신이 누구인가"의 확인(로그인), 인가는 "이것을 할 수 있는가"의 확인(권한). 인증은 했지만 인가를 빠뜨리면 큰 취약점이 된다. (12장)
접근 제어 붕괴 (broken access control) 인가 확인이 누락되어, 권한 없는 자원에 접근할 수 있는 취약점. OWASP Top 10에서 가장 흔한 위험 1위로 꼽힌, 작은 사이트에서도 자주 보이는 결함이다. (11장, 12장)
SSRF (Server-Side Request Forgery, 서버 측 요청 위조) 서버로 하여금 의도하지 않은 곳(내부 자원, 클라우드 메타데이터 등)으로 요청을 보내게 하는 공격. 클라우드에서 특히 치명적. (12장)
역직렬화 (deserialization) 저장·전송된 데이터를 다시 객체로 복원하는 것. 신뢰할 수 없는 데이터를 안전하지 않게 역직렬화하면 임의 코드 실행으로 이어질 수 있다. (12장)
비즈니스 로직 결함 (business logic flaw) 코드는 설계대로 동작하지만 그 설계 자체에 허점이 있는 취약점. 스캐너가 잡지 못하며, "악의적 사용자라면 어떻게 악용할까"를 상상하는 사람의 사고가 필요하다. (12장)
전송 계층
TLS (Transport Layer Security) 인터넷 통신을 암호화하는 표준 기술. 기밀성·무결성·인증을 제공한다. 켜는 것과 제대로 설정하는 것은 다르다. 내 사이트의 설정이 실제로 안전한지는 SSL Labs로 한 번 채점해 보면 바로 드러난다. (8장)
암호 스위트 (cipher suite) TLS 연결에 쓰이는 암호 알고리즘의 조합. 약한 것을 배제하고 강한 것을 우선하며, 권장 목록은 시간에 따라 변한다. 그래서 외울 필요 없이 Mozilla SSL Config Generator가 만들어 주는 최신 설정을 가져다 쓰면 된다. (8장)
순방향 비밀성 (forward secrecy) 서버 키가 미래에 유출되어도 과거 통신은 복호화할 수 없게 하는 성질. 키 유출의 피해가 과거로 소급되지 않게 가둔다. (8장)
HSTS (HTTP Strict Transport Security) 브라우저에게 항상 HTTPS로만 접속하라고 지시하는 헤더. 암호화 이전의 틈을 막는다. preload는 되돌리기 어려우므로 신중히. 이 헤더를 비롯한 보안 헤더가 제대로 적용됐는지는 securityheaders.com이나 Mozilla Observatory로 한눈에 점검할 수 있다. (9장)
CSP (Content-Security-Policy) 허용된 출처의 자원만 실행·로드하도록 브라우저에 지시하는 헤더. XSS의 강력한 방어이지만 설정이 까다로워 관찰 모드로 도입한다. 작성한 정책에 빈틈이 없는지는 CSP Evaluator로 검증할 수 있다. (9장)
OCSP 스테이플링 (OCSP stapling) 인증서 폐기 여부 확인을 효율화하는 기술. 서버가 유효성 증명을 미리 받아 연결 시 함께 제공한다. (8장)
인증서 (certificate) 도메인이 진짜 그 서버의 것임을 신뢰할 수 있는 제3자(CA)가 보증하는 전자 문서. 자동 갱신(ACME)으로 만료 사고를 막는다. (8장)
ACME / Let's Encrypt 인증서 발급·갱신을 자동화하는 프로토콜(ACME)과 무료 인증 기관(Let's Encrypt). HTTPS 보편화의 토대. (8장)
검증과 운영
펜테스트 (penetration test, 침투 테스트) 허가받은 전문가가 공격자 입장에서 실제 침투를 시도하여 약점을 찾는 작업. 자동 스캔이 놓치는 것을 사람의 통찰로 발견한다. 엄격한 허가가 필수. 점검의 기준표로는 OWASP ASVS(애플리케이션 보안 검증 표준)가 널리 쓰인다. (11장)
사고 대응 (incident response, IR) 침해를 알아챈 뒤 하는 일. 확인·격리·증거 보전·제거·복구·교훈의 흐름. 사고 전에 미리 준비해야 한다. (13장)
파일 무결성 모니터링 (file integrity monitoring) 변하지 않아야 할 파일의 변경을 감시하여 침해를 탐지하는 것. (13장)
약점의 연쇄 (chaining) 각각은 사소한 여러 약점을 엮어 큰 침해를 만드는 것. "낮음" 약점도 연쇄의 고리가 될 수 있다. 한 고리만 끊어도 전체가 무너진다. (4장, 11장)
미행 진입 (tailgating) 인가된 사람을 따라 물리적 보안 구역에 무단 진입하는 것. 물리와 소셜 엔지니어링의 결합. (14장)
이 책의 여섯 가지 원칙
- 공격면을 줄여라 — 존재하지 않는 것은 공격당하지 않는다.
- 침해를 가정하라 — 뚫리지 않게가 아니라 뚫려도 피해를 최소화한다.
- 깊이로 방어하라 — 한 겹이 뚫려도 다음 겹이 막는다.
- 검증 없는 보안은 희망일 뿐이다 — 설정하지 말고 측정하라.
- 보안은 과정이지 상태가 아니다 — 한 번 하고 잊는 보안은 없다.
- 공격이 자동화되면 방어도 자동화되어야 한다 — AI 시대의 방어 자동화.