네트워크·시스템·웹 보안
네트워크 공격과 보안장비, 시스템 하드닝, 웹 취약점과 시큐어코딩 대응을 학습한다.
1. 공격면과 심층방어
공격면은 공격자가 접근할 수 있는 계정, 포트, API, 프로그램, 외부 연계, 공급망 등의 전체 범위이다.
Internet
│
[경계 방화벽]
│
[WAF·Reverse Proxy]
│
[응용 서버] ──► [DB]
│
[내부 API·메시지]
│
[관리망·운영도구]
한 장비에만 의존하지 않고 네트워크 분리, 인증, 최소권한, 보안코딩, 모니터링, 백업을 겹쳐 적용한다.
2. 대표 네트워크 공격
| 공격 | 핵심 |
|---|---|
| 스니핑 | 통신 내용을 도청 |
| 스푸핑 | IP·ARP·DNS·신원 등을 위조 |
| 재전송 | 획득한 정상 메시지를 다시 사용 |
| 세션 하이재킹 | 유효한 세션을 탈취 |
| DoS | 한 주체가 자원·대역폭 고갈 |
| DDoS | 다수 감염 시스템이 분산 공격 |
| DRDoS | 반사·증폭 가능한 서버를 이용 |
| 중간자 공격 | 통신 사이에 끼어 도청·변조 |
공격자 ─ 위조된 피해자 주소 ─► 반사 서버 다수
피해자 ◄──── 증폭된 응답 ───── 반사 서버 다수
대응은 소스 검증, 속도 제한, 필터링, 비정상 트래픽 탐지, 용량·분산 대응, 안전한 프로토콜 설정을 조합한다.
3. 방화벽·IDS·IPS·WAF
| 장비 | 주 역할 |
|---|---|
| 방화벽 | 주소·포트·상태·응용 규칙으로 통신 허용/차단 |
| IDS | 의심 활동 탐지·경보 |
| IPS | 경로상에서 탐지 후 차단 |
| WAF | HTTP 요청과 웹 공격 패턴을 응용 계층에서 검사 |
| 프록시 | 클라이언트와 서버 사이 중계·정책·캐시 |
| VPN | 신뢰하기 어려운 네트워크 위에 암호화 터널 구성 |
외부
│
[Screening Router]
│
[DMZ: 공개 Web·DNS]
│
[내부 방화벽]
│
내부 업무망
제공 자료의 스크린드 서브넷 구조는 DMZ를 둔 다층 방화벽 구조로 이해한다.
방화벽이 허용한 정상 포트 안에서도 웹 취약점 공격이 들어올 수 있으므로 WAF와 응용 보안이 별도로 필요하다.
4. 네트워크 분리와 Zero Trust 기초
- 외부·DMZ·업무·DB·관리망을 목적에 따라 분리
- 관리 포트는 제한된 관리망에서만 접근
- 동서 트래픽도 필요한 서비스만 허용
- 장치·사용자·서비스 신원을 지속 검증
- 네트워크 위치만으로 신뢰하지 않음
- 최소권한과 세션별 위험 평가
Zero Trust는 특정 제품이 아니라 “명시적으로 검증하고 최소권한을 적용하며 침해를 가정한다”는 보안 접근이다.
5. 시스템 하드닝
하드닝은 불필요한 기능과 공격면을 줄이고 안전한 설정을 적용하는 활동이다.
기본 설치
↓
불필요 서비스·포트 제거
↓
계정·권한·비밀번호 정책
↓
패치·안전한 설정
↓
로그·감사·무결성 점검
↓
기준선 저장·정기 검증
주요 항목:
- 기본·공유계정 제거 또는 통제
- 관리자 원격접속 제한
- 패치와 취약 구성 조치
- 파일·디렉터리 권한 최소화
- 시간 동기화
- 보안로그 중앙 전송
- 실행 파일·설정 변경 감시
- 백신·EDR 등 엔드포인트 통제
6. 악성코드
| 종류 | 특징 |
|---|---|
| 바이러스 | 다른 파일·프로그램에 기생 |
| 웜 | 네트워크 등을 통해 자기 복제 |
| 트로이목마 | 정상 프로그램처럼 위장 |
| 랜섬웨어 | 데이터 암호화·서비스 방해 후 금전 요구 |
| 루트킷 | 높은 권한 확보와 존재 은닉 |
| 백도어 | 정상 통제를 우회하는 비밀 접근 |
| 스파이웨어·키로거 | 사용자 정보와 입력 탈취 |
| 봇 | 원격 명령을 받아 DDoS 등에 사용 |
대응:
- 실행 통제와 최소권한
- 패치
- 이메일·웹 필터링
- EDR·행위 탐지
- 네트워크 분리
- 오프라인·불변 백업
- 사고대응 훈련
7. SQL Injection
입력값이 SQL 구조로 해석되어 의도하지 않은 쿼리를 실행하는 취약점이다.
나쁜 예:
query = "SELECT * FROM users WHERE id='" + user_input + "'"
안전한 원칙:
cursor.execute(
"SELECT * FROM users WHERE id = %s",
(user_input,)
)
- 파라미터 바인딩
- 입력 형식 검증
- DB 계정 최소권한
- 오류정보 최소화
- 동적 식별자는 허용목록으로 처리
단순히 특수문자를 제거하는 방식만으로 안전을 보장하기 어렵다.
8. XSS와 출력 인코딩
XSS는 공격자가 넣은 스크립트가 다른 사용자의 브라우저에서 실행되는 취약점이다.
공격자 입력 → 서버 저장·반사 → 피해자 브라우저 렌더링
│
└─ 스크립트 실행·세션 악용
대응:
- 출력 문맥에 맞는 인코딩
- 안전한 템플릿 엔진
- 위험 HTML 정제
- CSP 보완
- 쿠키
HttpOnly - 입력검증만으로 끝내지 않음
HTML 본문, 속성, JavaScript, URL 문맥은 필요한 인코딩이 다를 수 있다.
9. CSRF·SSRF·접근통제 오류
CSRF
로그인된 사용자의 브라우저가 공격자의 요청을 의도치 않게 보내도록 만든다.
대응:
- CSRF 토큰
SameSite쿠키- 중요 작업 재인증
- 상태 변경에 GET 사용 금지
- Origin/Referer 검증 보완
SSRF
서버가 공격자가 지정한 내부·외부 주소로 요청하도록 악용한다.
대응:
- 목적지 허용목록
- 내부 주소·메타데이터 서비스 차단
- URL 파싱·리다이렉트 검증
- 네트워크 egress 제한
접근통제 오류
URL이나 객체 ID만 바꿔 다른 사용자의 데이터를 읽는 문제를 포함한다. 모든 요청에서 서버 측 권한 검사를 수행해야 한다.
10. 파일·API·비밀 관리
- 파일 업로드 확장자만 믿지 않고 내용·크기·저장경로 검증
- 실행 가능한 경로와 업로드 저장소 분리
- API 요청의 인증·인가·속도 제한
- 오류 응답에 스택·SQL·비밀정보 노출 금지
- 비밀키·토큰을 코드에 하드코딩하지 않음
- 의존성·이미지·패키지 취약점과 무결성 관리
- 로그에 비밀번호·토큰·주민번호 원문을 남기지 않음
11. 공격면과 통제 위치를 연결하기
인터넷 → CDN/WAF → Reverse Proxy → Web/WAS → DB·내부 API
│ │ │
L7 필터 TLS 종료 최소권한·쿼리 바인딩
방화벽이 포트를 허용하면 응용 계층 취약점까지 안전해지는 것은 아니다. WAF는 보완 통제이며 안전한 코드와 권한 검사를 대체하지 않는다. Zero Trust는 위치 기반 자동 신뢰를 줄이고 사용자·기기·워크로드 신원, 정책, 지속 검증을 사용한다.
12. 안전한 구현 판독
SQL Injection
# 취약: 입력을 SQL 문법에 연결
sql = "SELECT * FROM users WHERE id='" + user_id + "'"
# 기본 방어: 파라미터 바인딩
cursor.execute("SELECT * FROM users WHERE id=%s", (user_id,))
테이블명·정렬방향처럼 파라미터 바인딩이 적용되지 않는 문법 요소는 허용목록으로 매핑한다.
XSS·CSRF·SSRF
- XSS: 출력 문맥에 맞는 인코딩과 안전한 DOM API, CSP를 결합
- CSRF: same-site 쿠키, 예측 불가능한 토큰, Origin 검증; 상태 변경을 GET으로 만들지 않음
- SSRF: 목적지 allowlist, URL 정규화 후 재검증, 내부 메타데이터·loopback·사설주소 차단, egress 통제
13. 최신 웹 보안 분류의 변화
OWASP Top 10:2025에는 Broken Access Control, Security Misconfiguration, Software Supply Chain Failures, Cryptographic Failures, Injection, Insecure Design, Authentication Failures, Software or Data Integrity Failures, Security Logging and Alerting Failures, Mishandling of Exceptional Conditions가 포함된다.
공급망 보안에서는 다음을 함께 본다.
의존성 잠금 → 출처 검증 → SBOM → 취약점·서명 검사 → 불변 아티팩트 → 배포 승인
예외를 과도하게 숨겨 성공처럼 처리하면 실패 안전성, 감사 가능성, 데이터 일관성이 깨질 수 있다. 반대로 상세 stack trace와 비밀값을 외부 응답에 노출해서도 안 된다.
14. 네트워크·웹 보안 문제 풀이 순서
- 공격자의 입력 지점과 신뢰 경계를 표시한다.
- 인증과 객체별 인가가 서버 측에서 수행되는지 본다.
- 입력 검증, 명령·데이터 분리, 출력 인코딩 중 맞는 통제를 고른다.
- 우회 경로와 내부 통신·관리 포트·공급망까지 포함한다.
- 탐지·차단만이 아니라 로그·경보·복구 증적을 확인한다.
확인 문제
- WAF가 안전한 쿼리 바인딩을 대체할 수 있는가?
- 동적 정렬 방향을 SQL에 넣을 때 기본 방어는?
- SSRF 방어에서 URL 문자열 앞부분만 검사하면 부족한 이유는?
- Zero Trust의 핵심은 내부망을 신뢰하는가?
- 예외를 모두 성공으로 숨길 때 생기는 위험은?