🖥️ 정보보안기사 | 애플리케이션보안 핵심 정리 (3-3편)
XXE · Blind/UNION SQL Injection · Directory Listing · Apache Order 지시자 · 웹서버 로그 분석 · FTP 보안 설정 · sendmail · DB 감사 로그 · DNSSEC 레코드 · Secure Coding 7가지 · Certificate Pinning까지
애플리케이션보안 마지막 편을 완벽 정리합니다.
1. SQL Injection 심화 — XXE · Blind · UNION · 주석 악용
Blind SQL Injection은 응답 시간 차이(Time-based)나 참/거짓 응답 차이(Boolean-based)를 이용합니다. 자동화 도구 sqlmap이 이를 자동으로 수행합니다. UNION 인젝션은 컬럼 수 파악이 선행되어야 하므로 ORDER BY 절부터 시작합니다.
| 공격 유형 | 원리 및 특징 |
|---|---|
| XXE Injection (XML External Entity) | 악의적인 XML 외부 엔티티 선언 → 시스템 파일 접근(/etc/passwd 등) 또는 내부 서비스 요청. SSRF와 유사한 내부망 접근 가능 |
| Blind SQL Injection | 쿼리 결과가 화면에 미출력 → 참(True)/거짓(False) 응답 차이로 DB 정보 한 글자씩 유추. 예: and 1=1 (True) vs and 1=2 (False) 조건 반응 확인 |
| UNION SQL Injection | ① ORDER BY로 컬럼 수 파악 → ② UNION SELECT로 출력 위치 확인 → ③ database() 함수로 DB명 탈취 → ④ information_schema로 테이블·컬럼명 파악 → ⑤ 실제 데이터 탈취 |
| MySQL 주석 # 악용 | # 이후는 주석 처리. 예: admin# 입력 시 패스워드 검증 구문 무력화 → 인증 우회. — 도 동일 효과 |
🎯 시험 출제 포인트
- XXE = XML 외부 엔티티 악용 → 시스템 파일 탈취·내부 서비스 접근
- Blind SQL Injection = 참/거짓 응답 차이로 데이터 한 글자씩 유추
- UNION SQL Injection 절차: ORDER BY(컬럼 수) → UNION SELECT → database() → information_schema
- MySQL 주석 # = 이후 구문 무력화 → 패스워드 검증 우회
2. 웹서버 취약점 — Directory Listing · FollowSymLinks · Path Traversal
📂 Directory Listing
🔗 FollowSymLinks 취약점
📁 Path Traversal
🛠️ 디렉터리 리스팅 차단
Tomcat = web.xml에서 listings=false
Apache = httpd.conf에서 Options -Indexes
🎯 시험 출제 포인트
- Directory Listing 원인: Apache Options Indexes 활성화
- 차단: Options -Indexes / Tomcat: listings=false / IIS: 디렉터리 검색 해제
- FollowSymLinks = 심볼릭 링크로 웹 루트 탈출 / Options 지시자에서 제거
- Path Traversal = ../ 경로 조작 / %2f·%5c·%255c 인코딩 우회
3. Apache 보안 설정 — Order 지시자 · 액세스 로그 · IIS W3C 로그
Apache Order 지시자는 방화벽 규칙처럼 순서가 매우 중요합니다. “Order Allow, Deny”는 기본적으로 모두 차단하고 Allow 예외를 적용하는 방식입니다. 액세스 로그 분석은 침해사고 대응 시 가장 먼저 확인하는 항목입니다.
| Order 설정 | 우선 적용 | 의미 |
|---|---|---|
| Order Allow, Deny | Deny 우선 | Allow를 먼저 처리하되 최종적으로 Deny가 우선. 기본 차단 정책 |
| Order Deny, Allow | Allow 우선 | Deny를 먼저 처리하되 최종적으로 Allow가 우선. 기본 허용 정책 |
① 클라이언트 IP → ② 식별자(-) → ③ 인증 사용자(-) → ④ 요청 날짜·시간 → ⑤ 요청 메서드·URL·HTTP 버전 → ⑥ 응답 상태 코드 → ⑦ 응답 바이트 수 → ⑧ Referer URL → ⑨ User-Agent
Q IIS W3C 로그에서 웹서버 IP와 클라이언트 IP 순서는?
🎯 시험 출제 포인트
- Order Allow, Deny → Deny 우선 / Order Deny, Allow → Allow 우선
- “Order에서 뒤에 오는 항목이 우선 적용”이 핵심 원칙
- Apache access_log: 클라이언트 IP가 맨 앞
- IIS W3C 로그: 웹서버 IP 먼저, 클라이언트 IP 나중
- access_log 9가지 항목 순서: IP → 날짜 → 요청(메서드·URL·HTTP버전) → 상태코드 → 바이트 → Referer → User-Agent
4. 파일 업로드 취약점 판단 · 평문 전송 취약점
Q 파일 업로드 취약점 판단 근거는?
Q 데이터 평문 전송 취약점과 대응은?
🎯 시험 출제 포인트
- 파일 업로드 취약점 판단: Content-Type 위장으로 .php/.jsp 업로드 성공
- 대응: 확장자 화이트리스트 + 웹 루트 외부 저장 + 실행 권한 제거
- 평문 전송 대응: SSL/TLS → HTTPS
5. robots.txt 설정
Q robots.txt의 역할과 모든 로봇 전체 차단 설정은?
User-agent: *
Disallow: /
# 특정 봇만 특정 경로 차단
User-agent: Googlebot
Disallow: /admin/
🎯 시험 출제 포인트
- robots.txt = 검색 로봇 크롤링 허용/차단 설정 파일
- 전체 차단: User-agent: * / Disallow: /
- 강제성 없음 → 보조 수단, 단독으로 보안 수단으로 사용 불가
6. FTP 보안 설정 — vsftpd · ProFTPD · 배너 변경
| FTP 데몬 | 설정 파일 | 주요 보안 설정 |
|---|---|---|
| vsftpd | vsftpd.conf | anonymous_enable=NO (Anonymous 차단) ftpd_banner=메시지 (배너 변경) |
| ProFTPD | proftpd.conf | RootLogin off (root 원격 접속 차단) 후 서비스 재시작 |
| Telnet 배너 | /etc/issue.net | 기본값에 OS 버전·커널 정보 노출 → 내용 변경 필요 |
🎯 시험 출제 포인트
- vsftpd Anonymous 차단: vsftpd.conf → anonymous_enable=NO
- vsftpd 배너 변경: vsftpd.conf → ftpd_banner=메시지
- ProFTPD root 원격 차단: proftpd.conf → RootLogin off
- Telnet 배너: /etc/issue.net 파일에서 설정
7. sendmail 보안 설정 — access 파일 4종 키워드
| 키워드 | 동작 | 특징 |
|---|---|---|
| OK | 무조건 허용 | RBL에 등록된 IP도 허용 |
| RELAY | 메일 릴레이 허용 | 해당 도메인/IP에서 오는 메일 중계 허용 |
| REJECT | 거부 + 거부 메시지 전송 | 발신자에게 반송 메시지 발송 |
| DISCARD | 폐기 + 메시지 미전송 | 조용히 폐기 (발신자에게 알림 없음) |
Q sendmail access 파일 수정 후 DB 변환 명령어는?
🎯 시험 출제 포인트
- sendmail access 4종: OK=허용 / RELAY=릴레이허용 / REJECT=거부+메시지전송 / DISCARD=조용히 폐기
- REJECT vs DISCARD 차이: REJECT는 반송 메시지 발송, DISCARD는 메시지 없이 폐기
- access 파일 변환 명령: makemap
8. Oracle DB 감사 로그 (audit_trail) · DBA 권한 최소화
| audit_trail 값 | 설명 |
|---|---|
| NONE | 감사 기능 비활성화 |
| DB | 감사 로그를 SYS.AUD$ 테이블에 저장 (DB 내부) |
| OS | 감사 로그를 운영체제 파일에 저장 (DB 외부) |
Q 감사 로그를 DB 외부에 저장하는 이유는?
Q DBA가 일반 사용자에게 부여하면 안 되는 권한 4가지는?
🎯 시험 출제 포인트
- audit_trail: NONE=비활성화 / DB=SYS.AUD$ 테이블 / OS=운영체제 파일
- 감사 로그 외부 저장 이유: 삭제·변조 방지 + 무결성 확보
- DBA 전용 권한: CREATE USER · DROP USER · DROP ANY TABLE · BACKUP ANY TABLE
9. DNSSEC 추가 레코드 4종 · dig axfr · named.conf
| DNSSEC 레코드 | 역할 |
|---|---|
| DNSKEY | Zone에 사용되는 공개키 데이터 저장 |
| RRSIG | 리소스 레코드에 대한 전자서명 저장 (무결성·원천 인증) |
| DS | 부모 Zone에 하위 Zone의 보안 위임 정보 저장 |
| NSEC / NSEC3 | 도메인 부재 인증 (존재하지 않는 도메인에 대한 응답을 서명) |
Q dig 명령어로 Zone Transfer를 요청하는 방법은?
Q 마스터 DNS 단독 운영 시 Zone Transfer 완벽 차단 설정은?
🎯 시험 출제 포인트
- DNSSEC 4종: DNSKEY=공개키 / RRSIG=전자서명 / DS=보안 위임 / NSEC=부재 인증
- dig Zone Transfer: dig axfr @서버IP 도메인명
- Zone Transfer 완벽 차단: named.conf → allow-transfer { none; };
10. Secure Coding 7가지 · Certificate Pinning · PreparedStatement
Secure Coding 7가지 유형은 행정안전부의 소프트웨어 개발 보안 가이드에서 정의한 분류입니다. Certificate Pinning은 모바일 앱 보안 점검 시 반드시 확인하는 항목으로, 미적용 시 Burp Suite로 MITM 공격이 가능합니다.
🔐 보안 취약점 분류
② 보안 기능
③ 시간 및 상태
④ 에러 처리
⑤ 코드 오류
⑥ 캡슐화
⑦ API 오용
📌 Certificate Pinning
Q Java JDBC의 PreparedStatement에서 ? (물음표)의 역할은?
String sql = “SELECT * FROM users WHERE id=? AND pw=?”;
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, userId); // ? 바인딩 — SQL 명령 아닌 데이터로만 처리
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
🎯 시험 출제 포인트
- Secure Coding 7가지: 입력 검증·보안 기능·시간 상태·에러 처리·코드 오류·캡슐화·API 오용
- Certificate Pinning = 미리 저장된 인증서와 비교 → MITM 방지
- PreparedStatement ? = 바인딩 변수 / 입력값을 데이터로만 처리 → SQL Injection 방어
11. 📌 애플리케이션보안 3-1 ~ 3-3 전체 통합 최종 요약
🎯 절대 암기 포인트 — 3편 全 범위
- DNS 질의 우선순위: DNS 캐시 → hosts.ics → hosts → DNS 서버
- DNS 포트: UDP 53(조회) / TCP 53(존 전송)
- 파밍 = hosts 파일 변조·DNS 스푸핑 / DNSSEC = 공개키 기반 무결성
- Zone Transfer 차단: named.conf → allow-transfer { none; };
- dig Zone Transfer: dig axfr @서버IP 도메인명
- DNSSEC 4종: DNSKEY=공개키 / RRSIG=전자서명 / DS=보안위임 / NSEC=부재 인증
- FTP Active=서버→클라이언트 / Passive=클라이언트→서버
- TFTP = UDP 69 / -s 옵션 chroot / 인증 없음
- ftpusers = FTP 접속 제한 계정 목록 / vsftpd: anonymous_enable=NO
- ProFTPD root 차단: RootLogin off / Telnet 배너: /etc/issue.net
- vsftpd 배너: ftpd_banner
- SNMP: UDP 161 / Trap=UDP 162 / Community String=public/private 변경 필수
- SNMPv3 = 인증+암호화 / v1·v2 = 평문 취약
- SPF = DNS TXT 메일서버IP / DKIM = 이메일 디지털 서명
- PGP = Web of Trust / Received 헤더 가장 아래 = 최초 발송 서버
- sendmail access: OK=허용 / RELAY=릴레이 / REJECT=거부+메시지 / DISCARD=조용히 폐기
- sendmail DB 변환: makemap
- OWASP A01:2021 = Broken Access Control / A10:2021 = SSRF
- SSRF = 서버를 통해 내부 네트워크 접근 / 방화벽 우회
- XXE = XML 외부 엔티티 악용 → 시스템 파일 탈취
- Blind SQL Injection = 참/거짓 응답으로 데이터 유추
- UNION SQL Injection: ORDER BY → UNION SELECT → database() → information_schema
- MySQL 주석 # = 이후 구문 무력화 → 인증 우회
- SQL Injection 최우선 방어: Prepared Statement (? = 바인딩 변수)
- Directory Listing 차단: Apache=Options -Indexes / Tomcat=listings=false / IIS=디렉터리 검색 해제
- FollowSymLinks = 심볼릭 링크 취약점 → Options 지시자에서 제거
- Path Traversal = ../ 경로 조작 / %2f·%5c 인코딩 우회
- Apache Order: 뒤에 오는 항목이 우선 (Allow,Deny=Deny우선 / Deny,Allow=Allow우선)
- Apache access_log: 클라이언트 IP가 맨 앞 / IIS W3C: 서버 IP 먼저
- 파일 업로드 취약점 판단: Content-Type 위장으로 .php/.jsp 업로드 성공
- robots.txt 전체 차단: User-agent: * / Disallow: /
- Aggregation = 낮은 등급 조각 조합 → 기밀 유추 / Data Diddling = 원본 바꿔치기
- DB DCL: GRANT=부여 / REVOKE=회수 / DENY=금지, DENY 우선
- MySQL 외부 차단: skip-networking / TDE = DBMS 내장 암호화
- Oracle audit_trail: NONE=비활성화 / DB=SYS.AUD$ 테이블 / OS=OS 파일
- DBA 전용 권한: CREATE USER·DROP USER·DROP ANY TABLE·BACKUP ANY TABLE
- SET 이중서명: 상점→결제정보 숨김 / 은행→주문정보 숨김
- OAuth 2.0 = 제3자 앱에 접근 권한 위임
- 세션 하이재킹 = 세션 ID 탈취 후 위장 / HttpOnly = JS 접근 차단 / Secure = HTTPS만 전송
- CSP = 리소스 출처 제한·XSS 방어 / X-Frame-Options = Clickjacking 방지
- ServerTokens Prod + ServerSignature Off = Apache 버전 정보 숨김
- Secure Coding 7가지: 입력 검증·보안 기능·시간 상태·에러 처리·코드 오류·캡슐화·API 오용
- Certificate Pinning = 미리 저장된 인증서와 비교 → MITM 방지
- Input Validation=입력 형식 검사 / Output Encoding=출력 이스케이프 → XSS 방어
- CSRF 방어: CSRF Token + Referer 검증 + SameSite 쿠키
- Directory Traversal 판단: ../ 경로 파라미터로 임의 파일 다운로드 성공

