당신의 클릭을 노린다: 웹 공격과 악성코드
목차 23
5과목(정보시스템 구축 관리) 정보보호 영역의 네 번째 강. 49강이 네트워크 인프라 자체를 때리는 공격(DDoS·스니핑·스푸핑)을 다뤘다면, 50강은 한 계층 위 — 웹 애플리케이션과 사용자 브라우저를 노리는 공격, 그리고 악성코드를 연다. 모든 공격은 한 문장으로 정렬된다 — "신뢰할 수 없는 입력을 신뢰해서 생기는 사고". 다섯 묶음으로 정리한다. ① 데이터·명령 경계가 무너지는 인젝션(★인=데명경계★·★에유블시★·★준검권W★), ② 브라우저를 노리는 XSS·CSRF·클릭재킹(★저반돔★·★XSS=실행, CSRF=위조★·★웹3=인XC★), ③ 서버를 장악하는 기타 웹 취약점(★업디세★), ④ 자기복제로 갈리는 악성코드(★바웜트★ 회수)와 가용성을 인질로 잡는 랜섬웨어(★랜=암잠신★), ⑤ 공격↔CIA 매트릭스. SQL 인젝션·XSS·CSRF·랜섬웨어가 매 회차 1~3문제로 고정 출제되는 5과목 최대 빈출 단원이다.
대단원 1 — 인젝션 공격
인젝션의 본질 + 4대장 ★인=데명경계★ ·인젝션·시험 1순위·
[정의] 인젝션(Injection) = 사용자 입력값이 검증 없이 명령어의 일부로 실행되면서, 데이터가 와야 할 곳에 명령이 끼어드는 공격. 본질을 ★인=데명경계★으로 잡는다 — 데이터와 명령의 경계 파괴.
[표] 인젝션 4대장
| 유형 | 공격 대상 | 끼어드는 명령 |
|---|---|---|
| SQL Injection | 데이터베이스 | SQL 쿼리 |
| OS Command Injection | 운영체제 쉘 | 시스템 명령어 |
| XML/XPath Injection | XML 파서 | XPath 쿼리 |
| LDAP Injection | 디렉터리 서비스 | LDAP 필터 |
🔑 암기 ★인=데명경계★ — 입력값이 명령으로 해석되는 순간 인젝션 성공. 4대장 공통 방어 = 입력값을 명령어에 직접 결합하지 말 것(파라미터화 API). ⚠️ 함정 빈도는 SQL Injection이 압도적 1위, OS Command가 2위, XML/LDAP은 소거형 보기용. "인젝션에 속하지 않는 것?" 보기에 DDoS·Buffer Overflow가 끼면 그게 정답. 🎯 빈출 "모든 인젝션의 공통 원리?" → 데이터·명령 경계 파괴. "인젝션 4대장?" → SQL·OS Command·XML/XPath·LDAP. 💡 은행 창구에 "100만원 이체하고, 그 다음 전 계좌 잔액 다 빼줘"라고 했는데 직원이 그대로 실행하면 — 데이터에 명령이 끼어든 것. 이게 인젝션이다.
SQL Injection — 작동 원리 + ★에유블시★ 4유형 ·SQLi·시험 1순위·
[정의] SQL Injection = 입력값에 SQL 구문을 끼워넣어 인증 우회·DB 조회·변경·삭제를 일으키는 공격. 인젝션 4대장 중 시험 1순위.
[흐름] 로그인 폼 우회 — ' OR '1'='1의 원리
- 정상: 비밀번호
1234→... WHERE id='admin' AND pw='1234' - 주입: 비밀번호 칸에
' OR '1'='1입력 →... WHERE id='admin' AND pw='' OR '1'='1' '1'='1'은 항상 참 → 비밀번호를 몰라도 로그인 성립
[표] ★에유블시★ — SQLi 4유형(공격자가 결과를 어떻게 보느냐)
| 두음 | 유형 | 핵심 |
|---|---|---|
| 에 | Error-based | DB 에러 메시지로 정보 추출 |
| 유 | Union-based | UNION SELECT로 추가 쿼리 결합·화면 출력 |
| 블 | Blind | 참/거짓 반응 차이로 한 글자씩 추론 |
| 시 | Time-based | SLEEP·WAITFOR 함수로 응답 시간 차이 추론 |
🔑 암기 ★에유블시★ — 에러·유니온·블라인드·시간. 에러 메시지를 숨기는 요즘 서비스에선 블라인드·시간 기반이 실무 주력.
⚠️ 함정 침해 CIA는 주로 기밀성·무결성(조회·변경). DROP TABLE 같은 특수 경우만 가용성. "SQLi 주 침해 = 가용성" ❌.
🎯 빈출 지문에 ' OR '1'='1 또는 '데이터베이스 질의문'이 보이면 즉답 SQL Injection. 'SLEEP'→Time-based, 'UNION'→Union-based, '참/거짓 반응'→Blind, '에러 메시지'→Error-based.
📝 기출 기출 1 (SQLi 정의)
💡 출입문 비밀번호를 몰라도 '아무 숫자나 눌러도 열리는 마스터키 코드'를 끼워넣는 것. ★인=데명경계★가 적용되는 첫 실전이다.
SQLi 방어 4축 ★준검권W★ — Prepared Statement가 왕 ·SQLi 방어·시험 1순위·
[정의] SQL Injection 방어를 4축으로 잡되, 우선순위가 핵심 — Prepared Statement(준비된 문·파라미터 바인딩)가 1순위 최고 방어, 나머지는 보조.
[표] ★준검권W★ — SQLi 방어 4축
| 두음 | 방어축 | 설명 | 위상 |
|---|---|---|---|
| 준 | 준비된 문(Prepared Statement) | 쿼리 구조 먼저 고정, 값만 바인딩 | 최고 방어 |
| 검 | 입력 검증 | 화이트리스트 기반 허용 문자만 통과 | 보조 |
| 권 | 최소 권한 | DB 계정에 필요 최소 권한만 부여 | 피해 축소 |
| W | WAF | 웹 방화벽으로 악성 패턴 탐지·차단 | 외곽 방어 |
🔑 암기 ★준검권W★ — 준비된 문·입력검증·최소권한·WAF. 'SQLi 방어 1순위?'의 답은 항상 Prepared Statement. 값과 명령을 물리적으로 분리해 쿼리 구조 자체를 고정한다. ⚠️ 함정 "Prepared Statement는 보조 방어" ❌ → 최고 방어. "문자열 연결(concatenation)로 SQL 생성"은 방어가 아니라 취약점의 원인 — 'SQLi 방어로 옳지 않은 것?'의 정답. 🎯 빈출 매 회차 1순위로 떨어지는 결정적 단골. "SQLi 근본 해결책?" → Prepared Statement. 입력 검증·WAF만으로는 모든 우회를 막지 못한다. 📝 기출 기출 8 (SQLi 방어 옳지 않은 것) 💡 창구 직원이 "양식 빈칸만 채워주세요, 문장은 이미 인쇄돼 있어요"라고 하면 고객이 무엇을 적어도 양식 밖으로 못 나간다. 이게 Prepared Statement.
나머지 인젝션 3인방 — OS Command·XML·LDAP ·인젝션·간헐·
[정의] SQL 외 인젝션 3종. 빈도는 SQLi보다 낮지만 '인젝션 범주에 속하지 않는 것?' 소거형으로 간헐 출제.
[표] 인젝션 3인방
| 유형 | 대상 | 공격 예시 | 방어 |
|---|---|---|---|
| OS Command | 운영체제 쉘 | ; rm -rf / 끼워넣기 |
시스템 함수 호출 최소화 + 화이트리스트 |
| XML/XPath | XML 파서 | XPath 쿼리 변조 | 파라미터화 XPath + 입력 검증 |
| LDAP | 디렉터리 서비스 | )(uid=*) 필터 변조 |
LDAP 이스케이프 + 입력 검증 |
🔑 암기 셋 다 본질은 ★인=데명경계★. 방어도 동일 — 입력값을 명령어에 직접 결합하지 말고 파라미터화 API.
⚠️ 함정 OS Command는 ; | 같은 구분자로 뒤에 추가 명령을 붙인다 — 파일명 입력칸에 report.pdf; rm -rf /를 넣으면 조회 뒤 서버 삭제가 실행될 수 있다.
🎯 빈출 보기 4개 중 SQL·OS Command·XML·LDAP은 전부 인젝션. DDoS·Buffer Overflow가 끼면 그게 '인젝션 아닌 것'.
대단원 2 — XSS · CSRF · 클릭재킹
XSS 3종 ★저반돔★ — 남의 브라우저에서 스크립트 실행 ·XSS·시험 1순위·
[정의] 크로스 사이트 스크립팅(XSS) = 공격자가 웹 페이지에 악성 스크립트를 심어, 그 페이지를 방문하는 사용자 브라우저에서 스크립트가 실행되게 하는 공격. 스크립트가 어디 저장되고 어떻게 전달되느냐로 3종.
[표] ★저반돔★ — XSS 3종
| 두음 | 유형 | 저장 위치 | 지속성 | 탐지 |
|---|---|---|---|---|
| 저 | 저장형(Stored) | DB에 저장 | 지속적(모든 방문자) | 중간 |
| 반 | 반사형(Reflected) | URL 파라미터 | 일회성(링크 클릭 시) | 쉬움 |
| 돔 | DOM 기반(DOM-based) | 클라이언트 JS | 서버 미경유 | 매우 어려움 |
🔑 암기 ★저반돔★ — 저장형(DB·지속)·반사형(URL·일회)·DOM 기반(서버 미경유). 'DB 저장·지속'은 Stored, 'URL·일회'는 Reflected, '서버 미경유'는 DOM. ⚠️ 함정 Stored와 Reflected 설명 바꿔치기가 단골. 'URL 파라미터·일회성'인데 이름이 Stored면 함정. DOM 기반은 서버를 안 거쳐 서버 로그로 탐지가 어렵다. 🎯 빈출 XSS 3종 짝짓기·바꿔치기 함정. ★저반돔★ 세 글자면 즉시 판별. 📝 기출 기출 2 (XSS 3종) 💡 게시판에 붙인 악성 메모(Stored·지나가는 사람마다 피해) vs 특정인에게 보낸 악성 링크(Reflected·그 사람만) vs 브라우저 안에서 몰래 바뀌는 마술(DOM·서버는 모름).
XSS 방어 4단계 — 필터링·인코딩·CSP·쿠키 보안 ·XSS 방어·단골·
[정의] XSS 방어선을 4단계로 — 입력에서 막고, 출력에서 바꾸고, 정책으로 제한하고, 쿠키를 숨긴다.
[표] XSS 방어 4단계
| 단계 | 방어책 | 역할 |
|---|---|---|
| ① | 입력 필터링 | <script> 등 위험 문자 차단 |
| ② | 출력 인코딩 | < → < 변환 — 브라우저가 코드로 해석 못하게 |
| ③ | CSP(Content Security Policy) | 허용된 출처의 스크립트만 실행 |
| ④ | 쿠키 보안 3종 | HttpOnly + Secure + SameSite |
🔑 암기 쿠키 보안 3종이 핵심 — HttpOnly(JS로 쿠키 읽기 차단 → 스크립트가 실행돼도 세션 쿠키 탈취 불가)·Secure(HTTPS에서만 전송)·SameSite(타 사이트 요청엔 쿠키 미전송). ⚠️ 함정 출력 인코딩만으로 끝이 아니다 — 4겹이 겹겹이 쌓인다. HttpOnly가 걸리면 XSS로도 세션 쿠키를 못 읽는다(세션 하이재킹 차단의 핵심). 🎯 빈출 "XSS로 인한 세션 쿠키 탈취를 막는 쿠키 속성?" → HttpOnly. "허용 출처 스크립트만 실행하는 정책?" → CSP. 💡 입력 필터링=보안 검색대, 출력 인코딩=내용물이 새지 않는 코팅, CSP=출입 허가증, 쿠키 보안=금고 잠금.
CSRF — 훔치지 않고 '이용'하는 공격 ·CSRF·시험 1순위·
[정의] CSRF(Cross-Site Request Forgery) = 피해자가 로그인된 상태를 악용해, 공격자가 의도한 요청을 피해자 브라우저가 대신 전송하게 만드는 공격. 핵심 한 줄 — 쿠키를 훔치지(steal) 않는다, 이용(use)한다.
[흐름] CSRF 작동 5단계
- 피해자가 은행 사이트에 로그인(세션 쿠키 보유)
- 공격자가 만든 악성 페이지 방문
- 그 페이지가 은행에 '100만원 이체' 요청을 자동 전송
- 브라우저가 은행 쿠키를 자동으로 함께 전송
- 은행은 정상 요청으로 판단 → 이체 실행
🔑 암기 브라우저는 같은 도메인 요청 시 그 도메인 쿠키를 자동 전송 — CSRF는 이 편의 기능을 악용한다. 방어 = CSRF 토큰(일회용 난수를 폼에 삽입) + SameSite 쿠키 + Referer/Origin 검증. ⚠️ 함정 "CSRF가 피해자 쿠키를 탈취한다" ❌ → 탈취는 XSS의 동작. CSRF는 탈취하지 않고 이용만 한다. 🎯 빈출 방어책을 물으면 대부분 정답 CSRF 토큰. '악성 페이지 방문만으로 실행'·'인증 상태 이용'은 옳은 설명. 📝 기출 기출 3 (CSRF 옳지 않은 것) 💡 내 도장(쿠키)을 훔친 게 아니라, 내가 도장을 품고 있는 상태에서 나도 모르게 찍히게 만드는 것.
XSS vs CSRF ★XSS=실행, CSRF=위조★ ·비교·매회 출제·
[정의] 매 회차 비교 문제가 나오는 단골. 결정적 차이를 ★XSS=실행, CSRF=위조★ 여섯 글자로 — XSS는 스크립트 실행(execute), CSRF는 요청 위조(forge).
[표] XSS vs CSRF
| 비교축 | XSS | CSRF |
|---|---|---|
| 핵심 동작 | 악성 스크립트 실행 | 위조 요청 전송 |
| 쿠키 탈취 | O(스크립트로 읽기) | X(탈취 않고 이용만) |
| 공격 위치 | 피해자 브라우저 안 | 피해자 → 서버로 요청 |
| 방어 핵심 | 입력 필터링·CSP·HttpOnly | CSRF 토큰·SameSite |
| CIA 침해 | 기밀성·무결성 | 무결성(위조된 행위) |
🔑 암기 ★XSS=실행, CSRF=위조★ — 쿠키 탈취 여부가 핵심. XSS=엿보기(도청기 설치), CSRF=사칭(이름으로 편지 대필). ⚠️ 함정 CSRF의 CIA 침해는 무결성(기밀성 아님 — 쿠키를 탈취하지 않으므로). XSS는 기밀성·무결성 둘 다. 🎯 빈출 한 문제에 둘을 같이 넣고 차이를 고르게 한다. 뒤의 세션 고정·하이재킹까지 합친 4종 비교도 대비. 📝 기출 기출 3·기출 7 (CSRF·CIA 매칭)
클릭재킹 — 보이지 않는 버튼을 누르게 ·클릭재킹·간헐·
[정의] 클릭재킹(Clickjacking) = 투명한 iframe 위에 가짜 UI를 겹쳐, 사용자가 '좋아요'를 누른 줄 알지만 실제로는 '결제 승인'을 누르게 만드는 공격. '클릭을 납치'한다.
[표] 클릭재킹 한눈에
| 항목 | 내용 |
|---|---|
| 원리 | 투명 iframe + 겹친 가짜 버튼 → 의도하지 않은 클릭 유도 |
| 방어 | X-Frame-Options: DENY 또는 CSP frame-ancestors 'none' |
| 효과 | 내 사이트가 타 사이트 iframe 안에 들어가지 못하게 차단 |
🔑 암기 'iframe' + 'X-Frame-Options' 두 키워드가 함께 보이면 정답 클릭재킹. ⚠️ 함정 CSRF와 헷갈리지 말 것 — CSRF는 '요청 자체를 위조', 클릭재킹은 '정상 버튼을 눈속임으로 누르게'. 공통점은 '의도하지 않은 행위 유발'. 🎯 빈출 단독으로 'iframe + X-Frame-Options' 키워드 매칭.
웹 공격 3대장 ★웹3=인XC★ + OWASP Top 10 ·종합·간헐·
[정의] 웹 공격 3대장을 ★웹3=인XC★로 — 인젝션·XSS·CSRF. 매 회차 합산 2~3문제가 이 셋에서 나온다. OWASP Top 10 = 전 세계 웹 보안 취약점을 정리하는 국제 표준 목록.
[표] 웹 공격 3대장
| 두음 | 공격 | 본질 |
|---|---|---|
| 인 | Injection | ★인=데명경계★ 데이터·명령 경계 파괴 |
| X | XSS | ★저반돔★ 남의 브라우저에서 스크립트 실행 |
| C | CSRF | 인증 세션 이용한 요청 위조 |
🔑 암기 ★웹3=인XC★ — 인젝션·XSS·CSRF. OWASP Top 10은 '웹 애플리케이션에서 가장 위험한 취약점 목록'이라는 정의·성격을 묻는다(정확한 순위가 아니라). ⚠️ 함정 OWASP 순위는 2~3년 주기로 개정 — 특정 순위를 통째로 외우는 함정에 빠지지 말 것. 접근 통제(Broken Access Control)는 최신 개정에서도 1위, 인젝션은 늘 상위권. 🎯 빈출 "OWASP가 보이면?" → 웹 애플리케이션 보안 표준 목록. 'Injection이 Top 10에 포함된다'는 항상 참. 💡 OWASP Top 10은 2017→2021→2025로 개정돼 왔다. 2021 기준 Injection 3위였으나 2025 개정에서 5위로 내려갔고, Broken Access Control은 계속 1위다. 시험은 순위 암기가 아니라 'OWASP=웹 취약점 국제 표준'이라는 개념을 묻는다.
대단원 3 — 기타 웹 취약점 ★업디세★
파일 업로드(Webshell) — 웹으로 서버 쉘 장악 ·기타 웹·단골·
[정의] 기타 웹 취약점 3종을 ★업디세★로 — 파일업로드(Webshell)·디렉터리 순회·세션 공격. 첫 번째 Webshell = 공격자가 악성 스크립트 파일(.php·.jsp 등)을 업로드한 뒤, 브라우저로 그 파일에 접근해 서버 쉘을 원격 조종하는 공격.
[표] Webshell 공격 단계 vs 방어
| 단계 | 방어 |
|---|---|
| ① 악성 파일 업로드 | 확장자 화이트리스트(.jpg·.png만 허용) |
② 확장자 우회(.php.jpg) |
MIME 타입 재검증 + Null Byte 차단 |
| ③ 업로드 후 실행 | 실행 권한 제거 + 파일명 랜덤화 |
| ④ 쉘 명령 실행 | WAF + 서버 최소 권한 |
🔑 암기 ★업디세★의 '업'. 방어 1차선 = 서버측 확장자 화이트리스트. ②(업로드)를 막으면 ③④가 자동 차단된다. ⚠️ 함정 "Webshell 방어 = 클라이언트 JS 검증으로 충분" ❌ → 반드시 서버측 화이트리스트 + 실행 권한 제거. 클라이언트 검증은 우회된다. 🎯 빈출 '악성 파일 업로드 + 웹으로 원격 명령 실행' 조합 → Webshell. 📝 기출 기출 5 (Webshell) 💡 가짜 직원증으로 관리사무소에 들어가 중앙 제어실 열쇠를 복사하는 것 — 한 번 성공하면 서버 전체를 브라우저만으로 조종한다.
디렉터리 순회 — ../로 시스템 파일 엿보기 ·기타 웹·단골·
[정의] 디렉터리 순회(Directory Traversal·경로 조작) = URL·파일 경로에 ../를 반복해 웹 서버 허용 폴더 밖으로 빠져나가 /etc/passwd 같은 시스템 파일을 읽는 공격.
[표] 디렉터리 순회 한눈에
| 항목 | 내용 |
|---|---|
| 정상 | http://site/files?name=report.pdf |
| 공격 | http://site/files?name=../../../etc/passwd |
| 우회 | URL 인코딩 %2e%2e%2f·유니코드 변환 |
| 방어 | 경로 정규화(canonicalize) + 화이트리스트 파일명 |
🔑 암기 ../와 /etc/passwd가 함께 보이면 무조건 디렉터리 순회 — 이 공격의 고유 시그니처.
⚠️ 함정 "블랙리스트로 ../만 차단하면 된다" ❌ → %2e%2e%2f 같은 인코딩 우회가 있다. 경로 정규화 후 허용 범위 검사(화이트리스트)가 근본.
🎯 빈출 '상대 경로·루트 디렉터리 외부·시스템 파일 접근' → 디렉터리 순회. 대상은 파일시스템(SQLi는 DB).
📝 기출 기출 4 (디렉터리 순회)
💡 도서관에서 '3층 열람실만 이용 가능'인데 계단으로 지하 서고까지 내려가 비밀 문서를 꺼내오는 것.
세션 고정 vs 세션 하이재킹 — 순서가 정반대 ·기타 웹·단골·
[정의] ★업디세★의 '세'. 세션 ID를 노리는 공격 2종 — 순서(로그인 전/후)와 방향(심기/훔치기)이 정반대. 49강의 세션 하이재킹(인증된 토큰 탈취)을 웹 레벨로 잇는다.
[표] 세션 고정 vs 하이재킹
| 구분 | 세션 고정(Fixation) | 세션 하이재킹(Hijacking) |
|---|---|---|
| 순서 | 로그인 전 공격 | 로그인 후 공격 |
| 방법 | 공격자가 자기 세션 ID를 피해자에게 심기 | 피해자의 기존 세션 ID를 훔치기 |
| 비유 | 내 집 열쇠를 남에게 미리 줌 | 남의 집 열쇠를 몰래 복사 |
| 방어 | 로그인 성공 시 세션 ID 재발급 | HttpOnly·Secure + 세션 만료 |
🔑 암기 '심기 vs 훔치기' — 고정=공격자 세션을 피해자에게, 하이재킹=피해자 세션을 공격자가. 고정 방어는 로그인 성공 시점 세션 ID 재발급 한 방. ⚠️ 함정 "세션 고정과 하이재킹은 같은 공격" ❌ → 순서가 정반대. 세션 하이재킹은 진입 경로가 둘 — 네트워크 레벨 패킷 캡처(49강) vs 웹 레벨 XSS로 쿠키 탈취. 🎯 빈출 '로그인 전에 세션 ID를 심는다' → 고정. '인증된 세션을 가로챈다' → 하이재킹. 💡 49강에서 세션 하이재킹을 '이미 인증된 토큰 탈취'로 봤다면, 웹에선 그 탈취 경로가 XSS다(HttpOnly가 막아야 하는 이유).
대단원 4 — 악성코드와 랜섬웨어
악성코드 분류 — 7종 + 신종 3인방 ★바웜트★ ·악성코드·빈출·
[정의] 악성코드를 자기복제 여부로 분류한다. 49강 ★바웜트★(바이러스·웜·트로이)를 그대로 회수 — 3대장의 자기복제·숙주 차이가 핵심.
[표] 악성코드 7종(자기복제 기준)
| 유형 | 핵심 1줄 | 자기복제 |
|---|---|---|
| 바이러스 | 숙주 파일에 기생, 실행 시 감염 | O |
| 웜 | 네트워크 자체 전파, 숙주 불필요 | O |
| 트로이 목마 | 정상 프로그램 위장, 백도어 설치 | X |
| 스파이웨어 | 몰래 정보 수집·전송 | X |
| 애드웨어 | 강제 광고 노출 | X |
| 키로거 | 키보드 입력 기록 | X |
| 봇(Bot) | 원격 조종(봇넷 → DDoS 동원) | X |
[표] 신종 악성코드 3인방(2020년 이후·정의 매칭 출제)
| 유형 | 핵심 1줄 | 방어 |
|---|---|---|
| 크립토재킹 | 피해자 CPU로 몰래 암호화폐 채굴 | 자원 사용 모니터링 |
| 폼재킹 | 결제 페이지에 스크립트 삽입 → 카드 정보 탈취 | 무결성 검증·CSP |
| 파일리스 | 디스크에 파일 없이 메모리에서만 동작 | EDR(행위 기반 탐지) |
🔑 암기 자기복제 O = 바이러스·웜 / X = 트로이·스파이·애드·키로거·봇. 바이러스=숙주 필요(접촉 전파), 웜=숙주 불필요(공기 전파). 봇 수만 대 = 봇넷 → DDoS(49강 회수). ⚠️ 함정 "트로이 목마는 자기복제한다" ❌ → 위장만, 복제 X. 파일리스는 디스크 흔적이 없어 기존 안티바이러스로 탐지가 어렵다 → EDR이 답. 🎯 빈출 악성코드 분류(자기복제·숙주). '피해자 자원으로 암호화폐 채굴' → 크립토재킹. 💡 파일리스는 PowerShell·WMI 같은 정상 도구를 악용해 메모리에서만 실행되는 '발자국 없는 도둑' — EDR은 발자국 대신 행동 패턴을 추적한다.
랜섬웨어 ★랜=암잠신★ — 파일을 인질로 잡는 공격 ·랜섬웨어·빈출·
[정의] 랜섬웨어 = 파일을 암호화해 접근을 막고 복호화 대가로 몸값을 요구하는 악성코드. 정보보호 3요소(47강 ★기무가★) 중 가용성 침해가 핵심 — 파일 접근 자체를 차단한다. 유형 3종을 ★랜=암잠신★으로.
[표] ★랜=암잠신★ — 랜섬웨어 3종
| 두음 | 유형 | 대표 사례 | 핵심 |
|---|---|---|---|
| 암 | 암호화형(Crypto) | WannaCry·CryptoLocker | 파일 암호화 → 복호화 키 요구 |
| 잠 | 화면잠금형(Locker) | WinLocker | 화면 잠금(파일은 무사) |
| 신 | 신종(RaaS) | LockBit·REvil·BlackCat | 서비스형(구독 모델) |
[표] 감염 경로 & 방어
| 항목 | 내용 |
|---|---|
| 감염 경로 | 악성 이메일(피싱·최다)·드라이브 바이 다운로드·공급망 공격 |
| 방어(백업 3-2-1) | 3개 복사본·2가지 매체·1개 오프라인(물리 분리) |
| 사고 대응 | KISA 보호나라(118) 신고 / 몸값 지불 금지 |
🔑 암기 ★랜=암잠신★ — 암호화·잠금·신종(RaaS). 침해 = 가용성(47강 ★기무가★의 '가'). 오프라인 백업이 마지막 보루(네트워크 연결 드라이브는 함께 암호화된다). ⚠️ 함정 "랜섬웨어 주 침해 = 무결성" ❌ → 가용성. "몸값 지불 = 가장 빠른 복구" ❌ → 지불해도 복호화 보장이 없고 재공격 타깃이 된다(국제 공동 권고 = 지불 금지). 🎯 빈출 "랜섬웨어 침해 CIA?" → 가용성. 대표 사례 WannaCry(2017·EternalBlue 취약점·전 세계 대규모 확산). 📝 기출 기출 6 (랜섬웨어 특징 소거) 💡 RaaS(Ransomware as a Service) = 구독형으로 사서 쓰는 모델 — 제작 실력 없이도 공격이 가능해 피해가 폭증했다. 최근 트렌드는 다중 갈취(암호화 + 데이터 유출 협박 + DDoS 위협 동시).
대단원 5 — 공격 ↔ CIA 매트릭스
공격 vs CIA 매트릭스 — 한 장으로 끝내기 ·종합·매회 출제·
[정의] 50강의 모든 공격이 정보보호 3요소(47강 ★기무가★ — 기밀성·무결성·가용성) 중 무엇을 침해하는지 매핑. CIA가 '지켜야 할 방패'라면 공격은 '그 방패를 뚫는 창'.
[표] 공격 ↔ CIA
| 공격 | 기밀성 | 무결성 | 가용성 |
|---|---|---|---|
| SQL Injection | O | O | △ |
| XSS | O | O | - |
| CSRF | - | O | - |
| 디렉터리 순회 | O | - | - |
| 클릭재킹 | - | O | - |
| 랜섬웨어 | - | - | O |
| 크립토재킹 | - | - | O(성능 저하) |
🔑 암기 '서버를 노리면 기밀·무결, 사용자를 속이면 무결, 파일을 잠그면 가용'. CSRF=무결성, 랜섬웨어=가용성 두 줄만 잡으면 매칭 함정 통과. ⚠️ 함정 ① SQLi 주 침해는 기밀·무결(가용성은 DROP 특수) ② CSRF는 기밀성 아님(탈취 X) → 무결성 ③ 랜섬웨어는 무결성 아님 → 가용성. 🎯 빈출 공격 유형 + CIA를 짝지어 묻는 통합형이 최근 트렌드. 매 회차 단골. 📝 기출 기출 7 (공격-CIA 매칭)
기출 다지기
[기출 1 출제] 다음 설명에 해당하는 웹 공격으로 가장 적절한 것은? (해당하는 것 고르기)
사용자로부터 입력받은 값을 검증 없이 데이터베이스 질의문의 일부로 사용할 때 발생하며, 공격자가 입력값에 악의적 질의 구문을 포함시켜 DB 정보를 무단으로 조회·변경·삭제하는 공격이다.
- ① Cross-Site Request Forgery(CSRF)
- ② SQL Injection
- ③ Directory Traversal
- ④ Clickjacking
정답 및 해설 보기
정답: ② SQL Injection
| 보기 | 판정 | 이유 |
|---|---|---|
| ① CSRF | ❌ | 인증 세션 이용한 요청 위조 — DB 질의문과 무관 |
| ② SQL Injection | ✅ | DB 질의문에 악성 구문 삽입 — 지문과 정확히 매칭 |
| ③ Directory Traversal | ❌ | ../로 파일시스템 접근 — DB 무관 |
| ④ Clickjacking | ❌ | iframe 위 투명 버튼 — UI 기반 |
🔑 암기 '데이터베이스 질의문'·' OR '1'='1이 보이면 즉답 SQL Injection. ★인=데명경계★.
[기출 2 출제] 크로스 사이트 스크립팅(XSS) 유형과 설명이 올바르게 짝지어진 것은? (올바르게 짝지어진 것 고르기)
- ① Stored XSS — URL 파라미터에 스크립트를 삽입하여 일회성 공격 수행
- ② Reflected XSS — 악성 스크립트를 DB에 저장하여 지속적 피해 발생
- ③ DOM-based XSS — 서버를 거치지 않고 클라이언트 측에서 DOM을 조작
- ④ Stored XSS — 서버를 거치지 않고 브라우저 메모리에서만 동작
정답 및 해설 보기
정답: ③ DOM-based XSS
| 보기 | ★저반돔★ 대입 | 판정 |
|---|---|---|
| ① Stored + URL·일회성 | 'URL·일회'는 Reflected 설명 | ❌ |
| ② Reflected + DB·지속 | 'DB 저장·지속'은 Stored 설명 | ❌ |
| ③ DOM-based + 서버 미경유·DOM 조작 | 정확 | ✅ 정답 |
| ④ Stored + 서버 미경유·메모리 | '서버 미경유·메모리'는 DOM 설명 | ❌ |
🔑 암기 ★저반돔★ — '저장·지속'=Stored, 'URL·일회'=Reflected, '서버 미경유'=DOM. 짝을 이루는 개념엔 항상 설명 바꿔치기 함정이 숨는다.
[기출 3 출제] CSRF(Cross-Site Request Forgery) 공격에 대한 설명으로 옳지 않은 것은? (옳지 않은 것 고르기)
- ① 피해자가 인증된 상태에서 공격자가 의도한 요청을 서버에 전송하게 한다
- ② 피해자의 세션 쿠키를 직접 탈취하여 공격자 브라우저에서 사용한다
- ③ 방어책으로 CSRF 토큰(일회용 난수)을 사용할 수 있다
- ④ 피해자가 악성 페이지를 방문하는 것만으로도 공격이 실행될 수 있다
정답 및 해설 보기
정답: ② 피해자의 세션 쿠키를 직접 탈취하여 사용한다
| 보기 | 판정 | 분석 |
|---|---|---|
| ① 인증 상태 이용 | ✅ 옳음 | CSRF의 정확한 정의 |
| ② 쿠키 직접 탈취 | ❌ 정답 | 탈취는 XSS의 동작 — CSRF는 탈취 않고 이용만 |
| ③ CSRF 토큰 | ✅ 옳음 | 대표 방어책 |
| ④ 악성 페이지 방문 | ✅ 옳음 | img/form 태그로 자동 요청 전송 |
🔑 암기 '탈취·훔치다·읽다'가 보이면 CSRF가 아니라 XSS. ★XSS=실행, CSRF=위조★ — CSRF는 훔치지 않는다, 이용한다.
[기출 4 출제] 다음 설명에 해당하는 공격 기법은? (해당하는 것 고르기)
파일 이름을 입력받아 처리할 때 입력값에 상대 경로 문자(
../)를 삽입하여, 웹 서버 루트 디렉터리 외부의 시스템 파일(/etc/passwd등)에 접근하는 공격이다.
- ① SQL Injection
- ② Brute Force
- ③ Directory Traversal
- ④ Session Hijacking
정답 및 해설 보기
정답: ③ Directory Traversal
| 보기 | 판정 | 이유 |
|---|---|---|
| ① SQL Injection | ❌ | DB 질의문 조작 — 파일시스템 접근 아님 |
| ② Brute Force | ❌ | 비밀번호 무차별 대입 — 파일 접근 아님 |
| ③ Directory Traversal | ✅ 정답 | ../로 제한 경로 외부 파일 접근 |
| ④ Session Hijacking | ❌ | 세션 탈취 — 파일 접근 아님 |
🔑 암기 ../·/etc/passwd·'상대 경로'·'루트 외부'는 디렉터리 순회 고유 시그니처. 대상=파일시스템(SQLi는 DB).
[기출 5 출제] 다음 설명에 해당하는 공격으로 옳은 것은? (해당하는 것 고르기)
웹 서버 취약점을 이용해 악성 스크립트 파일을 업로드한 후, 웹 브라우저를 통해 원격으로 서버의 시스템 명령을 실행할 수 있게 하는 공격이다.
- ① SYN Flooding
- ② Webshell
- ③ Keylogger
- ④ Ransomware
정답 및 해설 보기
정답: ② Webshell
| 보기 | 판정 | 이유 |
|---|---|---|
| ① SYN Flooding | ❌ | TCP 3-way 악용 DoS(45·49강) — 파일 업로드 무관 |
| ② Webshell | ✅ 정답 | 악성 파일 업로드 → 웹으로 시스템 쉘 원격 실행 |
| ③ Keylogger | ❌ | 키보드 입력 기록 — 파일 업로드 무관 |
| ④ Ransomware | ❌ | 파일 암호화 후 몸값 요구 — 쉘 실행 무관 |
🔑 암기 '업로드 + 원격 명령 실행' 조합 = Webshell. 1차 방어 = 서버측 확장자 화이트리스트. 네트워크 계층 공격(SYN Flooding)을 끼워넣는 함정에 주의.
[기출 6 출제] 랜섬웨어(Ransomware)의 특징에 해당하지 않는 것은? (해당하지 않는 것 고르기)
- ① 사용자의 파일을 암호화하여 접근을 차단한다
- ② 암호화된 파일의 복호화를 조건으로 금전을 요구한다
- ③ 이메일 첨부파일이나 악성 웹사이트를 통해 감염될 수 있다
- ④ TCP 연결 요청을 대량으로 보내 서버 자원을 소진시킨다
정답 및 해설 보기
정답: ④ TCP 연결 요청을 대량으로 보내 서버 자원을 소진시킨다
| 보기 | 판정 | 분석 |
|---|---|---|
| ① 파일 암호화·접근 차단 | ✅ 옳음 | 랜섬웨어 핵심(가용성 침해) |
| ② 복호화 대가 금전 요구 | ✅ 옳음 | 랜섬웨어 정의 |
| ③ 이메일·악성 웹사이트 감염 | ✅ 옳음 | 대표 감염 경로 |
| ④ TCP 대량 연결 | ❌ 정답 | SYN Flooding(네트워크 DoS·49강) |
🔑 암기 랜섬웨어·SYN Flooding 둘 다 가용성 침해지만 메커니즘이 정반대 — 파일 잠금 vs 자원 고갈. ★랜=암잠신★.
[기출 7 출제] 웹 공격과 주된 침해 보안 요소(CIA)가 잘못 짝지어진 것은? (잘못 짝지어진 것 고르기)
- ① SQL Injection — 기밀성
- ② CSRF — 기밀성
- ③ 랜섬웨어 — 가용성
- ④ 디렉터리 순회 — 기밀성
정답 및 해설 보기
정답: ② CSRF — 기밀성
| 보기 | 판정 | 분석 |
|---|---|---|
| ① SQLi → 기밀성 | ✅ 옳음 | DB 정보 무단 조회(무결성도 해당) |
| ② CSRF → 기밀성 | ❌ 정답 | CSRF는 쿠키 탈취(기밀성)가 아니라 무결성(위조) |
| ③ 랜섬웨어 → 가용성 | ✅ 옳음 | 파일 접근 차단 |
| ④ 디렉터리 순회 → 기밀성 | ✅ 옳음 | 시스템 파일 무단 열람 |
🔑 암기 47강 ★기무가★ + ★XSS=실행, CSRF=위조★. CSRF는 위조이므로 무결성 침해.
[기출 8 출제] SQL Injection 방어 대책으로 옳지 않은 것은? (옳지 않은 것 고르기)
- ① Prepared Statement(파라미터 바인딩)로 쿼리 구조를 고정한다
- ② 사용자 입력을 문자열로 연결하여 동적으로 SQL을 생성한다
- ③ 입력값을 화이트리스트 기반으로 검증한다
- ④ DB 계정에 필요한 최소 권한만 부여한다
정답 및 해설 보기
정답: ② 사용자 입력을 문자열로 연결하여 동적으로 SQL을 생성한다
| 보기 | ★준검권W★ 대입 | 판정 |
|---|---|---|
| ① Prepared Statement | 준(최고 방어) | ✅ 옳음 |
| ② 문자열 연결 동적 SQL | 방어가 아니라 SQLi의 원인 | ❌ 정답 |
| ③ 입력 화이트리스트 검증 | 검(보조) | ✅ 옳음 |
| ④ 최소 권한 | 권(피해 축소) | ✅ 옳음 |
🔑 암기 ★준검권W★ — 문자열 연결 동적 SQL은 Prepared Statement의 정반대. 1순위 방어는 항상 Prepared Statement.
한 장 요약
50강 두음 8총사 — 시험장 30초 즉답 카드
| 두음 | 풀이 | 한 줄 |
|---|---|---|
| ★인=데명경계★ | 인젝션 공통 원리 | 데이터·명령 경계 파괴 |
| ★에유블시★ | SQLi 4유형 | Error·Union·Blind·Time |
| ★준검권W★ | SQLi 방어 4축 | Prepared(1순위)·검증·권한·WAF |
| ★저반돔★ | XSS 3종 | Stored·Reflected·DOM |
| ★XSS=실행, CSRF=위조★ | 결정적 차이 | 스크립트 실행 vs 요청 위조 |
| ★웹3=인XC★ | 웹 공격 3대장 | Injection·XSS·CSRF |
| ★업디세★ | 기타 웹 3종 | Upload·Directory·Session |
| ★랜=암잠신★ | 랜섬웨어 3종 | 암호화·잠금·신종(RaaS) |
외우는 순서 — ★웹3=인XC★로 큰 그림을 잡고, 인젝션(★인=데명경계·에유블시·준검권W★) → XSS(★저반돔★) → CSRF(★XSS=실행, CSRF=위조★) → 기타(★업디세·랜=암잠신★) 순으로 채운다.
핵심 매핑 — 즉답
| 질문 | 즉답 |
|---|---|
| 인젝션 공통 원리 | 데이터·명령 경계 파괴 |
| SQLi 1순위 방어 | Prepared Statement |
| XSS 세션 쿠키 탈취 차단 | HttpOnly |
| CSRF 대표 방어 | CSRF 토큰 + SameSite |
| 클릭재킹 방어 | X-Frame-Options |
| 디렉터리 순회 시그니처 | ../ + /etc/passwd |
| Webshell 1차 방어 | 서버측 확장자 화이트리스트 |
| 세션 고정 방어 | 로그인 성공 시 세션 ID 재발급 |
| 트로이 목마 자기복제 | X(위장만) |
| 랜섬웨어 침해 CIA | 가용성 |
| 파일리스 방어 | EDR(행위 기반) |
핵심 함정 (모두 X — 보기에 나오면 오답)
| 오답 ❌ | 정답 ✅ |
|---|---|
| SQLi 주 침해 = 가용성 | 기밀성·무결성 |
| Prepared Statement = 보조 방어 | 최고 방어 |
| Stored XSS = 한 번만 피해 | DB 저장 → 지속 감염 |
| CSRF = 쿠키를 탈취 | 탈취 X, 이용 O |
| DOM XSS = 서버 로그로 탐지 쉬움 | 서버 미경유 → 로그 안 남음 |
| Webshell = 클라이언트 JS 검증으로 충분 | 서버측 화이트리스트 필수 |
| 트로이 목마 = 자기복제 | 복제 X(위장) |
| 랜섬웨어 주 침해 = 무결성 | 가용성 |
| 몸값 지불 = 가장 빠른 복구 | 지불 금지 권고 |
연결 지도: 47강 ★기무가★(CIA) → SQLi·XSS=기밀·무결, CSRF=무결성, 랜섬웨어=가용성. 49강 세션 하이재킹(네트워크 레벨) → 웹 레벨 XSS 쿠키 탈취. 49강 ★바웜트★·봇넷 → 50강 악성코드 7종·봇넷 DDoS. 45강 TCP 3-way → 기출의 SYN Flooding 소거. 50강 공격(창) → 51강 보안 솔루션(방패) 방화벽·IDS·IPS·VPN — 오늘 배운 공격 하나하나에 대응하는 방어로 잇는다.
50강 한 문장: "웹 공격은 신뢰할 수 없는 입력을 신뢰해서 생기고, 랜섬웨어는 클릭 한 번으로 가용성을 인질로 잡는다."
